Class: Google::Cloud::ResourceManager::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/resource_manager/project.rb,
lib/google/cloud/resource_manager/project/list.rb,
lib/google/cloud/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.

Examples:

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

Direct Known Subclasses

Updater

Defined Under Namespace

Classes: List, Updater

Instance Method Summary collapse

Instance Method Details

#active?Boolean

Checks if the state is ACTIVE.

Returns:

  • (Boolean)


196
197
198
199
# File 'lib/google/cloud/resource_manager/project.rb', line 196

def active?
  return false if state.nil?
  "ACTIVE".casecmp(state).zero?
end

#created_atObject

The time that this project was created.



171
172
173
174
175
# File 'lib/google/cloud/resource_manager/project.rb', line 171

def created_at
  Time.parse @gapi.create_time
rescue
  nil
end

#deleteObject

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.

Examples:

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


294
295
296
297
298
# File 'lib/google/cloud/resource_manager/project.rb', line 294

def delete
  service.delete_project project_id
  reload!
  true
end

#delete_in_progress?Boolean

Checks if the state is DELETE_IN_PROGRESS.

Returns:

  • (Boolean)


217
218
219
220
# File 'lib/google/cloud/resource_manager/project.rb', line 217

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.

Returns:

  • (Boolean)


210
211
212
213
# File 'lib/google/cloud/resource_manager/project.rb', line 210

def delete_requested?
  return false if state.nil?
  "DELETE_REQUESTED".casecmp(state).zero?
end

#labels {|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?.

Label values must be between 0 and 63 characters long and must conform to the regular expression (a-z?)?.

No more than 256 labels can be associated with a given resource. (Hash)

Examples:

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"] #=> "dev" # read only
project.labels["env"] = "production" # raises error

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

Yields:

  • (labels)

    a block for setting labels

Yield Parameters:

  • labels (Hash)

    the hash accepting labels



132
133
134
135
136
137
138
139
140
141
# 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

#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?.

Label values must be between 0 and 63 characters long and must conform to the regular expression (a-z?)?.

No more than 256 labels can be associated with a given resource. (Hash)

Examples:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.project "tokyo-rain-123"
project.labels = { "env" => "production" }


162
163
164
165
166
# 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

#nameObject

The user-assigned name of the project.



76
77
78
# File 'lib/google/cloud/resource_manager/project.rb', line 76

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.

Examples:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.project "tokyo-rain-123"
project.name = "My Project"


94
95
96
97
98
# File 'lib/google/cloud/resource_manager/project.rb', line 94

def name= new_name
  ensure_service!
  @gapi.name = new_name
  @gapi = service.update_project @gapi
end

#policy(force: false) {|policy| ... } ⇒ Policy

Gets and updates the Cloud IAM access control policy for this project.

Examples:

Policy values are memoized to reduce the number of API calls:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.project "tokyo-rain-123"

policy = project.policy # API call
policy_2 = project.policy # No API call

Use force to retrieve the latest policy from the service:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.project "tokyo-rain-123"

policy = project.policy force: true # API call
policy_2 = project.policy force: true # API call

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"

policy = project.policy do |p|
  p.add "roles/owner", "user:owner@example.com"
end # 2 API calls

Parameters:

  • force (Boolean)

    Force load the latest policy when true. Otherwise the policy will be memoized to reduce the number of API calls made. The default is false.

Yields:

  • (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.

Yield Parameters:

  • policy (Policy)

    the current Cloud IAM Policy for this project

Returns:

  • (Policy)

    the current Cloud IAM Policy for this project

See Also:



373
374
375
376
377
378
379
380
381
382
383
384
# File 'lib/google/cloud/resource_manager/project.rb', line 373

def policy force: false
  @policy = nil if force || block_given?
  @policy ||= begin
    ensure_service!
    gapi = service.get_policy project_id
    Policy.from_gapi gapi
  end
  return @policy unless block_given?
  p = @policy.deep_dup
  yield p
  self.policy = p
end

#policy=(new_policy) ⇒ Object

Updates the Cloud 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.

Examples:

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.policy = policy # API call

Parameters:

  • new_policy (Policy)

    a new or modified Cloud IAM Policy for this project

See Also:



415
416
417
418
419
420
421
# File 'lib/google/cloud/resource_manager/project.rb', line 415

def policy= new_policy
  ensure_service!
  gapi = service.set_policy project_id, new_policy.to_gapi
  # Convert symbols to strings for backwards compatibility.
  # This will go away when we add a ResourceManager::Policy class.
  @policy = Policy.from_gapi gapi
end

#project_idObject

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



62
63
64
# File 'lib/google/cloud/resource_manager/project.rb', line 62

def project_id
  @gapi.project_id
end

#project_numberObject

The number uniquely identifying the project. e.g. 415104041262



69
70
71
# File 'lib/google/cloud/resource_manager/project.rb', line 69

def project_number
  @gapi.project_number
end

#reload!Object Also known as: refresh!

Reloads the project (with updated state) from the Google Cloud Resource Manager service.

Examples:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.project "tokyo-rain-123"
project.reload!


259
260
261
# File 'lib/google/cloud/resource_manager/project.rb', line 259

def reload!
  @gapi = service.get_project project_id
end

#stateObject

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.


190
191
192
# File 'lib/google/cloud/resource_manager/project.rb', line 190

def state
  @gapi.lifecycle_state
end

#test_permissions(*permissions) ⇒ Array<String>

Tests the specified permissions against the Cloud IAM access control policy.

Examples:

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

Parameters:

  • permissions (String, Array<String>)

    The set of permissions to check access for. Permissions with wildcards (such as * or storage.*) are not allowed.

Returns:

  • (Array<String>)

    The permissions that have access

See Also:



446
447
448
449
450
451
# File 'lib/google/cloud/resource_manager/project.rb', line 446

def test_permissions *permissions
  permissions = Array(permissions).flatten
  ensure_service!
  gapi = service.test_permissions project_id, permissions
  gapi.permissions
end

#undeleteObject

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.

Examples:

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


318
319
320
321
322
# File 'lib/google/cloud/resource_manager/project.rb', line 318

def undelete
  service.undelete_project project_id
  reload!
  true
end

#unspecified?Boolean

Checks if the state is LIFECYCLE_STATE_UNSPECIFIED.

Returns:

  • (Boolean)


203
204
205
206
# File 'lib/google/cloud/resource_manager/project.rb', line 203

def unspecified?
  return false if state.nil?
  "LIFECYCLE_STATE_UNSPECIFIED".casecmp(state).zero?
end

#update {|project| ... } ⇒ Object

Updates the project in a single API call. See Updater

Examples:

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

Yields:

  • (project)

    a block yielding a project delegate

Yield Parameters:



239
240
241
242
243
244
245
246
# File 'lib/google/cloud/resource_manager/project.rb', line 239

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