Class: Gcloud::ResourceManager::Policy
- Inherits:
-
Object
- Object
- Gcloud::ResourceManager::Policy
- Defined in:
- lib/gcloud/resource_manager/policy.rb
Overview
# Policy
Represents a Cloud IAM Policy for the Resource Manager service.
A common pattern for updating a resource’s metadata, such as its Policy, is to read the current data from the service, update the data locally, and then send the modified data for writing. This pattern may result in a conflict if two or more processes attempt the sequence simultaneously. IAM solves this problem with the #etag property, which is used to verify whether the policy has changed since the last request. When you make a request to with an ‘etag` value, Cloud IAM compares the `etag` value in the request with the existing `etag` value associated with the policy. It writes the policy only if the `etag` values match.
When you update a policy, first read the policy (and its current ‘etag`) from the service, then modify the policy locally, and then write the modified policy to the service. See Gcloud::ResourceManager::Project#policy and Gcloud::ResourceManager::Project#policy=.
Constant Summary collapse
- API =
Alias to the Google Client API module
Google::Apis::CloudresourcemanagerV1
Instance Attribute Summary collapse
-
#etag ⇒ String
Used to verify whether the policy has changed since the last request.
-
#roles ⇒ Hash{String => Array<String>}
The bindings that associate roles with an array of members.
Class Method Summary collapse
-
.from_gapi(gapi) ⇒ Object
Google::Apis::CloudresourcemanagerV1::Policy object.
Instance Method Summary collapse
-
#add(role_name, member) ⇒ Object
Convenience method for adding a member to a binding on this policy.
-
#deep_dup ⇒ Policy
Returns a deep copy of the policy.
-
#initialize(etag, roles) ⇒ Policy
constructor
A new instance of Policy.
-
#remove(role_name, member) ⇒ Object
Convenience method for removing a member from a binding on this policy.
-
#role(role_name) ⇒ Array<String>
Convenience method returning the array of members bound to a role in this policy, or an empty array if no value is present for the role in #roles.
-
#to_gapi ⇒ Object
Google::Apis::CloudresourcemanagerV1::Policy.
Constructor Details
#initialize(etag, roles) ⇒ Policy
Returns a new instance of Policy.
81 82 83 84 |
# File 'lib/gcloud/resource_manager/policy.rb', line 81 def initialize etag, roles @etag = etag @roles = roles end |
Instance Attribute Details
#etag ⇒ String
Used to verify whether the policy has changed since the last request. The policy will be written only if the ‘etag` values match.
72 73 74 |
# File 'lib/gcloud/resource_manager/policy.rb', line 72 def etag @etag end |
#roles ⇒ Hash{String => Array<String>}
The bindings that associate roles with an array of members. See [Understanding Roles](cloud.google.com/iam/docs/understanding-roles) for a listing of primitive and curated roles. See [Binding](cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding) for a listing of values and patterns for members.
72 73 74 |
# File 'lib/gcloud/resource_manager/policy.rb', line 72 def roles @roles end |
Class Method Details
.from_gapi(gapi) ⇒ Object
Google::Apis::CloudresourcemanagerV1::Policy object.
203 204 205 206 207 208 |
# File 'lib/gcloud/resource_manager/policy.rb', line 203 def self.from_gapi gapi roles = gapi.bindings.each_with_object({}) do |binding, memo| memo[binding.role] = binding.members.to_a end new gapi.etag, roles end |
Instance Method Details
#add(role_name, member) ⇒ Object
Convenience method for adding a member to a binding on this policy. See [Understanding Roles](cloud.google.com/iam/docs/understanding-roles) for a listing of primitive and curated roles. See [Binding](cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding) for a listing of values and patterns for members.
111 112 113 |
# File 'lib/gcloud/resource_manager/policy.rb', line 111 def add role_name, member role(role_name) << member end |
#deep_dup ⇒ Policy
Returns a deep copy of the policy.
175 176 177 178 179 180 181 182 |
# File 'lib/gcloud/resource_manager/policy.rb', line 175 def deep_dup dup.tap do |p| roles_dup = p.roles.each_with_object({}) do |(k, v), memo| memo[k] = v.dup rescue value end p.instance_variable_set "@roles", roles_dup end end |
#remove(role_name, member) ⇒ Object
Convenience method for removing a member from a binding on this policy. See [Understanding Roles](cloud.google.com/iam/docs/understanding-roles) for a listing of primitive and curated roles. See [Binding](cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding) for a listing of values and patterns for members.
140 141 142 |
# File 'lib/gcloud/resource_manager/policy.rb', line 140 def remove role_name, member role(role_name).delete member end |
#role(role_name) ⇒ Array<String>
Convenience method returning the array of members bound to a role in this policy, or an empty array if no value is present for the role in #roles. See [Understanding Roles](cloud.google.com/iam/docs/understanding-roles) for a listing of primitive and curated roles. See [Binding](cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding) for a listing of values and patterns for members.
166 167 168 |
# File 'lib/gcloud/resource_manager/policy.rb', line 166 def role role_name roles[role_name] ||= [] end |
#to_gapi ⇒ Object
Google::Apis::CloudresourcemanagerV1::Policy.
187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/gcloud/resource_manager/policy.rb', line 187 def to_gapi API::Policy.new( etag: etag, bindings: roles.keys.map do |role_name| next if roles[role_name].empty? API::Binding.new( role: role_name, members: roles[role_name] ) end ) end |