Пример #1
0
  def testAddUpdateLabelsFlags(self):
    parser = argparse.ArgumentParser()
    labels_util.AddUpdateLabelsFlags(parser)
    args = parser.parse_args([
        '--update-labels=key1=value1,key2=value2',
        '--remove-labels=key3,key4',
    ])

    self.assertFalse(hasattr(args, 'labels'))
    self.assertTrue(hasattr(args, 'update_labels'))
    self.assertTrue(hasattr(args, 'remove_labels'))

    expected_update = {
        'key1': 'value1',
        'key2': 'value2',
    }
    actual_update = labels_util.GetUpdateLabelsDictFromArgs(args)
    self.assertEqual(expected_update, actual_update)

    expected_remove = [
        'key3',
        'key4',
    ]
    actual_remove = labels_util.GetRemoveLabelsListFromArgs(args)
    self.assertEqual(expected_remove, actual_remove)
Пример #2
0
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client.apitools_client
        messages = holder.client.messages

        snapshot_ref = SnapshotsAddLabels.SnapshotArg.ResolveAsResource(
            args, holder.resources)

        add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

        snapshot = client.snapshots.Get(
            messages.ComputeSnapshotsGetRequest(**snapshot_ref.AsDict()))

        labels_update = labels_util.Diff(additions=add_labels).Apply(
            messages.GlobalSetLabelsRequest.LabelsValue, snapshot.labels)

        if not labels_update.needs_update:
            return snapshot

        request = messages.ComputeSnapshotsSetLabelsRequest(
            project=snapshot_ref.project,
            resource=snapshot_ref.snapshot,
            globalSetLabelsRequest=messages.GlobalSetLabelsRequest(
                labelFingerprint=snapshot.labelFingerprint,
                labels=labels_update.labels))

        operation = client.snapshots.SetLabels(request)
        operation_ref = holder.resources.Parse(
            operation.selfLink, collection='compute.globalOperations')

        operation_poller = poller.Poller(client.snapshots)
        return waiter.WaitFor(
            operation_poller, operation_ref,
            'Updating labels of snapshot [{0}]'.format(snapshot_ref.Name()))
Пример #3
0
    def Run(self, args):
        """Run 'types create'.

    Args:
      args: argparse.Namespace, The arguments that this command was invoked
          with.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        composite_type_ref = composite_types.GetReference(
            self.resources, args.name)
        update_labels_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
        labels = dm_labels.UpdateLabels([],
                                        self.messages.CompositeTypeLabelEntry,
                                        update_labels=update_labels_dict)
        template_contents = composite_types.TemplateContentsFor(
            self.messages, args.template)

        composite_type = self.messages.CompositeType(
            name=args.name,
            description=args.description,
            status=args.status,
            templateContents=template_contents,
            labels=labels)
        request = self.messages.DeploymentmanagerCompositeTypesInsertRequest(
            project=composite_type_ref.project, compositeType=composite_type)

        dm_write.Execute(self.client, self.messages, self.resources, request,
                         args. async, self.client.compositeTypes.Insert,
                         LogResource)
Пример #4
0
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client.apitools_client
        messages = holder.client.messages

        ips_ref = self.IPS_ARG.ResolveAsResource(
            args,
            holder.resources,
            scope_lister=flags.GetDefaultScopeLister(holder.client))

        add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

        ips_info = api_util.GetInPlaceSnapshotInfo(ips_ref, client, messages)
        ips = ips_info.GetInPlaceSnapshotResource()

        set_label_req = ips_info.GetSetLabelsRequestMessage()
        labels_update = labels_util.Diff(additions=add_labels).Apply(
            set_label_req.LabelsValue, ips.labels)

        request = ips_info.GetSetInPlaceSnapshotLabelsRequestMessage(
            ips, labels_update.GetOrNone())

        if not labels_update.needs_update:
            return ips
        service = ips_info.GetService()
        operation = service.SetLabels(request)
        operation_ref = holder.resources.Parse(
            operation.selfLink, collection=ips_info.GetOperationCollection())

        operation_poller = poller.Poller(service)
        return waiter.WaitFor(
            operation_poller, operation_ref,
            'Updating labels of in-place snapshot [{0}]'.format(
                ips_ref.Name()))
Пример #5
0
 def Run(self, args):
     """Run the deploy command."""
     identifiers = args.CONCEPTS.environment.Parse().AsDict()
     labels_arg = labels_util.GetUpdateLabelsDictFromArgs(args)
     local_dir_archive = None
     try:
         local_dir_archive = cmd_lib.LocalDirectoryArchive(args.source)
         if args.bundle_file:
             local_dir_archive.ValidateZipFilePath(args.bundle_file)
             zip_file_path = args.bundle_file
         else:
             zip_file_path = local_dir_archive.Zip()
         upload_url = self._GetUploadUrl(identifiers)
         self._UploadArchive(upload_url, zip_file_path)
         operation = self._DeployArchive(identifiers, upload_url,
                                         labels_arg)
         if "organization" not in operation or "uuid" not in operation:
             raise waiter.OperationError(
                 "Unknown operation response: {}".format(operation))
         if "warnings" in operation["metadata"]:
             for warning in operation["metadata"]["warnings"]:
                 log.warning(warning)
         log.info("Started archives deploy operation %s", operation["name"])
         if args.async_:
             return operation
         waiter.WaitFor(
             apigee.LROPoller(operation["organization"]),
             operation["uuid"],
             message="Waiting for operation [{}] to complete".format(
                 operation["uuid"]),
             wait_ceiling_ms=5000,
         )
     finally:
         if local_dir_archive and hasattr(local_dir_archive, "Close"):
             local_dir_archive.Close()
Пример #6
0
    def Run(self, args):
        """Run 'type-providers create'.

    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 = self.resources.Parse(
            args.provider_name,
            params={'project': properties.VALUES.core.project.GetOrFail},
            collection='deploymentmanager.typeProviders')
        update_labels_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
        labels = dm_labels.UpdateLabels([],
                                        self.messages.TypeProviderLabelEntry,
                                        update_labels=update_labels_dict)

        type_provider = self.messages.TypeProvider(
            name=type_provider_ref.typeProvider,
            description=args.description,
            descriptorUrl=args.descriptor_url,
            labels=labels)

        type_providers.AddOptions(self.messages, args.api_options_file,
                                  type_provider)
        request = self.messages.DeploymentmanagerTypeProvidersInsertRequest(
            project=type_provider_ref.project, typeProvider=type_provider)

        dm_write.Execute(self.client, self.messages, self.resources, request,
                         args. async, self.client.typeProviders.Insert,
                         LogResource)
Пример #7
0
    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))

        add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

        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':
            operation_collection = 'compute.zoneOperations'
            labels_update = labels_util.Diff(additions=add_labels).Apply(
                messages.ZoneSetLabelsRequest.LabelsValue, disk.labels)
            request = messages.ComputeDisksSetLabelsRequest(
                project=disk_ref.project,
                resource=disk_ref.disk,
                zone=disk_ref.zone,
                zoneSetLabelsRequest=messages.ZoneSetLabelsRequest(
                    labelFingerprint=disk.labelFingerprint,
                    labels=labels_update.GetOrNone()))
        else:
            operation_collection = 'compute.regionOperations'
            labels_update = labels_util.Diff(additions=add_labels).Apply(
                messages.RegionSetLabelsRequest.LabelsValue, disk.labels)
            request = messages.ComputeRegionDisksSetLabelsRequest(
                project=disk_ref.project,
                resource=disk_ref.disk,
                region=disk_ref.region,
                regionSetLabelsRequest=messages.RegionSetLabelsRequest(
                    labelFingerprint=disk.labelFingerprint,
                    labels=labels_update.GetOrNone()))

        if not labels_update.needs_update:
            return disk

        operation = service.SetLabels(request)
        operation_ref = holder.resources.Parse(operation.selfLink,
                                               collection=operation_collection)

        operation_poller = poller.Poller(service)
        return waiter.WaitFor(
            operation_poller, operation_ref,
            'Updating labels of disk [{0}]'.format(disk_ref.Name()))
Пример #8
0
 def _SetMetadata(self, args, deployment):
     if args.description:
         deployment.description = args.description
     label_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
     if label_dict:
         deployment.labels = [
             self.messages.DeploymentLabelEntry(key=k, value=v)
             for k, v in sorted(six.iteritems(label_dict))
         ]
Пример #9
0
 def _UpdateLabels(self, connection_profile, args):
     """Updates labels of the connection profile."""
     add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)
     remove_labels = labels_util.GetRemoveLabelsListFromArgs(args)
     value_type = self._messages.ConnectionProfile.LabelsValue
     update_result = labels_util.Diff(additions=add_labels,
                                      subtractions=remove_labels,
                                      clear=args.clear_labels).Apply(
                                          value_type,
                                          connection_profile.labels)
     if update_result.needs_update:
         connection_profile.labels = update_result.labels
 def _UpdateLabels(self, stream, args):
   """Updates labels of the stream."""
   add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)
   remove_labels = labels_util.GetRemoveLabelsListFromArgs(args)
   value_type = self._messages.Stream.LabelsValue
   update_result = labels_util.Diff(
       additions=add_labels,
       subtractions=remove_labels,
       clear=args.clear_labels
   ).Apply(value_type, stream.labels)
   if update_result.needs_update:
     stream.labels = update_result.labels
 def _UpdateLabels(self, args, migration_job, update_fields):
     """Updates labels of the migration job."""
     add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)
     remove_labels = labels_util.GetRemoveLabelsListFromArgs(args)
     value_type = self.messages.MigrationJob.LabelsValue
     update_result = labels_util.Diff(
         additions=add_labels,
         subtractions=remove_labels,
         clear=args.clear_labels).Apply(value_type)
     if update_result.needs_update:
         migration_job.labels = update_result.labels
         update_fields.append('labels')
 def Run(self, args):
     labels = labels_util.GetUpdateLabelsDictFromArgs(args)
     restore_ref = args.CONCEPTS.restore.Parse()
     if args.IsSpecified('async'):
         return api_util.CreateRestore(restore_ref,
                                       backup=args.backup,
                                       description=args.description,
                                       labels=labels)
     api_util.CreateRestoreAndWaitForLRO(restore_ref,
                                         backup=args.backup,
                                         description=args.description,
                                         labels=labels)
     if not args.IsSpecified('wait_for_completion'):
         return []
     return api_util.WaitForRestoreToFinish(restore_ref.RelativeName())
Пример #13
0
  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)
Пример #14
0
  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))

    remove_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

    instance = client.instances.Get(
        messages.ComputeInstancesGetRequest(**instance_ref.AsDict()))

    if args.all:
      # removing all existing labels from the instance.
      remove_labels = {}
      if instance.labels:
        for label in instance.labels.additionalProperties:
          remove_labels[label.key] = label.value

    labels_update = labels_util.Diff(subtractions=remove_labels).Apply(
        messages.InstancesSetLabelsRequest.LabelsValue,
        instance.labels)
    if not labels_update.needs_update:
      return instance

    request = messages.ComputeInstancesSetLabelsRequest(
        project=instance_ref.project,
        instance=instance_ref.instance,
        zone=instance_ref.zone,
        instancesSetLabelsRequest=
        messages.InstancesSetLabelsRequest(
            labelFingerprint=instance.labelFingerprint,
            labels=labels_update.labels))

    operation = client.instances.SetLabels(request)
    operation_ref = holder.resources.Parse(
        operation.selfLink, collection='compute.zoneOperations')
    operation_poller = poller.Poller(client.instances)
    return waiter.WaitFor(
        operation_poller, operation_ref,
        'Changing labels of instance [{0}]'.format(
            instance_ref.Name()))
 def Run(self, args):
     labels = labels_util.GetUpdateLabelsDictFromArgs(args)
     backup_ref = args.CONCEPTS.backup.Parse()
     if args.IsSpecified('async'):
         return api_util.CreateBackup(
             backup_ref,
             description=args.description,
             labels=labels,
             retain_days=args.retain_days,
             delete_lock_days=args.delete_lock_days)
     api_util.CreateBackupAndWaitForLRO(
         backup_ref,
         description=args.description,
         labels=labels,
         retain_days=args.retain_days,
         delete_lock_days=args.delete_lock_days)
     if not args.IsSpecified('wait_for_completion'):
         return []
     return api_util.WaitForBackupToFinish(backup_ref.RelativeName())
Пример #16
0
  def Run(self, args):
    holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
    client = holder.client.apitools_client
    messages = holder.client.messages

    image_ref = self.DISK_IMAGE_ARG.ResolveAsResource(
        args, holder.resources)

    remove_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

    image = client.images.Get(
        messages.ComputeImagesGetRequest(**image_ref.AsDict()))

    if args.all:
      # removing all existing labels from the image.
      remove_labels = {}
      if image.labels:
        for label in image.labels.additionalProperties:
          remove_labels[label.key] = label.value

    labels_update = labels_util.Diff(subtractions=remove_labels).Apply(
        messages.GlobalSetLabelsRequest.LabelsValue,
        image.labels)
    if not labels_update.needs_update:
      return image

    request = messages.ComputeImagesSetLabelsRequest(
        project=image_ref.project,
        resource=image_ref.image,
        globalSetLabelsRequest=
        messages.GlobalSetLabelsRequest(
            labelFingerprint=image.labelFingerprint,
            labels=labels_update.labels))

    operation = client.images.SetLabels(request)
    operation_ref = holder.resources.Parse(
        operation.selfLink, collection='compute.globalOperations')

    operation_poller = poller.Poller(client.images)
    return waiter.WaitFor(
        operation_poller, operation_ref,
        'Updating labels of image [{0}]'.format(
            image_ref.Name()))
Пример #17
0
  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.
    """
    composite_type_ref = composite_types.GetReference(self.resources, args.name)
    get_request = self.messages.DeploymentmanagerCompositeTypesGetRequest(
        project=composite_type_ref.project,
        compositeType=args.name)
    existing_ct = self.client.compositeTypes.Get(get_request)

    labels = dm_labels.UpdateLabels(
        existing_ct.labels,
        self.messages.CompositeTypeLabelEntry,
        labels_util.GetUpdateLabelsDictFromArgs(args),
        labels_util.GetRemoveLabelsListFromArgs(args))

    composite_type = self.messages.CompositeType(
        name=args.name,
        description=args.description,
        status=args.status,
        templateContents=existing_ct.templateContents,
        labels=labels)

    update_request = self.messages.DeploymentmanagerCompositeTypesUpdateRequest(
        project=composite_type_ref.project,
        compositeType=args.name,
        compositeTypeResource=composite_type)

    dm_write.Execute(self.client,
                     self.messages,
                     self.resources,
                     update_request,
                     args.async_,
                     self.client.compositeTypes.Update,
                     LogResource)
Пример #18
0
 def Run(self, args):
   """Run the deploy command."""
   identifiers = args.CONCEPTS.environment.Parse().AsDict()
   labels_arg = labels_util.GetUpdateLabelsDictFromArgs(args)
   # Using as a context manager automatically cleans up the temp file on exit.
   with cmd_lib.LocalDirectoryArchive(args.source) as local_dir_archive:
     zip_file_path = local_dir_archive.Zip()
     upload_url = self._GetUploadUrl(identifiers)
     self._UploadArchive(upload_url, zip_file_path)
     operation = self._DeployArchive(identifiers, upload_url, labels_arg)
     if "organization" not in operation or "uuid" not in operation:
       raise waiter.OperationError(
           "Unknown operation response: {}".format(operation))
     if args.async_:
       return operation
     log.info("Started archives deploy operation %s", operation["name"])
     waiter.WaitFor(
         apigee.LROPoller(operation["organization"]),
         operation["uuid"],
         message="Waiting for operation [{}] to complete".format(
             operation["uuid"]))
Пример #19
0
  def Run(self, args):
    holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
    client = holder.client.apitools_client
    messages = holder.client.messages

    image_ref = self.DISK_IMAGE_ARG.ResolveAsResource(
        args, holder.resources,
        scope_lister=flags.GetDefaultScopeLister(holder.client))

    add_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

    image = client.images.Get(
        messages.ComputeImagesGetRequest(**image_ref.AsDict()))

    labels_update = labels_util.Diff(additions=add_labels).Apply(
        messages.GlobalSetLabelsRequest.LabelsValue, image.labels)

    if not labels_update.needs_update:
      return image

    request = messages.ComputeImagesSetLabelsRequest(
        project=image_ref.project,
        resource=image_ref.image,
        globalSetLabelsRequest=
        messages.GlobalSetLabelsRequest(
            labelFingerprint=image.labelFingerprint,
            labels=labels_update.labels))

    operation = client.images.SetLabels(request)
    operation_ref = holder.resources.Parse(
        operation.selfLink, collection='compute.globalOperations')

    operation_poller = poller.Poller(client.images)
    return waiter.WaitFor(
        operation_poller, operation_ref,
        'Updating labels of image [{0}]'.format(
            image_ref.Name()))
Пример #20
0
    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))
        remove_labels = labels_util.GetUpdateLabelsDictFromArgs(args)
        disk_info = api_util.GetDiskInfo(disk_ref, client, messages)
        disk = disk_info.GetDiskResource()

        if args.all:
            # removing all existing labels from the disk.
            remove_labels = {}
            if disk.labels:
                for label in disk.labels.additionalProperties:
                    remove_labels[label.key] = label.value
        labels_diff = labels_util.Diff(subtractions=remove_labels)

        set_label_req = disk_info.GetSetLabelsRequestMessage()
        labels_update = labels_diff.Apply(set_label_req.LabelsValue,
                                          disk.labels)
        request = disk_info.GetSetDiskLabelsRequestMessage(
            disk, labels_update.GetOrNone())
        if not labels_update.needs_update:
            return disk

        service = disk_info.GetService()
        operation = service.SetLabels(request)
        operation_ref = holder.resources.Parse(
            operation.selfLink, collection=disk_info.GetOperationCollection())

        operation_poller = poller.Poller(service)
        return waiter.WaitFor(
            operation_poller, operation_ref,
            'Updating labels of disk [{0}]'.format(disk_ref.Name()))
Пример #21
0
 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)