class Google::Cloud::ResourceManager::Project
# Project
Project
is a high-level Google
Cloud
Platform entity. It is a container for ACLs, APIs, AppEngine Apps, VMs, and other Google
Cloud
Platform resources.
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.update do |p| p.name = "My Project" p.labels["env"] = "production" end
Attributes
@private The Google
API Client object.
@private The Service
object.
Public Class Methods
@private New Change from a Google
API Client object.
# File lib/google/cloud/resource_manager/project.rb, line 485 def self.from_gapi gapi, service new.tap do |p| p.gapi = gapi p.service = service end end
@private Create an empty Project
object.
# File lib/google/cloud/resource_manager/project.rb, line 53 def initialize @service = nil @gapi = Google::Cloud::ResourceManager::Service::API::Project.new end
Public Instance Methods
Checks if the state is `ACTIVE`.
# File lib/google/cloud/resource_manager/project.rb, line 241 def active? return false if state.nil? "ACTIVE".casecmp(state).zero? end
The time that this project was created.
# File lib/google/cloud/resource_manager/project.rb, line 216 def created_at Time.parse @gapi.create_time rescue StandardError nil end
Marks the project for deletion. This method will only affect the project if the following criteria are met:
-
The project does not have a billing account associated with it.
-
The project has a lifecycle state of `ACTIVE`.
-
This method changes the project's lifecycle state from `ACTIVE` to `DELETE_REQUESTED`. The deletion starts at an unspecified time, at which point the lifecycle state changes to `DELETE_IN_PROGRESS`.
Until the deletion completes, you can check the lifecycle state by calling reload!
, or by retrieving the project with Manager#project
. The project remains visible to Manager#project
and Manager#projects
, but cannot be updated.
After the deletion completes, the project is not retrievable by the Manager#project
and Manager#projects
methods.
The caller must have modify permissions for this project.
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.active? #=> true project.delete project.active? #=> false project.delete_requested? #=> true
# File lib/google/cloud/resource_manager/project.rb, line 341 def delete service.delete_project project_id reload! true end
Checks if the state is `DELETE_IN_PROGRESS`.
# File lib/google/cloud/resource_manager/project.rb, line 262 def delete_in_progress? return false if state.nil? "DELETE_IN_PROGRESS".casecmp(state).zero? end
Checks if the state is `DELETE_REQUESTED`.
# File lib/google/cloud/resource_manager/project.rb, line 255 def delete_requested? return false if state.nil? "DELETE_REQUESTED".casecmp(state).zero? end
The labels associated with this project.
Label keys must be between 1 and 63 characters long and must conform to the regular expression `[a-z](*[a-z0-9])?`.
Label values must be between 0 and 63 characters long and must conform to the regular expression `([a-z](*[a-z0-9])?)?`.
No more than 256 labels can be associated with a given resource. (`Hash`)
@yield [labels] a block for setting labels @yieldparam [Hash] labels the hash accepting labels
@example Labels are read-only and cannot be changed:
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.labels["env"] # read-only
@example Labels can be updated by passing a block, or with {#labels=}:
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.labels do |labels| labels["env"] = "production" end
# File lib/google/cloud/resource_manager/project.rb, line 132 def labels labels = @gapi.labels.to_h if block_given? yielded_labels = labels.dup yield yielded_labels self.labels = yielded_labels if yielded_labels != labels # changed else labels.freeze end end
Updates the labels associated with this project.
Label keys must be between 1 and 63 characters long and must conform to the regular expression `[a-z](*[a-z0-9])?`.
Label values must be between 0 and 63 characters long and must conform to the regular expression `([a-z](*[a-z0-9])?)?`.
No more than 256 labels can be associated with a given resource. (`Hash`)
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.labels = { "env" => "production" }
# File lib/google/cloud/resource_manager/project.rb, line 162 def labels= new_labels ensure_service! @gapi.labels = new_labels @gapi = service.update_project @gapi end
The user-assigned name of the project.
# File lib/google/cloud/resource_manager/project.rb, line 77 def name @gapi.name end
Updates the user-assigned name of the project. This field is optional and can remain unset.
Allowed characters are: lowercase and uppercase letters, numbers, hyphen, single-quote, double-quote, space, and exclamation point.
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.name = "My Project"
# File lib/google/cloud/resource_manager/project.rb, line 95 def name= new_name ensure_service! @gapi.name = new_name @gapi = service.update_project @gapi end
An optional reference to a parent Resource
.
Supported parent types include “organization” and “folder”. Once set, the parent can be updated but cannot be cleared.
The resource object returned is read-only and cannot be changed. A new resource object can be set using the `#parent=` or `#update` methods. (See {Resource} and {Manager#resource}.)
@return [nil, Resource] the reference to a parent Resource
(read-only)
# File lib/google/cloud/resource_manager/project.rb, line 180 def parent return nil if @gapi.parent.nil? Resource.from_gapi(@gapi.parent).freeze end
Updates the reference to a parent with a new Resource
.
Supported parent types include “organization” and “folder”. Once set, the parent can be updated but cannot be cleared.
The end user must have the `resourcemanager.projects.create` permission on the parent.
(See {Resource} and {Manager#resource}.)
@param [Resource] new_parent A new parent Resource
.
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" folder = resource_manager.resource "folder", "1234" project.parent = folder
# File lib/google/cloud/resource_manager/project.rb, line 206 def parent= new_parent raise ArgumentError, "new_parent is required" if new_parent.nil? ensure_service! @gapi.parent = new_parent.to_gapi @gapi = service.update_project @gapi end
Gets and updates the [Cloud IAM](cloud.google.com/iam/) access control policy for this project.
@see cloud.google.com/iam/docs/managing-policies Managing
Policies
@see cloud.google.com/resource-manager/reference/rest/v1beta1/projects/setIamPolicy
projects.setIamPolicy
@yield [policy] A block for updating the policy. The latest policy
will be read from the service and passed to the block. After the block completes, the modified policy will be written to the service.
@yieldparam [Policy] policy the current Cloud
IAM Policy
for this
project
@return [Policy] the current Cloud
IAM Policy
for this project
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" policy = project.policy
@example Update the policy by passing a block:
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.policy do |p| p.add "roles/owner", "user:owner@example.com" end
# File lib/google/cloud/resource_manager/project.rb, line 406 def policy ensure_service! gapi = service.get_policy project_id policy = Policy.from_gapi gapi return policy unless block_given? yield policy update_policy policy end
The unique, user-assigned ID of the project. It must be 6 to 30 lowercase letters, digits, or hyphens. It must start with a letter. Trailing hyphens are prohibited. e.g. tokyo-rain-123
# File lib/google/cloud/resource_manager/project.rb, line 63 def project_id @gapi.project_id end
The number uniquely identifying the project. e.g. 415104041262
# File lib/google/cloud/resource_manager/project.rb, line 70 def project_number @gapi.project_number end
Reloads the project (with updated state) from the Google
Cloud
Resource
Manager
service.
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.reload!
# File lib/google/cloud/resource_manager/project.rb, line 306 def reload! @gapi = service.get_project project_id end
The project lifecycle state.
Possible values are:
-
`ACTIVE` - The normal and active state.
-
`DELETE_REQUESTED` - The project has been marked for deletion by the user (by invoking ##delete) or by the system (
Google
Cloud
Platform). This can generally be reversed by invoking {#undelete}. -
`DELETE_IN_PROGRESS` - The process of deleting the project has begun. Reversing the deletion is no longer possible.
-
`LIFECYCLE_STATE_UNSPECIFIED` - Unspecified state. This is only used/useful for distinguishing unset values.
# File lib/google/cloud/resource_manager/project.rb, line 235 def state @gapi.lifecycle_state end
Tests the specified permissions against the [Cloud IAM](cloud.google.com/iam/) access control policy.
@see cloud.google.com/iam/docs/managing-policies Managing
Policies
@param [String, Array<String>] permissions The set of permissions to
check access for. Permissions with wildcards (such as `*` or `storage.*`) are not allowed.
@return [Array<String>] The permissions that have access
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" perms = project.test_permissions "resourcemanager.projects.get", "resourcemanager.projects.delete" perms.include? "resourcemanager.projects.get" #=> true perms.include? "resourcemanager.projects.delete" #=> false
# File lib/google/cloud/resource_manager/project.rb, line 476 def test_permissions *permissions permissions = Array(permissions).flatten ensure_service! gapi = service.test_permissions project_id, permissions gapi.permissions end
Restores the project. You can only use this method for a project that has a lifecycle state of `DELETE_REQUESTED`. After deletion starts, as indicated by a lifecycle state of `DELETE_IN_PROGRESS`, the project cannot be restored.
The caller must have modify permissions for this project.
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" project.delete_requested? #=> true project.undelete project.delete_requested? #=> false project.active? #=> true
# File lib/google/cloud/resource_manager/project.rb, line 365 def undelete service.undelete_project project_id reload! true end
Checks if the state is `LIFECYCLE_STATE_UNSPECIFIED`.
# File lib/google/cloud/resource_manager/project.rb, line 248 def unspecified? return false if state.nil? "LIFECYCLE_STATE_UNSPECIFIED".casecmp(state).zero? end
Updates the project in a single API call. See {Project::Updater}
@yield [project] a block yielding a project delegate @yieldparam [Project::Updater] project the delegate object for
updating the project
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" folder = resource_manager.resource "folder", "1234" project.update do |p| p.name = "My Project" p.parent = folder p.labels["env"] = "production" end
# File lib/google/cloud/resource_manager/project.rb, line 286 def update updater = Updater.from_project self yield updater if updater.gapi.to_h != @gapi.to_h # changed @gapi = service.update_project updater.gapi end self end
Updates the [Cloud IAM](cloud.google.com/iam/) access control policy for this project. The policy should be read from {#policy}. See {Google::Cloud::ResourceManager::Policy} for an explanation of the policy `etag` property and how to modify policies.
You can also update the policy by passing a block to {#policy}, which will call this method internally after the block completes.
@see cloud.google.com/iam/docs/managing-policies Managing
Policies
@see cloud.google.com/resource-manager/reference/rest/v1beta1/projects/setIamPolicy
projects.setIamPolicy
@param [Policy] new_policy a new or modified Cloud
IAM Policy
for this
project
@return [Policy] the policy returned by the API update operation
@example
require "google/cloud/resource_manager" resource_manager = Google::Cloud::ResourceManager.new project = resource_manager.project "tokyo-rain-123" policy = project.policy # API call policy.add "roles/owner", "user:owner@example.com" project.update_policy policy # API call
# File lib/google/cloud/resource_manager/project.rb, line 446 def update_policy new_policy ensure_service! gapi = service.set_policy project_id, new_policy.to_gapi Policy.from_gapi gapi end
Protected Instance Methods
Raise an error unless an active service is available.
# File lib/google/cloud/resource_manager/project.rb, line 496 def ensure_service! raise "Must have active connection" unless service end