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: A serialized object (dict) describing the results of the operation. Raises: An HttpException if there was a problem calling the API topics.Patch command. """ client = topics.TopicsClient() topic_ref = util.ParseTopic(args.topic) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if update_labels or remove_labels: original_topic = client.Get(topic_ref) labels = labels_util.UpdateLabels( original_topic.labels, client.messages.Topic.LabelsValue, update_labels=update_labels, remove_labels=remove_labels) else: labels = None result = client.Patch(topic_ref, labels=labels) log.UpdatedResource(topic_ref.RelativeName(), kind='topic') return result
def Run(self, args): holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages disk_ref = self.DISK_ARG.ResolveAsResource( args, holder.resources, scope_lister=flags.GetDefaultScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if update_labels is None and remove_labels is None: raise calliope_exceptions.RequiredArgumentException( 'LABELS', 'At least one of --update-labels or ' '--remove-labels must be specified.') if disk_ref.Collection() == 'compute.disks': service = client.disks request_type = messages.ComputeDisksGetRequest elif disk_ref.Collection() == 'compute.regionDisks': service = client.regionDisks request_type = messages.ComputeRegionDisksGetRequest else: raise ValueError('Unexpected resource argument of {}' .format(disk_ref.Collection())) disk = service.Get(request_type(**disk_ref.AsDict())) if disk_ref.Collection() == 'compute.disks': replacement = labels_util.UpdateLabels( disk.labels, messages.ZoneSetLabelsRequest.LabelsValue, update_labels=update_labels, remove_labels=remove_labels) request = messages.ComputeDisksSetLabelsRequest( project=disk_ref.project, resource=disk_ref.disk, zone=disk_ref.zone, zoneSetLabelsRequest=messages.ZoneSetLabelsRequest( labelFingerprint=disk.labelFingerprint, labels=replacement)) else: replacement = labels_util.UpdateLabels( disk.labels, messages.RegionSetLabelsRequest.LabelsValue, update_labels=update_labels, remove_labels=remove_labels) request = messages.ComputeRegionDisksSetLabelsRequest( project=disk_ref.project, resource=disk_ref.disk, region=disk_ref.region, regionSetLabelsRequest=messages.RegionSetLabelsRequest( labelFingerprint=disk.labelFingerprint, labels=replacement)) if not replacement: return disk return service.SetLabels(request)
def Run(self, args): holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages forwarding_rule_ref = self.FORWARDING_RULE_ARG.ResolveAsResource( args, holder.resources, scope_lister=compute_flags.GetDefaultScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if update_labels is None and remove_labels is None: raise calliope_exceptions.RequiredArgumentException( 'LABELS', 'At least one of --update-labels or ' '--remove-labels must be specified.') if forwarding_rule_ref.Collection() == 'compute.globalForwardingRules': forwarding_rule = client.globalForwardingRules.Get( messages.ComputeGlobalForwardingRulesGetRequest( **forwarding_rule_ref.AsDict())) labels_value = messages.GlobalSetLabelsRequest.LabelsValue else: forwarding_rule = client.forwardingRules.Get( messages.ComputeForwardingRulesGetRequest( **forwarding_rule_ref.AsDict())) labels_value = messages.RegionSetLabelsRequest.LabelsValue replacement = labels_util.UpdateLabels( forwarding_rule.labels, labels_value, update_labels=update_labels, remove_labels=remove_labels) if not replacement: return forwarding_rule if forwarding_rule_ref.Collection() == 'compute.globalForwardingRules': request = self._CreateGlobalSetLabelsRequest( messages, forwarding_rule_ref, forwarding_rule, replacement) operation = client.globalForwardingRules.SetLabels(request) operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.globalOperations') operation_poller = poller.Poller(client.globalForwardingRules) else: request = self._CreateRegionalSetLabelsRequest( messages, forwarding_rule_ref, forwarding_rule, replacement) operation = client.forwardingRules.SetLabels(request) operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.regionOperations') operation_poller = poller.Poller(client.forwardingRules) return waiter.WaitFor(operation_poller, operation_ref, 'Updating labels of forwarding rule [{0}]'.format( forwarding_rule_ref.Name()))
def Run(self, args): update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if args.name is None and update_labels is None and remove_labels is None: raise ArgumentError('At least one of --name, --update-labels or ' '--remove-labels must be specified.') project_ref = command_lib_util.ParseProject(args.id) result = projects_api.Update(project_ref, name=args.name, update_labels=update_labels, remove_labels=remove_labels) log.UpdatedResource(project_ref) return result
def Run(self, args): """Issues API requests to update a Target VPN Gateway. Args: args: argparse.Namespace, The arguments received by this command. Returns: [protorpc.messages.Message], A list of responses returned by the compute API. """ holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages target_vpn_gateway_ref = self.TARGET_VPN_GATEWAY_ARG.ResolveAsResource( args, holder.resources, scope_lister=compute_flags.GetDefaultScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if update_labels is None and remove_labels is None: raise calliope_exceptions.RequiredArgumentException( 'LABELS', 'At least one of --update-labels or ' '--remove-labels must be specified.') target_vpn_gateway = client.targetVpnGateways.Get( messages.ComputeTargetVpnGatewaysGetRequest( **target_vpn_gateway_ref.AsDict())) labels_value = messages.RegionSetLabelsRequest.LabelsValue replacement = labels_util.UpdateLabels( target_vpn_gateway.labels, labels_value, update_labels=update_labels, remove_labels=remove_labels) if not replacement: return target_vpn_gateway request = self._CreateRegionalSetLabelsRequest( messages, target_vpn_gateway_ref, target_vpn_gateway, replacement) operation = client.targetVpnGateways.SetLabels(request) operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.regionOperations') operation_poller = poller.Poller(client.targetVpnGateways) return waiter.WaitFor(operation_poller, operation_ref, 'Updating labels of target VPN gateway [{0}]'.format( target_vpn_gateway_ref.Name()))
def Run(self, args): holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages instance_ref = flags.INSTANCE_ARG.ResolveAsResource( args, holder.resources, scope_lister=flags.GetInstanceZoneScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) result = None labels_operation_ref = None min_cpu_platform_operation_ref = None deletion_protection_operation_ref = None if update_labels or remove_labels: instance = client.instances.Get( messages.ComputeInstancesGetRequest(**instance_ref.AsDict())) result = instance labels_operation_ref = self._GetLabelsOperationRef( update_labels, remove_labels, instance, instance_ref, holder) if hasattr(args, 'min_cpu_platform') and args.min_cpu_platform is not None: min_cpu_platform_operation_ref = self._GetMinCpuPlatformOperationRef( args.min_cpu_platform, instance_ref, holder) deletion_protection = getattr(args, 'deletion_protection', None) if deletion_protection is not None: deletion_protection_operation_ref = ( self._GetDeletionProtectionOperationRef( args.deletion_protection, instance_ref, holder)) operation_poller = poller.Poller(client.instances) result = self._WaitForResult( operation_poller, labels_operation_ref, 'Updating labels of instance [{0}]', instance_ref.Name()) or result result = self._WaitForResult( operation_poller, min_cpu_platform_operation_ref, 'Changing minimum CPU platform of instance [{0}]', instance_ref.Name()) or result result = self._WaitForResult( operation_poller, deletion_protection_operation_ref, 'Setting deletion protection of instance [{0}] to [{1}]', instance_ref.Name(), deletion_protection) or result return result
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: A serialized object (dict) describing the results of the operation. This description fits the Resource described in the ResourceRegistry under 'pubsub.projects.subscriptions'. Raises: An HttpException if there was a problem calling the API subscriptions.Patch command. """ client = subscriptions.SubscriptionsClient() subscription_ref = util.ParseSubscription(args.subscription) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if update_labels or remove_labels: original_subscription = client.Get(subscription_ref) labels = labels_util.UpdateLabels( original_subscription.labels, client.messages.Subscription.LabelsValue, update_labels=update_labels, remove_labels=remove_labels) else: labels = None result = client.Patch( subscription_ref, ack_deadline=args.ack_deadline, push_config=util.ParsePushConfig(args.push_endpoint), retain_acked_messages=args.retain_acked_messages, labels=labels, message_retention_duration=args.message_retention_duration) result = util.SubscriptionDisplayDict(result) log.UpdatedResource(subscription_ref.RelativeName(), kind='subscription') return result
def Run(self, args): """Run 'types update'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Raises: HttpException: An http error response was received while executing api request. """ messages = dm_beta_base.GetMessages() composite_type_ref = composite_types.GetReference(args.name) get_request = messages.DeploymentmanagerCompositeTypesGetRequest( project=composite_type_ref.project, compositeType=args.name) existing_ct = dm_beta_base.GetClient().compositeTypes.Get(get_request) labels = dm_labels.UpdateLabels( existing_ct.labels, messages.CompositeTypeLabelEntry, labels_util.GetUpdateLabelsDictFromArgs(args), labels_util.GetRemoveLabelsListFromArgs(args)) composite_type = messages.CompositeType( name=args.name, description=args.description, status=args.status, templateContents=existing_ct.templateContents, labels=labels) update_request = messages.DeploymentmanagerCompositeTypesUpdateRequest( project=composite_type_ref.project, compositeType=args.name, compositeTypeResource=composite_type) dm_write.Execute(update_request, args.async, dm_beta_base.GetClient().compositeTypes.Update, LogResource)
def Run(self, args): """Run 'type-providers update'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Raises: HttpException: An http error response was received while executing api request. """ type_provider_ref = type_providers.GetReference( self.resources, args.provider_name) project = type_provider_ref.project name = type_provider_ref.typeProvider get_request = self.messages.DeploymentmanagerTypeProvidersGetRequest( project=project, typeProvider=name) existing_tp = self.client.typeProviders.Get(get_request) labels = dm_labels.UpdateLabels( existing_tp.labels, self.messages.TypeProviderLabelEntry, labels_util.GetUpdateLabelsDictFromArgs(args), labels_util.GetRemoveLabelsListFromArgs(args)) type_provider = self.messages.TypeProvider( name=name, description=args.description, descriptorUrl=(args.descriptor_url), labels=labels) type_providers.AddOptions(self.messages, args.api_options_file, type_provider) update_request = self.messages.DeploymentmanagerTypeProvidersUpdateRequest( project=project, typeProvider=args.provider_name, typeProviderResource=type_provider) dm_write.Execute(self.client, self.messages, self.resources, update_request, args. async, self.client.typeProviders.Update, LogResource)
def UpdateOthers(self, args, crypto_key, fields_to_update): # pylint: disable=line-too-long client = cloudkms_base.GetClientInstance() messages = cloudkms_base.GetMessagesModule() crypto_key_ref = flags.ParseCryptoKeyName(args) req = messages.CloudkmsProjectsLocationsKeyRingsCryptoKeysPatchRequest( name=crypto_key_ref.RelativeName(), cryptoKey=messages.CryptoKey(labels=labels_util.UpdateLabels( crypto_key.labels, messages.CryptoKey.LabelsValue, update_labels=labels_util.GetUpdateLabelsDictFromArgs(args), remove_labels=labels_util.GetRemoveLabelsListFromArgs(args))), ) req.updateMask = ','.join(fields_to_update) flags.SetNextRotationTime(args, req.cryptoKey) flags.SetRotationPeriod(args, req.cryptoKey) try: response = client.projects_locations_keyRings_cryptoKeys.Patch(req) except apitools_exceptions.HttpError: return None return response
def Run(self, args): """Run 'deployments update'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Returns: If --async=true, returns Operation to poll. Else, returns a struct containing the list of resources and list of outputs in the deployment. Raises: HttpException: An http error response was received while executing api request. """ deployment = dm_base.GetMessages().Deployment( name=args.deployment_name, ) if args.config: deployment.target = importer.BuildTargetConfig( dm_base.GetMessages(), args.config, args.properties) elif (self.ReleaseTrack() in [base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA] and args.manifest_id): deployment.target = importer.BuildTargetConfigFromManifest( dm_base.GetClient(), dm_base.GetMessages(), dm_base.GetProject(), args.deployment_name, args.manifest_id, args.properties) # Get the fingerprint from the deployment to update. try: current_deployment = dm_base.GetClient().deployments.Get( dm_base.GetMessages().DeploymentmanagerDeploymentsGetRequest( project=dm_base.GetProject(), deployment=args.deployment_name)) # Update the labels of the deployment if self.ReleaseTrack() in [base.ReleaseTrack.ALPHA]: update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) current_labels = current_deployment.labels deployment.labels = dm_labels.UpdateLabels( current_labels, dm_base.GetMessages().DeploymentLabelEntry, update_labels, remove_labels) # If no config or manifest_id are specified, but try to update labels, # only get current manifest when it is not a preveiw request if not args.config and not args.manifest_id: if args.update_labels or args.remove_labels: if not args.preview: current_manifest = dm_v2_util.ExtractManifestName( current_deployment) deployment.target = importer.BuildTargetConfigFromManifest( dm_base.GetClient(), dm_base.GetMessages(), dm_base.GetProject(), args.deployment_name, current_manifest) # If no fingerprint is present, default to an empty fingerprint. # This empty default can be removed once the fingerprint change is # fully implemented and all deployments have fingerprints. deployment.fingerprint = current_deployment.fingerprint or '' if args.description is None: deployment.description = current_deployment.description elif not args.description or args.description.isspace(): deployment.description = None else: deployment.description = args.description except apitools_exceptions.HttpError as error: raise exceptions.HttpException(error, dm_v2_util.HTTP_ERROR_FORMAT) try: operation = dm_base.GetClient().deployments.Update( dm_base.GetMessages( ).DeploymentmanagerDeploymentsUpdateRequest( deploymentResource=deployment, project=dm_base.GetProject(), deployment=args.deployment_name, preview=args.preview, createPolicy=(dm_base.GetMessages( ).DeploymentmanagerDeploymentsUpdateRequest. CreatePolicyValueValuesEnum( args.create_policy)), deletePolicy=(dm_base.GetMessages( ).DeploymentmanagerDeploymentsUpdateRequest. DeletePolicyValueValuesEnum( args.delete_policy)), )) except apitools_exceptions.HttpError as error: raise exceptions.HttpException(error, dm_v2_util.HTTP_ERROR_FORMAT) if args. async: return operation else: op_name = operation.name try: dm_write.WaitForOperation(op_name, 'update', dm_base.GetProject(), timeout=OPERATION_TIMEOUT) log.status.Print('Update operation ' + op_name + ' completed successfully.') except apitools_exceptions.HttpError as error: raise exceptions.HttpException(error, dm_v2_util.HTTP_ERROR_FORMAT) return dm_v2_util.FetchResourcesAndOutputs(dm_base.GetClient(), dm_base.GetMessages(), dm_base.GetProject(), args.deployment_name)
def _GetUpdatedDeploymentLabels(self, args, deployment): update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) return dm_labels.UpdateLabels(deployment.labels, self.messages.DeploymentLabelEntry, update_labels, remove_labels)
def Run(self, args): """Returns a list of requests necessary for updating forwarding rules.""" holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages forwarding_rule_ref = self.FORWARDING_RULE_ARG.ResolveAsResource( args, holder.resources, scope_lister=compute_flags.GetDefaultScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if (update_labels is None and remove_labels is None and args.network_tier is None): raise calliope_exceptions.ToolException( 'At least one property must be specified.') # Get replacement. if forwarding_rule_ref.Collection() == 'compute.globalForwardingRules': get_request = (client.globalForwardingRules, 'Get', messages.ComputeGlobalForwardingRulesGetRequest( forwardingRule=forwarding_rule_ref.Name(), project=forwarding_rule_ref.project)) labels_value = messages.GlobalSetLabelsRequest.LabelsValue else: get_request = (client.forwardingRules, 'Get', messages.ComputeForwardingRulesGetRequest( forwardingRule=forwarding_rule_ref.Name(), project=forwarding_rule_ref.project, region=forwarding_rule_ref.region)) labels_value = messages.RegionSetLabelsRequest.LabelsValue objects = holder.client.MakeRequests([get_request]) forwarding_rule = objects[0] forwarding_rule_replacement = self.Modify(messages, args, forwarding_rule) label_replacement = labels_util.UpdateLabels( forwarding_rule.labels, labels_value, update_labels=update_labels, remove_labels=remove_labels) # Create requests. requests = [] if forwarding_rule_ref.Collection() == 'compute.globalForwardingRules': if forwarding_rule_replacement: request = messages.ComputeGlobalForwardingRulesPatchRequest( forwardingRule=forwarding_rule_ref.Name(), forwardingRuleResource=forwarding_rule_replacement, project=forwarding_rule_ref.project) requests.append((client.globalForwardingRules, 'Patch', request)) if label_replacement: request = self._CreateGlobalSetLabelsRequest( messages, forwarding_rule_ref, forwarding_rule, label_replacement) requests.append((client.globalForwardingRules, 'SetLabels', request)) else: if forwarding_rule_replacement: request = messages.ComputeForwardingRulesPatchRequest( forwardingRule=forwarding_rule_ref.Name(), forwardingRuleResource=forwarding_rule_replacement, project=forwarding_rule_ref.project, region=forwarding_rule_ref.region) requests.append((client.forwardingRules, 'Patch', request)) if label_replacement: request = self._CreateRegionalSetLabelsRequest( messages, forwarding_rule_ref, forwarding_rule, label_replacement) requests.append((client.forwardingRules, 'SetLabels', request)) return holder.client.MakeRequests(requests)
def Run(self, args): holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages instance_ref = flags.INSTANCE_ARG.ResolveAsResource( args, holder.resources, scope_lister=flags.GetInstanceZoneScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) result = None labels_operation_ref = None min_cpu_platform_operation_ref = None if update_labels or remove_labels: instance = client.instances.Get( messages.ComputeInstancesGetRequest(**instance_ref.AsDict())) result = instance replacement = labels_util.UpdateLabels( instance.labels, messages.InstancesSetLabelsRequest.LabelsValue, update_labels=update_labels, remove_labels=remove_labels) if replacement: request = messages.ComputeInstancesSetLabelsRequest( project=instance_ref.project, instance=instance_ref.instance, zone=instance_ref.zone, instancesSetLabelsRequest=messages. InstancesSetLabelsRequest( labelFingerprint=instance.labelFingerprint, labels=replacement)) operation = client.instances.SetLabels(request) labels_operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.zoneOperations') if args.min_cpu_platform is not None: embedded_request = messages.InstancesSetMinCpuPlatformRequest( minCpuPlatform=args.min_cpu_platform or None) request = messages.ComputeInstancesSetMinCpuPlatformRequest( instance=instance_ref.instance, project=instance_ref.project, instancesSetMinCpuPlatformRequest=embedded_request, zone=instance_ref.zone) operation = client.instances.SetMinCpuPlatform(request) min_cpu_platform_operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.zoneOperations') operation_poller = poller.Poller(client.instances) if labels_operation_ref: result = waiter.WaitFor( operation_poller, labels_operation_ref, 'Updating labels of instance [{0}]'.format( instance_ref.Name())) if min_cpu_platform_operation_ref: result = waiter.WaitFor( operation_poller, min_cpu_platform_operation_ref, 'Changing minimum CPU platform of instance [{0}]'.format( instance_ref.Name())) return result
def Run(self, args): holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client.apitools_client messages = holder.client.messages address_ref = self.ADDRESS_ARG.ResolveAsResource( args, holder.resources, scope_lister=compute_flags.GetDefaultScopeLister(holder.client)) update_labels = labels_util.GetUpdateLabelsDictFromArgs(args) remove_labels = labels_util.GetRemoveLabelsListFromArgs(args) if update_labels is None and remove_labels is None: raise calliope_exceptions.RequiredArgumentException( 'LABELS', 'At least one of --update-labels or ' '--remove-labels must be specified.') if address_ref.Collection() == 'compute.globalAddresses': address = client.globalAddresses.Get( messages.ComputeGlobalAddressesGetRequest( **address_ref.AsDict())) labels_value = messages.GlobalSetLabelsRequest.LabelsValue else: address = client.addresses.Get( messages.ComputeAddressesGetRequest( **address_ref.AsDict())) labels_value = messages.RegionSetLabelsRequest.LabelsValue replacement = labels_util.UpdateLabels( address.labels, labels_value, update_labels=update_labels, remove_labels=remove_labels) if not replacement: return address if address_ref.Collection() == 'compute.globalAddresses': request = messages.ComputeGlobalAddressesSetLabelsRequest( project=address_ref.project, resource=address_ref.Name(), globalSetLabelsRequest=messages.GlobalSetLabelsRequest( labelFingerprint=address.labelFingerprint, labels=replacement)) operation = client.globalAddresses.SetLabels(request) operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.globalOperations') operation_poller = poller.Poller(client.globalAddresses) else: request = messages.ComputeAddressesSetLabelsRequest( project=address_ref.project, resource=address_ref.Name(), region=address_ref.region, regionSetLabelsRequest=messages.RegionSetLabelsRequest( labelFingerprint=address.labelFingerprint, labels=replacement)) operation = client.addresses.SetLabels(request) operation_ref = holder.resources.Parse( operation.selfLink, collection='compute.regionOperations') operation_poller = poller.Poller(client.addresses) return waiter.WaitFor(operation_poller, operation_ref, 'Updating labels of address [{0}]'.format( address_ref.Name()))