class Google::Cloud::ResourceManager::Manager

# Manager

Provides methods for creating, retrieving, and updating projects.

@example

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
resource_manager.projects.each do |project|
  puts projects.project_id
end

See {Google::Cloud#resource_manager}

Attributes

service[RW]

@private The Service object.

Public Class Methods

new(service) click to toggle source

@private Creates a new Service instance.

See {Google::Cloud.resource_manager}

# File lib/google/cloud/resource_manager/manager.rb, line 48
def initialize service
  @service = service
end

Public Instance Methods

create_project(project_id, name: nil, labels: nil, parent: nil) click to toggle source

Creates a project resource.

Initially, the project resource is owned by its creator exclusively. The creator can later grant permission to others to read or update the project.

Several APIs are activated automatically for the project, including Google Cloud Storage.

@param [String] project_id 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.

@param [String] name 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.

@param [Hash] labels The labels associated with this project.

Label keys must be between 1 and 63 characters long and must conform
to the following 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.

@param [Resource] parent A parent Resource. Optional.

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 {Resource}.)

@return [Google::Cloud::ResourceManager::Project]

@example

require "google/cloud/resource_manager"

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

@example A project can also be created with a `name` and `labels`:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.create_project "tokyo-rain-123",
  name: "Todos Development", labels: {env: :development}

@example A project can also be created with a `name` and `parent`:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
folder = resource_manager.resource "folder", "1234"
project = resource_manager.create_project "tokyo-rain-123",
  name: "Todos Development", parent: folder
# File lib/google/cloud/resource_manager/manager.rb, line 203
def create_project project_id, name: nil, labels: nil, parent: nil
  gapi = service.create_project project_id, name, labels, parent
  Project.from_gapi gapi, service
end
delete(project_id) click to toggle source

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

@param [String] project_id The ID of the project.

@example

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
resource_manager.delete "tokyo-rain-123"
# File lib/google/cloud/resource_manager/manager.rb, line 236
def delete project_id
  service.delete_project project_id
  true
end
project(project_id) click to toggle source

Retrieves the project identified by the specified `project_id`.

@param [String] project_id The ID of the project.

@return [Google::Cloud::ResourceManager::Project, nil] Returns `nil`

if the project does not exist

@example

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
project = resource_manager.project "tokyo-rain-123"
project.project_id #=> "tokyo-rain-123"
# File lib/google/cloud/resource_manager/manager.rb, line 134
def project project_id
  gapi = service.get_project project_id
  Project.from_gapi gapi, service
rescue NotFoundError
  nil
end
projects(filter: nil, token: nil, max: nil) click to toggle source

Retrieves the projects that are visible to the user and satisfy the specified filter. This method returns projects in an unspecified order. New projects do not necessarily appear at the end of the list.

@param [String] filter An expression for filtering the results of the

request. Filter rules are case insensitive.

The fields eligible for filtering are:

* `name`
* `id`
* `labels.key` - where `key` is the name of a label

Some examples of using labels as filters:

* `name:*` - The project has a name.
* `name:Howl` - The project's name is Howl or howl.
* `name:HOWL` - Equivalent to above.
* `NAME:howl` - Equivalent to above.
* `labels.color:*` - The project has the label color.
* `labels.color:red` - The project's label color has the value red.
* `labels.color:red labels.size:big` - The project's
  label color has the value red and its label size has the value
  big.

@param [String] token A previously-returned page token representing

part of the larger set of results to view.

@param [Integer] max Maximum number of projects to return.

@return [Array<Google::Cloud::ResourceManager::Project>] (See

{Google::Cloud::ResourceManager::Project::List})

@example

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
projects = resource_manager.projects

projects.each do |project|
  puts project.project_id
end

@example Projects can be filtered using the `filter` option:

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
projects = resource_manager.projects filter: "labels.env:production"

projects.each do |project|
  puts project.project_id
end

@example Retrieve all projects: (See {Project::List#all})

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
projects = resource_manager.projects

projects.all do |project|
  puts project.project_id
end
# File lib/google/cloud/resource_manager/manager.rb, line 114
def projects filter: nil, token: nil, max: nil
  gapi = service.list_project filter: filter, token: token, max: max
  Project::List.from_gapi gapi, self, filter, max
end
resource(type, id) click to toggle source

Create a Resource object. (See {Resource}.)

@param [String] type The resource type this id is for. At present, the

valid types are: "organization" and "folder".

@param [String] id The type-specific id. This should correspond to the

id used in the type-specific API's.

@return [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/manager.rb, line 279
def resource type, id
  Resource.new type, id
end
undelete(project_id) click to toggle source

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.

@param [String] project_id The ID of the project.

@example

require "google/cloud/resource_manager"

resource_manager = Google::Cloud::ResourceManager.new
resource_manager.undelete "tokyo-rain-123"
# File lib/google/cloud/resource_manager/manager.rb, line 257
def undelete project_id
  service.undelete_project project_id
  true
end

Protected Instance Methods

list_projects_options(filter, options) click to toggle source

Create an options hash from the projects parameters.

# File lib/google/cloud/resource_manager/manager.rb, line 287
def list_projects_options filter, options
  # Handle only sending in options
  if filter.is_a?(::Hash) && options.empty?
    options = filter
    filter = nil
  end
  # Give named parameter priority
  options[:filter] = filter || options[:filter]
  options
end