Example #1
0
def Update(project_ref,
           name=None,
           parent=None,
           labels_diff=None,
           api_version=DEFAULT_API_VERSION):
    """Update project information."""
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)

    project = client.projects.Get(
        client.MESSAGES_MODULE.CloudresourcemanagerProjectsGetRequest(
            projectId=project_ref.projectId))

    if name:
        project.name = name

    if parent:
        project.parent = parent

    if labels_diff:
        labels_update = labels_diff.Apply(messages.Project.LabelsValue,
                                          project.labels)
        if labels_update.needs_update:
            project.labels = labels_update.labels

    return client.projects.Update(project)
Example #2
0
def List(
        limit=None,
        filter=None,  # pylint: disable=redefined-builtin
        batch_size=500,
        api_version=DEFAULT_API_VERSION):
    """Make API calls to List active projects.

  Args:
    limit: The number of projects to limit the results to. This limit is passed
      to the server and the server does the limiting.
    filter: The client side filter expression.
    batch_size: the number of projects to get with each request.
    api_version: the version of the api

  Returns:
    Generator that yields projects
  """
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)
    return list_pager.YieldFromList(
        client.projects,
        messages.CloudresourcemanagerProjectsListRequest(
            filter=_AddActiveProjectFilterIfNotSpecified(filter)),
        batch_size=batch_size,
        limit=limit,
        field='projects',
        batch_size_attribute='pageSize')
Example #3
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
Example #4
0
def Update(project_ref,
           name=None,
           parent=None,
           labels_diff=None):
  """Update project information."""
  client = projects_util.GetClient()
  messages = projects_util.GetMessages()

  try:
    project = client.projects.Get(
        client.MESSAGES_MODULE.CloudresourcemanagerProjectsGetRequest(
            projectId=project_ref.projectId))
  except exceptions.HttpError as error:
    raise projects_util.ConvertHttpError(error)

  if name:
    project.name = name

  if parent:
    project.parent = parent

  if labels_diff:
    labels_update = labels_diff.Apply(messages.Project.LabelsValue,
                                      project.labels)
    if labels_update.needs_update:
      project.labels = labels_update.labels

  try:
    return client.projects.Update(project)
  except exceptions.HttpError as error:
    raise projects_util.ConvertHttpError(error)
Example #5
0
def Create(project_ref,
           display_name=None,
           parent=None,
           labels=None,
           api_version=DEFAULT_API_VERSION):
    """Create a new project.

  Args:
    project_ref: The identifier for the project
    display_name: Optional display name for the project
    parent: Optional for the project (ex. folders/123 or organizations/5231)
    labels: Optional labels to apply to the project
    api_version: the version of the api

  Returns:
    An Operation object which can be used to check on the progress of the
    project creation.
  """
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)
    return client.projects.Create(
        messages.Project(
            projectId=project_ref.Name(),
            name=display_name if display_name else project_ref.Name(),
            parent=parent,
            labels=labels))
Example #6
0
def Update(project_ref,
           name=None,
           organization=None,
           update_labels=None,
           remove_labels=None):
    """Update project information."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    try:
        project = client.projects.Get(project_ref.Request())
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)

    if name:
        project.name = name
    if organization:
        if project.parent is not None:
            raise errors.ProjectMoveError(project, organization)
        project.parent = messages.ResourceId(id=organization,
                                             type='organization')
    project.labels = labels_util.UpdateLabels(project.labels,
                                              messages.Project.LabelsValue,
                                              update_labels=update_labels,
                                              remove_labels=remove_labels)
    try:
        return client.projects.Update(project)
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
Example #7
0
def Update(project_ref,
           name=None,
           parent=None,
           update_labels=None,
           remove_labels=None):
    """Update project information."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    try:
        project = client.projects.Get(
            client.MESSAGES_MODULE.CloudresourcemanagerProjectsGetRequest(
                projectId=project_ref.projectId))
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)

    if name:
        project.name = name

    if parent:
        project.parent = parent

    project.labels = labels_util.UpdateLabels(project.labels,
                                              messages.Project.LabelsValue,
                                              update_labels=update_labels,
                                              remove_labels=remove_labels)
    try:
        return client.projects.Update(project)
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
Example #8
0
def GetIamPolicy(project_ref):
    """Get IAM policy for a given project."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    policy_request = messages.CloudresourcemanagerProjectsGetIamPolicyRequest(
        resource=project_ref.Name(), )
    return client.projects.GetIamPolicy(policy_request)
Example #9
0
def SetIamPolicyFromFile(project_ref, policy_file):
    """Read projects IAM policy from a file, and set it."""
    messages = projects_util.GetMessages()
    policy = iam_util.ParsePolicyFile(policy_file, messages.Policy)
    try:
        return SetIamPolicy(project_ref, policy)
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
Example #10
0
def Undelete(project_ref):
    """Undelete a project that has been deleted."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    client.projects.Undelete(
        messages.CloudresourcemanagerProjectsUndeleteRequest(
            projectId=project_ref.Name()))
    return projects_util.DeletedResource(project_ref.Name())
Example #11
0
def Undelete(project_ref, api_version=DEFAULT_API_VERSION):
    """Undelete a project that has been deleted."""
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)

    client.projects.Undelete(
        messages.CloudresourcemanagerProjectsUndeleteRequest(
            projectId=project_ref.Name()))
    return projects_util.DeletedResource(project_ref.Name())
Example #12
0
def Delete(project_ref, api_version=DEFAULT_API_VERSION):
    """Delete an existing project."""
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)

    client.projects.Delete(
        messages.CloudresourcemanagerProjectsDeleteRequest(
            projectId=project_ref.Name()))
    return projects_util.DeletedResource(project_ref.Name())
Example #13
0
def AddIamPolicyBinding(project_ref,
                        member,
                        role,
                        api_version=DEFAULT_API_VERSION):
    messages = projects_util.GetMessages(api_version)

    policy = GetIamPolicy(project_ref, api_version)
    iam_util.AddBindingToIamPolicy(messages.Binding, policy, member, role)
    return SetIamPolicy(project_ref, policy, api_version=api_version)
Example #14
0
def Delete(project_ref):
    """Delete an existing project."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    client.projects.Delete(
        messages.CloudresourcemanagerProjectsDeleteRequest(
            projectId=project_ref.Name()))
    return projects_util.DeletedResource(project_ref.Name())
Example #15
0
def GetIamPolicy(project_ref, api_version=DEFAULT_API_VERSION):
  """Get IAM policy for a given project."""
  client = projects_util.GetClient(api_version)
  messages = projects_util.GetMessages(api_version)

  policy_request = messages.CloudresourcemanagerProjectsGetIamPolicyRequest(
      resource=project_ref.Name(),
  )
  return client.projects.GetIamPolicy(policy_request)
Example #16
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.ParseCreateArgs(
            args,
            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.')
            core_exceptions.reraise(exceptions.HttpException(msg))
        log.CreatedResource(project_ref, is_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, project_id)
            log.status.Print(
                'Updated property [core/project] to [{0}].'.format(project_id))

        return operations.ExtractOperationResponse(
            create_op,
            apis.GetMessagesModule('cloudresourcemanager', 'v1').Project)
Example #17
0
def ParentNameToResourceId(parent_name):
    messages = projects_util.GetMessages()
    if not parent_name:
        return None
    elif parent_name.startswith('folders/'):
        return messages.ResourceId(id=folders.FolderNameToId(parent_name),
                                   type='folder')
    elif parent_name.startswith('organizations/'):
        return messages.ResourceId(id=parent_name[len('organizations/'):],
                                   type='organization')
Example #18
0
def GetAncestry(project_id, api_version=DEFAULT_API_VERSION):
    """Get ancestry for a given project."""
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)

    ancestry_request = messages.CloudresourcemanagerProjectsGetAncestryRequest(
        getAncestryRequest=messages.GetAncestryRequest(),
        projectId=project_id,
    )

    return client.projects.GetAncestry(ancestry_request)
Example #19
0
def SetIamPolicy(project_ref, policy):
    """Set IAM policy, for a given project."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()
    policy_request = messages.CloudresourcemanagerProjectsSetIamPolicyRequest(
        resource=project_ref.Name(),
        setIamPolicyRequest=messages.SetIamPolicyRequest(policy=policy))
    try:
        return client.projects.SetIamPolicy(policy_request)
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
Example #20
0
def AddIamPolicyBindingWithCondition(project_ref,
                                     member,
                                     role,
                                     condition,
                                     api_version=DEFAULT_API_VERSION):
  """Add iam binding with condition to project_ref's iam policy."""
  messages = projects_util.GetMessages(api_version)

  policy = GetIamPolicy(project_ref, api_version=api_version)
  iam_util.AddBindingToIamPolicyWithCondition(messages.Binding, messages.Expr,
                                              policy, member, role, condition)
  return SetIamPolicy(project_ref, policy, api_version=api_version)
 def SetUp(self):
     self.messages = projects_util.GetMessages()
     self.test_iam_policy_with_condition = projects_util.GetMessages(
     ).Policy(auditConfigs=[
         self.messages.AuditConfig(auditLogConfigs=[
             self.messages.AuditLogConfig(
                 logType=self.messages.AuditLogConfig.
                 LogTypeValueValuesEnum.ADMIN_READ)
         ],
                                   service='allServices')
     ],
              bindings=[
                  self.messages.Binding(members=['user:[email protected]'],
                                        role='roles/non-primitive',
                                        condition=self.messages.Expr(
                                            expression='expr',
                                            title='title',
                                            description='descr')),
              ],
              etag=b'an etag',
              version=1)
Example #22
0
def TestIamPermissions(project_ref,
                       permissions,
                       api_version=DEFAULT_API_VERSION):
    """Return a subset of the given permissions that a caller has on project_ref."""
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)

    request = messages.CloudresourcemanagerProjectsTestIamPermissionsRequest(
        resource=project_ref.Name(),
        testIamPermissionsRequest=messages.TestIamPermissionsRequest(
            permissions=permissions))
    return client.projects.TestIamPermissions(request)
Example #23
0
def Undelete(project_ref):
    """Undelete a project that has been deleted."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    try:
        client.projects.Undelete(
            messages.CloudresourcemanagerProjectsUndeleteRequest(
                projectId=project_ref.Name()))
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
    return projects_util.DeletedResource(project_ref.Name())
Example #24
0
def Delete(project_ref):
    """Delete an existing project."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    try:
        client.projects.Delete(
            messages.CloudresourcemanagerProjectsDeleteRequest(
                projectId=project_ref.Name()))
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
    return projects_util.DeletedResource(project_ref.Name())
Example #25
0
def AddIamPolicyBinding(project_ref, member, role):
    messages = projects_util.GetMessages()

    try:
        policy = GetIamPolicy(project_ref)
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
    iam_util.AddBindingToIamPolicy(messages, policy, member, role)
    try:
        return SetIamPolicy(project_ref, policy)
    except exceptions.HttpError as error:
        raise projects_util.ConvertHttpError(error)
Example #26
0
def GetIamPolicy(project_ref, api_version=DEFAULT_API_VERSION):
    """Get IAM policy for a given project."""
    client = projects_util.GetClient(api_version)
    messages = projects_util.GetMessages(api_version)

    policy_request = messages.CloudresourcemanagerProjectsGetIamPolicyRequest(
        getIamPolicyRequest=messages.GetIamPolicyRequest(
            options=messages.GetPolicyOptions(
                requestedPolicyVersion=iam_util.
                MAX_LIBRARY_IAM_SUPPORTED_VERSION)),
        resource=project_ref.Name(),
    )
    return client.projects.GetIamPolicy(policy_request)
Example #27
0
def SetIamPolicy(project_ref, policy, update_mask=None):
    """Set IAM policy, for a given project."""
    client = projects_util.GetClient()
    messages = projects_util.GetMessages()

    set_iam_policy_request = messages.SetIamPolicyRequest(policy=policy)
    # Only include update_mask if provided, otherwise, leave the field unset.
    if update_mask is not None:
        set_iam_policy_request.updateMask = update_mask

    policy_request = messages.CloudresourcemanagerProjectsSetIamPolicyRequest(
        resource=project_ref.Name(),
        setIamPolicyRequest=set_iam_policy_request)
    return client.projects.SetIamPolicy(policy_request)
Example #28
0
def SetIamPolicyFromFile(project_ref, policy_file):
    """Read projects IAM policy from a file, and set it."""
    messages = projects_util.GetMessages()
    policy = iam_util.ParsePolicyFile(policy_file, messages.Policy)
    update_mask = iam_util.ConstructUpdateMaskFromPolicy(policy_file)

    # To preserve the existing set-iam-policy behavior of always overwriting
    # bindings and etag, add bindings and etag to update_mask.
    if 'bindings' not in update_mask:
        update_mask += ',bindings'
    if 'etag' not in update_mask:
        update_mask += ',etag'

    return SetIamPolicy(project_ref, policy, update_mask)
def SetIamPolicyFromFile(project_ref,
                         policy_file,
                         api_version=DEFAULT_API_VERSION):
  """Read projects IAM policy from a file, and set it."""
  messages = projects_util.GetMessages(api_version)
  policy, update_mask = iam_util.ParsePolicyFileWithUpdateMask(
      policy_file, messages.Policy)

  # To preserve the existing set-iam-policy behavior of always overwriting
  # bindings and etag, add bindings and etag to update_mask.
  if 'bindings' not in update_mask:
    update_mask += ',bindings'
  if 'etag' not in update_mask:
    update_mask += ',etag'

  return SetIamPolicy(project_ref, policy, update_mask, api_version)
Example #30
0
    def SetUp(self):
        self.cloudresourcemanager_messages = projects_util.GetMessages()
        self.cloudresourcemanager_mockclient = mock.Client(
            apis.GetClientClass(projects_util._API_NAME,
                                projects_util.DEFAULT_API_VERSION),
            real_client=projects_util.GetClient())
        self.cloudresourcemanager_mockclient.Mock()
        self.addCleanup(self.cloudresourcemanager_mockclient.Unmock)

        self.kms_messages = cloudkms_base.GetMessagesModule()
        self.kms_mockclient = mock.Client(
            apis.GetClientClass(cloudkms_base.DEFAULT_API_NAME,
                                cloudkms_base.DEFAULT_API_VERSION),
            real_client=cloudkms_base.GetClientInstance())
        self.kms_mockclient.Mock()
        self.addCleanup(self.kms_mockclient.Unmock)