Esempio n. 1
0
  def Args(parser, version=base.ReleaseTrack.GA):
    """Args is called by calliope to gather arguments for this command.

    Args:
      parser: An argparse parser that you can use to add arguments that go
          on the command line after this command. Positional arguments are
          allowed.
      version: The version this tool is running as. base.ReleaseTrack.GA
          is the default.
    """
    flags.AddDeploymentNameFlag(parser)
    flags.AddPropertiesFlag(parser)
    flags.AddAsyncFlag(parser)

    parser.add_argument(
        '--description',
        help='The new description of the deployment.',
        dest='description'
    )

    group = parser.add_mutually_exclusive_group()
    group.add_argument(
        '--config',
        help='Filename of config that specifies resources to deploy. '
        'Required unless launching an already-previewed update to this '
        'deployment. More information is available at '
        'https://cloud.google.com/deployment-manager/docs/configuration/.',
        dest='config')

    if version in [base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA]:
      group.add_argument(
          '--manifest-id',
          help='Manifest Id of a previous deployment. '
          'This flag cannot be used with --config.',
          dest='manifest_id')

    labels_util.AddUpdateLabelsFlags(parser)

    parser.add_argument(
        '--preview',
        help='Preview the requested update without making any changes to the'
        'underlying resources. (default=False)',
        dest='preview',
        default=False,
        action='store_true')

    parser.add_argument(
        '--create-policy',
        help='Create policy for resources that have changed in the update.',
        default='CREATE_OR_ACQUIRE',
        choices=(sorted(dm_v2_base.GetMessages()
                        .DeploymentmanagerDeploymentsUpdateRequest
                        .CreatePolicyValueValuesEnum.to_dict().keys())))

    flags.AddDeletePolicyFlag(
        parser, dm_v2_base.GetMessages()
        .DeploymentmanagerDeploymentsUpdateRequest)
    flags.AddFingerprintFlag(parser)

    parser.display_info.AddFormat(flags.RESOURCES_AND_OUTPUTS_FORMAT)
Esempio n. 2
0
    def Run(self, args):
        """Run 'resources list'.

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

    Returns:
      The list of resources for the specified deployment.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        request = dm_v2_base.GetMessages(
        ).DeploymentmanagerResourcesListRequest(
            project=dm_base.GetProject(),
            deployment=args.deployment,
        )
        return dm_api_util.YieldWithHttpExceptions(
            list_pager.YieldFromList(dm_v2_base.GetClient().resources,
                                     request,
                                     field='resources',
                                     limit=args.limit,
                                     batch_size=args.page_size))
Esempio n. 3
0
  def Run(self, args):
    """Run 'operations wait'.

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

    Raises:
      HttpException: An http error response was received while executing api
          request.
    Raises:
      OperationError: Operation finished with error(s) or timed out.
    """
    failed_ops = []
    for operation_name in args.operation_name:
      try:
        dm_write.WaitForOperation(dm_v2_base.GetClient(),
                                  dm_v2_base.GetMessages(),
                                  operation_name, '', dm_base.GetProject(),
                                  timeout=OPERATION_TIMEOUT)
      except exceptions.OperationError:
        failed_ops.append(operation_name)
    if failed_ops:
      if len(failed_ops) == 1:
        raise exceptions.OperationError(
            'Operation %s failed to complete or has errors.' % failed_ops[0])
      else:
        raise exceptions.OperationError(
            'Some operations failed to complete without errors:\n'
            + '\n'.join(failed_ops))
    else:
      log.status.Print('All operations completed successfully.')
Esempio n. 4
0
  def Run(self, args):
    """Run 'manifests describe'.

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

    Returns:
      The requested manifest.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
    if not args.manifest:
      try:
        deployment = dm_v2_base.GetClient().deployments.Get(
            dm_v2_base.GetMessages().DeploymentmanagerDeploymentsGetRequest(
                project=dm_base.GetProject(),
                deployment=args.deployment
            )
        )
      except apitools_exceptions.HttpError as error:
        raise exceptions.HttpException(error)

      manifest = dm_api_util.ExtractManifestName(deployment)
      if manifest:
        args.manifest = manifest

    try:
      return dm_v2_base.GetClient().manifests.Get(
          dm_v2_base.GetMessages().DeploymentmanagerManifestsGetRequest(
              project=dm_base.GetProject(),
              deployment=args.deployment,
              manifest=args.manifest,
          )
      )
    except apitools_exceptions.HttpError as error:
      raise exceptions.HttpException(error, dm_api_util.HTTP_ERROR_FORMAT)
Esempio n. 5
0
  def Args(parser):
    """Args is called by calliope to gather arguments for this command.

    Args:
      parser: An argparse parser that you can use to add arguments that go
          on the command line after this command. Positional arguments are
          allowed.
    """
    parser.add_argument('deployment_name', nargs='+', help='Deployment name.')
    flags.AddDeletePolicyFlag(
        parser, dm_v2_base.GetMessages()
        .DeploymentmanagerDeploymentsDeleteRequest)
    flags.AddAsyncFlag(parser)
Esempio n. 6
0
    def Run(self, args):
        """Run 'operations describe'.

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

    Returns:
      The requested operation.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        try:
            return dm_v2_base.GetClient().operations.Get(
                dm_v2_base.GetMessages().DeploymentmanagerOperationsGetRequest(
                    project=dm_base.GetProject(),
                    operation=args.operation_name,
                ))
        except apitools_exceptions.HttpError as error:
            raise exceptions.HttpException(error,
                                           dm_api_util.HTTP_ERROR_FORMAT)
Esempio n. 7
0
    def Run(self, args):
        """Run 'deployments delete'.

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

    Returns:
      If --async=true, returns Operation to poll.
      Else, returns boolean indicating whether insert operation succeeded.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        prompt_message = ('The following deployments will be deleted:\n- ' +
                          '\n- '.join(args.deployment_name))
        if not args.quiet:
            if not console_io.PromptContinue(message=prompt_message,
                                             default=False):
                raise exceptions.OperationError('Deletion aborted by user.')

        operations = []
        errors = []
        for deployment_name in args.deployment_name:
            deployment_ref = self.resources.Parse(
                deployment_name,
                params={'project': properties.VALUES.core.project.GetOrFail},
                collection='deploymentmanager.deployments')
            try:
                operation = self.client.deployments.Delete(
                    self.messages.DeploymentmanagerDeploymentsDeleteRequest(
                        project=dm_base.GetProject(),
                        deployment=deployment_ref.deployment,
                        deletePolicy=(self.messages.
                                      DeploymentmanagerDeploymentsDeleteRequest
                                      .DeletePolicyValueValuesEnum(
                                          args.delete_policy)),
                    ))
                if args. async:
                    operations.append(operation)
                else:
                    op_name = operation.name
                    try:
                        # TODO(b/62720778): Refactor to use waiter.CloudOperationPoller
                        dm_write.WaitForOperation(self.client,
                                                  self.messages,
                                                  op_name,
                                                  'delete',
                                                  dm_base.GetProject(),
                                                  timeout=OPERATION_TIMEOUT)
                        log.status.Print('Delete operation ' + op_name +
                                         ' completed successfully.')
                    except exceptions.OperationError as e:
                        errors.append(
                            exceptions.OperationError(
                                u'Delete operation {0} failed.\n{1}'.format(
                                    op_name, e)))
                    completed_operation = dm_v2_base.GetClient(
                    ).operations.Get(dm_v2_base.GetMessages().
                                     DeploymentmanagerOperationsGetRequest(
                                         project=dm_base.GetProject(),
                                         operation=op_name,
                                     ))
                    operations.append(completed_operation)
            except apitools_exceptions.HttpError as error:
                errors.append(
                    api_exceptions.HttpException(
                        error, dm_api_util.HTTP_ERROR_FORMAT))

        if errors:
            raise core_exceptions.MultiError(errors)
        return operations