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