Class: Gcloud::ResourceManager::Project
- Inherits:
-
Object
- Object
- Gcloud::ResourceManager::Project
- Defined in:
- lib/gcloud/resource_manager/project.rb,
lib/gcloud/resource_manager/project/list.rb,
lib/gcloud/resource_manager/project/updater.rb
Overview
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.
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.update do |p|
p.name = "My Project"
p.labels["env"] = "production"
end
Direct Known Subclasses
Defined Under Namespace
Instance Attribute Summary collapse
-
#connection ⇒ Object
The Connection object.
-
#gapi ⇒ Object
The Google API Client object.
Class Method Summary collapse
-
.from_gapi(gapi, connection) ⇒ Object
New Change from a Google API Client object.
Instance Method Summary collapse
-
#active? ⇒ Boolean
Checks if the state is
ACTIVE. -
#created_at ⇒ Object
The time that this project was created.
-
#delete ⇒ Object
Marks the project for deletion.
-
#delete_in_progress? ⇒ Boolean
Checks if the state is
DELETE_IN_PROGRESS. -
#delete_requested? ⇒ Boolean
Checks if the state is
DELETE_REQUESTED. -
#initialize ⇒ Project
constructor
Create an empty Project object.
-
#labels ⇒ Object
The labels associated with this project.
-
#labels=(new_labels) ⇒ Object
Updates the labels associated with this project.
-
#name ⇒ Object
The user-assigned name of the project.
-
#name=(new_name) ⇒ Object
Updates the user-assigned name of the project.
-
#policy(force: nil) ⇒ Object
Gets the Cloud IAM access control policy.
-
#policy=(new_policy) ⇒ Object
Sets the Cloud IAM access control policy.
-
#project_id ⇒ Object
The unique, user-assigned ID of the project.
-
#project_number ⇒ Object
The number uniquely identifying the project.
-
#reload! ⇒ Object
(also: #refresh!)
Reloads the project (with updated state) from the Google Cloud Resource Manager service.
-
#state ⇒ Object
The project lifecycle state.
-
#test_permissions(*permissions) ⇒ Object
Tests the specified permissions against the Cloud IAM access control policy.
-
#undelete ⇒ Object
Restores the project.
-
#unspecified? ⇒ Boolean
Checks if the state is
LIFECYCLE_STATE_UNSPECIFIED. -
#update {|updater| ... } ⇒ Object
Updates the project in a single API call.
Constructor Details
#initialize ⇒ Project
Create an empty Project object.
51 52 53 54 |
# File 'lib/gcloud/resource_manager/project.rb', line 51 def initialize #:nodoc: @connection = nil @gapi = {} end |
Instance Attribute Details
#connection ⇒ Object
The Connection object.
43 44 45 |
# File 'lib/gcloud/resource_manager/project.rb', line 43 def connection @connection end |
#gapi ⇒ Object
The Google API Client object.
47 48 49 |
# File 'lib/gcloud/resource_manager/project.rb', line 47 def gapi @gapi end |
Class Method Details
.from_gapi(gapi, connection) ⇒ Object
New Change from a Google API Client object.
511 512 513 514 515 516 |
# File 'lib/gcloud/resource_manager/project.rb', line 511 def self.from_gapi gapi, connection #:nodoc: new.tap do |p| p.gapi = gapi p.connection = connection end end |
Instance Method Details
#active? ⇒ Boolean
Checks if the state is ACTIVE.
214 215 216 217 |
# File 'lib/gcloud/resource_manager/project.rb', line 214 def active? return false if state.nil? "ACTIVE".casecmp(state).zero? end |
#created_at ⇒ Object
The time that this project was created.
189 190 191 192 193 |
# File 'lib/gcloud/resource_manager/project.rb', line 189 def created_at Time.parse @gapi["createTime"] rescue nil end |
#delete ⇒ Object
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
ACTIVEtoDELETE_REQUESTED. The deletion starts at an unspecified time, at which point the lifecycle state changes toDELETE_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 "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.active? #=> true
project.delete
project.active? #=> false
project.delete_requested? #=> true
321 322 323 324 325 326 327 328 329 |
# File 'lib/gcloud/resource_manager/project.rb', line 321 def delete resp = connection.delete_project project_id if resp.success? reload! true else fail ApiError.from_response(resp) end end |
#delete_in_progress? ⇒ Boolean
Checks if the state is DELETE_IN_PROGRESS.
235 236 237 238 |
# File 'lib/gcloud/resource_manager/project.rb', line 235 def delete_in_progress? return false if state.nil? "DELETE_IN_PROGRESS".casecmp(state).zero? end |
#delete_requested? ⇒ Boolean
Checks if the state is DELETE_REQUESTED.
228 229 230 231 |
# File 'lib/gcloud/resource_manager/project.rb', line 228 def delete_requested? return false if state.nil? "DELETE_REQUESTED".casecmp(state).zero? end |
#labels ⇒ Object
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]*[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]*[a-z0-9])?)?.
No more than 256 labels can be associated with a given resource. (Hash)
Examples
Labels are read-only and cannot be changed by direct assignment.
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.labels["env"] #=> "dev" # read only
project.labels["env"] = "production" # raises error
Labels can be updated by passing a block, or by calling the #labels= method.
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.labels do |labels|
labels["env"] = "production"
end
142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/gcloud/resource_manager/project.rb', line 142 def labels labels = @gapi["labels"] labels = labels.to_hash if labels.respond_to? :to_hash if block_given? yielded_labels = labels.dup yield yielded_labels self.labels = yielded_labels if yielded_labels != labels # changed else labels.freeze end end |
#labels=(new_labels) ⇒ Object
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]*[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]*[a-z0-9])?)?.
No more than 256 labels can be associated with a given resource. (Hash)
Example
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.labels = { "env" => "production" }
175 176 177 178 179 180 181 182 183 184 |
# File 'lib/gcloud/resource_manager/project.rb', line 175 def labels= new_labels ensure_connection! @gapi["labels"] = new_labels resp = connection.update_project @gapi if resp.success? @gapi = resp.data else fail ApiError.from_response(resp) end end |
#name ⇒ Object
The user-assigned name of the project.
75 76 77 |
# File 'lib/gcloud/resource_manager/project.rb', line 75 def name @gapi["name"] end |
#name=(new_name) ⇒ Object
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 "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.name = "My Project"
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/gcloud/resource_manager/project.rb', line 95 def name= new_name ensure_connection! @gapi["name"] = new_name resp = connection.update_project @gapi if resp.success? @gapi = resp.data else fail ApiError.from_response(resp) end end |
#policy(force: nil) ⇒ Object
Gets the Cloud IAM access control policy. See Managing Policies for more information.
Parameters
force-
Force load the latest policy when
true. Otherwise the policy will be memoized to reduce the number of API calls made. The default isfalse. (Boolean)
Returns
A hash that conforms to the following structure:
{
"bindings" => [{
"role" => "roles/viewer",
"members" => ["serviceAccount:your-service-account"]
}],
"version" => 0,
"etag" => "CAE="
}
Examples
By default the policy values are memoized to reduce the number of API calls made.
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
policy = project.policy
puts policy["bindings"]
puts policy["version"]
puts policy["etag"]
Use the force option to retrieve the latest policy from the service.
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
policy = project.policy force: true
412 413 414 415 416 417 418 419 420 421 422 |
# File 'lib/gcloud/resource_manager/project.rb', line 412 def policy force: nil @policy = nil if force @policy ||= begin ensure_connection! resp = connection.get_policy project_id fail ApiError.from_response(resp) unless resp.success? policy = resp.data policy = policy.to_hash if policy.respond_to? :to_hash policy end end |
#policy=(new_policy) ⇒ Object
Sets the Cloud IAM access control policy. See Managing Policies for more information.
Parameters
new_policy-
A hash that conforms to the following structure:
{ "bindings" => [{ "role" => "roles/viewer", "members" => ["serviceAccount:your-service-account"] }] }
Example
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
viewer_policy = {
"bindings" => [{
"role" => "roles/viewer",
"members" => ["serviceAccount:your-service-account"]
}]
}
project.policy = viewer_policy
458 459 460 461 462 463 464 465 466 467 |
# File 'lib/gcloud/resource_manager/project.rb', line 458 def policy= new_policy ensure_connection! resp = connection.set_policy project_id, new_policy if resp.success? @policy = resp.data @policy = @policy.to_hash if @policy.respond_to? :to_hash else fail ApiError.from_response(resp) end end |
#project_id ⇒ Object
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
61 62 63 |
# File 'lib/gcloud/resource_manager/project.rb', line 61 def project_id @gapi["projectId"] end |
#project_number ⇒ Object
The number uniquely identifying the project. e.g. 415104041262
68 69 70 |
# File 'lib/gcloud/resource_manager/project.rb', line 68 def project_number @gapi["projectNumber"] end |
#reload! ⇒ Object Also known as: refresh!
279 280 281 282 283 284 285 286 |
# File 'lib/gcloud/resource_manager/project.rb', line 279 def reload! resp = connection.get_project project_id if resp.success? @gapi = resp.data else fail ApiError.from_response(resp) end end |
#state ⇒ Object
The project lifecycle state.
Possible values are:
-
ACTIVE- The normal and active state. -
LIFECYCLE_STATE_UNSPECIFIED- Unspecified state. This is only used/useful for distinguishing unset values. -
DELETE_REQUESTED- The project has been marked for deletion by the user (by invoking DeleteProject) or by the system (Google Cloud Platform). This can generally be reversed by invoking UndeleteProject. -
DELETE_IN_PROGRESS- The process of deleting the project has begun. Reversing the deletion is no longer possible.
208 209 210 |
# File 'lib/gcloud/resource_manager/project.rb', line 208 def state @gapi["lifecycleState"] end |
#test_permissions(*permissions) ⇒ Object
Tests the specified permissions against the Cloud IAM access control policy. See Managing Policies for more information.
Parameters
permissions-
The set of permissions to check access for. Permissions with wildcards (such as * or
storage.*) are not allowed. (String or Array of Strings)
Returns
The permissions that have access. (Array of Strings)
Example
require "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
perms = project. "resourcemanager.projects.get",
"resourcemanager.projects.delete"
perms.include? "resourcemanager.projects.get" #=> true
perms.include? "resourcemanager.projects.delete" #=> false
498 499 500 501 502 503 504 505 506 507 |
# File 'lib/gcloud/resource_manager/project.rb', line 498 def * = Array().flatten ensure_connection! resp = connection. project_id, if resp.success? Array(resp.data["permissions"]) else fail ApiError.from_response(resp) end end |
#undelete ⇒ Object
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 "gcloud"
gcloud = Gcloud.new
resource_manager = gcloud.resource_manager
project = resource_manager.project "tokyo-rain-123"
project.delete_requested? #=> true
project.undelete
project.delete_requested? #=> false
project.active? #=> true
351 352 353 354 355 356 357 358 359 |
# File 'lib/gcloud/resource_manager/project.rb', line 351 def undelete resp = connection.undelete_project project_id if resp.success? reload! true else fail ApiError.from_response(resp) end end |
#unspecified? ⇒ Boolean
Checks if the state is LIFECYCLE_STATE_UNSPECIFIED.
221 222 223 224 |
# File 'lib/gcloud/resource_manager/project.rb', line 221 def unspecified? return false if state.nil? "LIFECYCLE_STATE_UNSPECIFIED".casecmp(state).zero? end |
#update {|updater| ... } ⇒ Object
255 256 257 258 259 260 261 262 263 264 |
# File 'lib/gcloud/resource_manager/project.rb', line 255 def update updater = Updater.from_project self yield updater resp = connection.update_project updater.gapi if resp.success? @gapi = resp.data else fail ApiError.from_response(resp) end end |