def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())

        template = util.ParseWorkflowTemplates(args.template, dataproc)

        workflow_template = dataproc.GetRegionsWorkflowTemplate(
            template, args.version)

        cluster_name = template.workflowTemplatesId

        compute_resources = compute_helpers.GetComputeResources(
            self.ReleaseTrack(), cluster_name)
        use_accelerators = self.ReleaseTrack() == base.ReleaseTrack.BETA
        use_auto_delete_ttl = self.ReleaseTrack() == base.ReleaseTrack.BETA

        cluster_config = clusters.GetClusterConfig(args, dataproc,
                                                   template.projectsId,
                                                   compute_resources,
                                                   use_accelerators,
                                                   use_auto_delete_ttl)

        labels = labels_util.UpdateLabels(
            None, dataproc.messages.ManagedCluster.LabelsValue,
            labels_util.GetUpdateLabelsDictFromArgs(args), None)

        managed_cluster = dataproc.messages.ManagedCluster(
            clusterName=cluster_name, config=cluster_config, labels=labels)

        workflow_template.placement = dataproc.messages.WorkflowTemplatePlacement(
            managedCluster=managed_cluster)

        response = dataproc.client.projects_regions_workflowTemplates.Update(
            workflow_template)
        return response
Ejemplo n.º 2
0
    def Run(self, args):
        client = cloudkms_base.GetClientInstance()
        messages = cloudkms_base.GetMessagesModule()

        crypto_key_ref = flags.ParseCryptoKeyName(args)
        parent_ref = flags.ParseParentFromResource(crypto_key_ref)

        req = messages.CloudkmsProjectsLocationsKeyRingsCryptoKeysCreateRequest(
            parent=parent_ref.RelativeName(),
            cryptoKeyId=crypto_key_ref.Name(),
            cryptoKey=messages.CryptoKey(
                # TODO(b/35914817): Find a better way to get the enum value by name.
                purpose=getattr(messages.CryptoKey.PurposeValueValuesEnum,
                                PURPOSE_MAP[args.purpose]),
                labels=labels_util.UpdateLabels(
                    None,
                    messages.CryptoKey.LabelsValue,
                    update_labels=labels_util.GetUpdateLabelsDictFromArgs(
                        args))),
        )

        flags.SetNextRotationTime(args, req.cryptoKey)
        flags.SetRotationPeriod(args, req.cryptoKey)

        return client.projects_locations_keyRings_cryptoKeys.Create(req)
Ejemplo n.º 3
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()))

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

        if not replacement:
            return image

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

        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()))
  def Run(self, args):
    project_ref = command_lib_util.ParseProject(args.id)
    try:
      create_op = projects_api.Create(
          project_ref,
          display_name=args.name,
          update_labels=labels_util.GetUpdateLabelsDictFromArgs(args))
    except apitools_exceptions.HttpError as error:
      if error.status_code == httplib.CONFLICT:
        msg = ('Project creation failed. The project ID you specified is '
               'already in use by another project. Please try an alternative '
               'ID.')
        unused_type, unused_value, traceback = sys.exc_info()
        raise exceptions.HttpException, msg, traceback
      raise
    log.CreatedResource(project_ref, async=True)
    create_op = operations.WaitForOperation(create_op)

    # Enable cloudapis.googleapis.com
    if args.enable_cloud_apis:
      log.debug('Enabling cloudapis.googleapis.com')
      services_client = apis.GetClientInstance('servicemanagement', 'v1')
      enable_operation = services_enable_api.EnableServiceApiCall(
          project_ref.Name(), 'cloudapis.googleapis.com')
      services_util.WaitForOperation(enable_operation.name, services_client)
      # TODO(user): Retry in case it failed?

    return operations.ExtractOperationResponse(
        create_op, apis.GetMessagesModule('cloudresourcemanager', 'v1').Project)
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 def ConfigureJob(self, messages, job, args):
     """Add type-specific job configuration to job message."""
     # Parse labels (if present)
     labels = labels_util.UpdateLabels(
         None, messages.Job.LabelsValue,
         labels_util.GetUpdateLabelsDictFromArgs(args), None)
     job.labels = labels
Ejemplo n.º 7
0
 def _SetDeploymentLabels(self, args, deployment):
     label_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
     if label_dict:
         deployment.labels = [
             self.messages.DeploymentLabelEntry(key=k, value=v)
             for k, v in sorted(label_dict.iteritems())
         ]
Ejemplo n.º 8
0
    def ConfigureCluster(messages, args, cluster):
        """Performs any additional configuration of the cluster."""
        labels = labels_util.UpdateLabels(
            None, messages.Cluster.LabelsValue,
            labels_util.GetUpdateLabelsDictFromArgs(args), None)

        cluster.labels = labels
Ejemplo n.º 9
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))

    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)
Ejemplo n.º 10
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.
    """
    messages = dm_beta_base.GetMessages()
    composite_type_ref = composite_types.GetReference(args.name)
    update_labels_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
    labels = dm_labels.UpdateLabels([],
                                    messages.CompositeTypeLabelEntry,
                                    update_labels=update_labels_dict)
    template_contents = composite_types.TemplateContentsFor(args.template)

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

    dm_write.Execute(request,
                     args.async,
                     dm_beta_base.GetClient().compositeTypes.Insert,
                     LogResource)
Ejemplo n.º 11
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()))
Ejemplo n.º 12
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.
    """
        messages = dm_beta_base.GetMessages()
        type_provider_ref = dm_beta_base.GetResources().Parse(
            args.provider_name, collection='deploymentmanager.typeProviders')
        update_labels_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
        labels = dm_labels.UpdateLabels([],
                                        messages.TypeProviderLabelEntry,
                                        update_labels=update_labels_dict)

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

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

        dm_write.Execute(request, args. async,
                         dm_beta_base.GetClient().typeProviders.Insert,
                         LogResource)
    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)
Ejemplo n.º 14
0
  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()))
Ejemplo n.º 15
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)

    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 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

    if disk_ref.Collection() == 'compute.disks':
      replacement = labels_util.UpdateLabels(
          disk.labels,
          messages.ZoneSetLabelsRequest.LabelsValue,
          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,
          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)
Ejemplo n.º 16
0
  def ConfigureCluster(messages, args, cluster):
    labels = labels_util.UpdateLabels(
        None,
        messages.Cluster.LabelsValue,
        labels_util.GetUpdateLabelsDictFromArgs(args),
        None)

    cluster.labels = labels
Ejemplo n.º 17
0
    def ConfigureJob(self, job, args):
        messages = self.context['dataproc_messages']

        # Parse labels (if present)
        labels = labels_util.UpdateLabels(
            None, messages.Job.LabelsValue,
            labels_util.GetUpdateLabelsDictFromArgs(args), None)
        job.labels = labels
Ejemplo n.º 18
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'
            replacement = 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=replacement))
        else:
            operation_collection = 'compute.regionOperations'
            replacement = 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=replacement))

        if not replacement:
            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()))
Ejemplo n.º 19
0
    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.

    Yields:
      A serialized object (dict) describing the results of the operation.
      This description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      util.RequestFailedError: if any of the requests to the API failed.
    """
        client = subscriptions.SubscriptionsClient()

        topic_ref = util.ParseTopic(args.topic, args.topic_project)
        push_config = util.ParsePushConfig(args.push_endpoint)
        retain_acked_messages = getattr(args, 'retain_acked_messages', None)
        retention_duration = getattr(args, 'message_retention_duration', None)
        if retention_duration:
            retention_duration = util.FormatDuration(retention_duration)

        labels = labels_util.UpdateLabels(
            None,
            client.messages.Subscription.LabelsValue,
            update_labels=labels_util.GetUpdateLabelsDictFromArgs(args))

        failed = []
        for subscription_name in args.subscription:
            subscription_ref = util.ParseSubscription(subscription_name)

            try:
                result = client.Create(subscription_ref,
                                       topic_ref,
                                       args.ack_deadline,
                                       push_config,
                                       retain_acked_messages,
                                       retention_duration,
                                       labels=labels)
            except api_ex.HttpError as error:
                exc = exceptions.HttpException(error)
                log.CreatedResource(subscription_ref.RelativeName(),
                                    kind='subscription',
                                    failed=exc.payload.status_message)
                failed.append(subscription_name)
                continue

            result = util.SubscriptionDisplayDict(result)
            log.CreatedResource(subscription_ref.RelativeName(),
                                kind='subscription')

            yield result

        if failed:
            raise util.RequestsFailedError(failed, 'create')
 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(label_dict.iteritems())
     ]
Ejemplo n.º 21
0
 def Run(self, args):
     project_ref = command_lib_util.ParseProject(args.id)
     result = projects_api.Create(
         project_ref,
         args.name,
         args.enable_cloud_apis,
         update_labels=labels_util.GetUpdateLabelsDictFromArgs(args))
     log.CreatedResource(project_ref)
     return result
Ejemplo n.º 22
0
 def _SetMetadata(self, args, deployment):
     label_dict = labels_util.GetUpdateLabelsDictFromArgs(args)
     label_entry = []
     if label_dict:
         label_entry = [
             dm_base.GetMessages().DeploymentLabelEntry(key=k, value=v)
             for k, v in sorted(label_dict.iteritems())
         ]
         deployment.labels = label_entry
     super(CreateALPHA, self)._SetMetadata(args, deployment)
Ejemplo n.º 23
0
    def Run(self, args):
        flags.CheckParentFlags(args, parent_required=False)
        project_id = args.id
        if not project_id and args.name:
            candidate = command_lib_util.IdFromName(args.name)
            if candidate and console_io.PromptContinue(
                    'No project id provided.',
                    'Use [{}] as project id'.format(candidate),
                    throw_if_unattended=True):
                project_id = candidate
        if not project_id:
            raise exceptions.RequiredArgumentException(
                'PROJECT_ID', 'an id must be provided for the new project')
        project_ref = command_lib_util.ParseProject(project_id)
        try:
            create_op = projects_api.Create(
                project_ref,
                display_name=args.name,
                parent=projects_api.ParentNameToResourceId(
                    flags.GetParentFromFlags(args)),
                update_labels=labels_util.GetUpdateLabelsDictFromArgs(args))
        except apitools_exceptions.HttpError as error:
            if error.status_code == httplib.CONFLICT:
                msg = (
                    'Project creation failed. The project ID you specified is '
                    'already in use by another project. Please try an alternative '
                    'ID.')
                unused_type, unused_value, traceback = sys.exc_info()
                raise exceptions.HttpException, msg, traceback
            raise
        log.CreatedResource(project_ref, async=True)
        create_op = operations.WaitForOperation(create_op)

        # Enable cloudapis.googleapis.com
        if args.enable_cloud_apis:
            log.debug('Enabling cloudapis.googleapis.com')
            services_client = apis.GetClientInstance('servicemanagement', 'v1')
            enable_operation = services_enable_api.EnableServiceApiCall(
                project_ref.Name(), 'cloudapis.googleapis.com')
            enable_operation_ref = resources.REGISTRY.Parse(
                enable_operation.name,
                collection='servicemanagement.operations')
            services_util.WaitForOperation(enable_operation_ref,
                                           services_client)
            # TODO(user): Retry in case it failed?

        if args.set_as_default:
            project_property = properties.FromString('core/project')
            properties.PersistProperty(project_property, args.id)
            log.status.Print(
                'Updated property [core/project] to [{0}].'.format(args.id))

        return operations.ExtractOperationResponse(
            create_op,
            apis.GetMessagesModule('cloudresourcemanager', 'v1').Project)
Ejemplo n.º 24
0
 def ConfigureJob(self, job, args):
     messages = self.context['dataproc_messages']
     # Configure Restartable job.
     if args.max_failures_per_hour:
         scheduling = messages.JobScheduling(
             maxFailuresPerHour=args.max_failures_per_hour)
         job.scheduling = scheduling
     # Parse labels (if present)
     labels = labels_util.UpdateLabels(
         None, messages.Job.LabelsValue,
         labels_util.GetUpdateLabelsDictFromArgs(args), None)
     job.labels = labels
Ejemplo n.º 25
0
 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
Ejemplo n.º 26
0
  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()))
Ejemplo n.º 27
0
    def Run(self, args):
        pipelines = bio.Pipelines(properties.VALUES.core.project.Get())
        op = pipelines.RunDeepVariant(
            compute_zones=args.zones,
            input_fastq1=[args.input_pair[0]],
            input_fastq2=[args.input_pair[1]],
            labels=labels_util.UpdateLabels(
                None,
                pipelines.GetMessages().PipelineOptions.LabelsValue,
                labels_util.GetUpdateLabelsDictFromArgs(args), None),
            output_path=args.output_path,
            sample_name=args.sample_name)

        log.status.Print('Running [{0}].'.format(op.name))
        return op
Ejemplo n.º 28
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))

    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
Ejemplo n.º 29
0
  def Run(self, args):
    holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
    client = holder.client.apitools_client
    messages = holder.client.messages

    instance_ref = instances_flags.INSTANCE_ARG.ResolveAsResource(
        args, holder.resources,
        scope_lister=flags.GetDefaultScopeLister(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

    replacement = labels_util.UpdateLabels(
        instance.labels,
        messages.InstancesSetLabelsRequest.LabelsValue,
        remove_labels=remove_labels)
    request = messages.ComputeInstancesSetLabelsRequest(
        project=instance_ref.project,
        instance=instance_ref.instance,
        zone=instance_ref.zone,
        instancesSetLabelsRequest=
        messages.InstancesSetLabelsRequest(
            labelFingerprint=instance.labelFingerprint,
            labels=replacement))

    if not replacement:
      return instance

    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()))
Ejemplo n.º 30
0
  def Run(self, args):
    holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
    client = holder.client.apitools_client
    messages = holder.client.messages

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

    remove_labels = labels_util.GetUpdateLabelsDictFromArgs(args)

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

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

    replacement = labels_util.UpdateLabels(
        snapshot.labels,
        messages.GlobalSetLabelsRequest.LabelsValue,
        remove_labels=remove_labels)
    if not replacement:
      return snapshot

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

    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()))