File: //snap/google-cloud-cli/current/lib/surface/logging/scopes/update.py
# -*- coding: utf-8 -*- #
# Copyright 2024 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.
"""'logging scopes update' command."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.logging import util
from googlecloudsdk.calliope import arg_parsers
from googlecloudsdk.calliope import base
from googlecloudsdk.calliope import exceptions as calliope_exceptions
DETAILED_HELP = {
'DESCRIPTION': """
Update the properties of a log scope.
""",
'EXAMPLES': """
To update the description of a log scope in a project, run:
$ {command} my-scope --description=my-new-description --project=my-project
To update the resource name of a log scope in a project. Ensure that you
provide all the resource names including the existing ones. For example,
if the log scope has the resource name my-project, and you want to update
the log scope to have the resource name another-project, run the following:
$ {command} my-scope --resource-names=projects/my-project,projects/another-project --project=my-project
""",
}
@base.UniverseCompatible
@base.ReleaseTracks(
base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA, base.ReleaseTrack.GA
)
class Update(base.UpdateCommand):
"""Update a log scope.
Changes one or more properties associated with a log scope.
"""
def __init__(self, *args, **kwargs):
super(Update, self).__init__(*args, **kwargs)
self._current_scope = None
@staticmethod
def Args(parser):
"""Register flags for this command."""
parser.add_argument(
'LOG_SCOPE_ID', help='The ID of the log scope to update.'
)
parser.add_argument(
'--description', help='A new description for the log scope.'
)
parser.add_argument(
'--resource-names',
help='A new set of resource names for the log scope.',
type=arg_parsers.ArgList(),
metavar='RESOURCE_NAMES',
)
def _Run(self, args):
scope_data = {}
update_mask = []
parameter_names = ['--description', '--resource-names']
if args.IsSpecified('description'):
scope_data['description'] = args.description
update_mask.append('description')
if args.IsSpecified('resource_names'):
scope_data['resourceNames'] = args.resource_names
update_mask.append('resource_names')
if not update_mask:
raise calliope_exceptions.MinimumArgumentException(
parameter_names, 'Please specify at least one property to update'
)
return util.GetClient().projects_locations_logScopes.Patch(
util.GetMessages().LoggingProjectsLocationsLogScopesPatchRequest(
name=util.CreateResourceName(
util.CreateResourceName(
util.GetProjectResource(args.project).RelativeName(),
'locations',
'global',
),
'logScopes',
args.LOG_SCOPE_ID,
),
logScope=util.GetMessages().LogScope(**scope_data),
updateMask=','.join(update_mask),
)
)
def Run(self, args):
"""This is what gets called when the user runs this command.
Args:
args: an argparse namespace. All the arguments that were provided to this
command invocation.
Returns:
The updated log scope.
"""
return self._Run(args)
Update.detailed_help = DETAILED_HELP