示例#1
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))

        labels_diff = labels_util.GetAndValidateOpsFromArgs(args)

        disk_info = api_util.GetDiskInfo(disk_ref, client, messages)
        disk = disk_info.GetDiskResource()

        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()))
示例#2
0
    def _Run(self, args, support_user_licenses=False):
        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))
        disk_info = api_util.GetDiskInfo(disk_ref, client, messages)
        service = disk_info.GetService()

        if support_user_licenses and args.IsSpecified(
                'zone') and _UserLicensesFlagsIncluded(args):
            disk_res = messages.Disk(name=disk_ref.Name())
            if args.IsSpecified('update_user_licenses'):
                disk_res.userLicenses = args.update_user_licenses
            disk_update_request = messages.ComputeDisksUpdateRequest(
                project=disk_ref.project,
                disk=disk_ref.Name(),
                diskResource=disk_res,
                zone=disk_ref.zone,
                paths=['userLicenses'])

            update_operation = service.Update(disk_update_request)
            update_operation_ref = holder.resources.Parse(
                update_operation.selfLink,
                collection=disk_info.GetOperationCollection())
            update_operation_poller = poller.Poller(service)
            result = waiter.WaitFor(
                update_operation_poller, update_operation_ref,
                'Updating user licenses of disk [{0}]'.format(disk_ref.Name()))
            if not _LabelsFlagsIncluded(args):
                return result

        labels_diff = labels_util.GetAndValidateOpsFromArgs(args)

        disk = disk_info.GetDiskResource()

        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

        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()))
示例#3
0
  def Run(self, args):
    holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
    client = holder.client.apitools_client
    messages = holder.client.messages

    disk_ref = disks_flags.MakeDiskArg(
        plural=False).ResolveAsResource(args, holder.resources)
    disk_info = api_util.GetDiskInfo(disk_ref, client, messages)
    disk_region = disk_info.GetDiskRegionName()

    resource_policies = []
    for policy in args.resource_policies:
      resource_policy_ref = util.ParseResourcePolicy(
          holder.resources,
          policy,
          project=disk_ref.project,
          region=disk_region)
      resource_policies.append(resource_policy_ref.SelfLink())

    return disk_info.MakeRemoveResourcePoliciesRequest(resource_policies,
                                                       holder.client)
    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()))