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)
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))
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.')
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)
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)
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)
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