File: //snap/google-cloud-cli/current/lib/googlecloudsdk/command_lib/deploy/target_util.py
# -*- coding: utf-8 -*- #
# Copyright 2021 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Utilities for the cloud deploy target resource."""
from apitools.base.py import exceptions as apitools_exceptions
from googlecloudsdk.api_lib.clouddeploy import target
from googlecloudsdk.command_lib.deploy import rollout_util
from googlecloudsdk.core import log
from googlecloudsdk.core import resources
_SHARED_TARGET_COLLECTION = 'clouddeploy.projects.locations.targets'
def GetCurrentRollout(target_ref, pipeline_ref):
"""Gets the releases in the specified target and the last deployment associated with the target.
Args:
target_ref: protorpc.messages.Message, target resource object.
pipeline_ref: protorpc.messages.Message, pipeline object.
Returns:
release messages associated with the target.
last deployed rollout message.
Raises:
Exceptions raised by RolloutClient.GetCurrentRollout()
"""
current_rollout = None
try:
# find the last deployed rollout.
rollouts = list(
rollout_util.GetFilteredRollouts(
target_ref,
pipeline_ref,
filter_str=rollout_util.DEPLOYED_ROLLOUT_FILTER_TEMPLATE,
order_by=rollout_util.SUCCEED_ROLLOUT_ORDERBY,
limit=1))
if rollouts:
current_rollout = rollouts[0]
except apitools_exceptions.HttpError as error:
log.debug('failed to get the current rollout of target {}: {}'.format(
target_ref.RelativeName(), error.content))
return current_rollout
def TargetReferenceFromName(target_name):
"""Creates a target reference from full name.
Args:
target_name: str, target resource name.
Returns:
Target reference.
"""
return resources.REGISTRY.ParseRelativeName(
target_name, collection=_SHARED_TARGET_COLLECTION)
def TargetId(target_name_or_id):
"""Returns target ID.
Args:
target_name_or_id: str, target full name or ID.
Returns:
Target ID.
"""
if 'projects/' in target_name_or_id:
return TargetReferenceFromName(target_name_or_id).Name()
return target_name_or_id
def TargetReference(target_name_or_id, project, location_id):
"""Creates the target reference base on the parameters.
Returns the shared target reference.
Args:
target_name_or_id: str, target full name or ID.
project: str,project number or ID.
location_id: str, region ID.
Returns:
Target reference.
"""
return resources.REGISTRY.Parse(
None,
collection=_SHARED_TARGET_COLLECTION,
params={
'projectsId': project,
'locationsId': location_id,
'targetsId': TargetId(target_name_or_id),
})
def GetTarget(target_ref):
"""Gets the target message by calling the get target API.
Args:
target_ref: protorpc.messages.Message, protorpc.messages.Message, target
reference.
Returns:
Target message.
Raises:
Exceptions raised by TargetsClient's get functions
"""
return target.TargetsClient().Get(target_ref.RelativeName())
def PatchTarget(target_obj):
"""Patches a target resource by calling the patch target API.
Args:
target_obj: apitools.base.protorpclite.messages.Message, target message.
Returns:
The operation message.
"""
return target.TargetsClient().Patch(target_obj)
def DeleteTarget(name):
"""Deletes a target resource by calling the delete target API.
Args:
name: str, target name.
Returns:
The operation message.
"""
return target.TargetsClient().Delete(name)
def ListTarget(parent_name):
"""List target resources by calling the list target API.
Args:
parent_name: str, the name of the collection that owns the targets.
Returns:
List of targets returns from target list API call.
"""
return target.TargetsClient().List(parent_name)