示例#1
0
    def Run(self, args):
        projects = self.context['projects_client']
        messages = self.context['projects_messages']

        project_ref = self.GetProject(args.id)

        # Create project.
        project_creation_result = projects.projects.Create(
            messages.Project(
                projectId=project_ref.Name(),
                name=args.name if args.name else project_ref.Name()))

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

        log.CreatedResource(project_ref)
        return project_creation_result
示例#2
0
def Create(project_ref,
           project_name,
           enable_cloud_apis=True,
           update_labels=None):
    """Create a new project."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    # Create project.
    project_creation_result = client.projects.Create(
        messages.CloudresourcemanagerProjectsCreateRequest(
            project=messages.Project(
                projectId=project_ref.Name(),
                name=project_name if project_name else project_ref.Name(),
                labels=labels_util.UpdateLabels(None,
                                                messages.Project.LabelsValue,
                                                update_labels=update_labels))))

    if enable_cloud_apis:
        # Enable 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 project_creation_result
  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)
示例#4
0
    def Run(self, args):
        """Default Run method implementation."""

        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)
        labels = labels_util.Diff.FromCreateArgs(args).Apply(
            projects_util.GetMessages().Project.LabelsValue)
        try:
            create_op = projects_api.Create(
                project_ref,
                display_name=args.name,
                parent=projects_api.ParentNameToResourceId(
                    flags.GetParentFromFlags(args)),
                labels=labels)
        except apitools_exceptions.HttpConflictError:
            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
        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)

        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)
示例#5
0
    def Run(self, args):
        """Run 'service-management operations wait'.

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

    Returns:
      If successful, the response from the operations.Get API call.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        result = services_util.WaitForOperation(args.operation,
                                                self.services_client)
        return services_util.ProcessOperationResult(result)