161 lines
4.2 KiB
Python
161 lines
4.2 KiB
Python
# -*- 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)
|