Represents the collection of permissions for an EC2 resource. Each permission is a string containing the AWS account ID of a user who has permission to use the resource in question. The {Image} and {Snapshot} classes are currently the only ones that use this interface.
@private
# File lib/aws/ec2/permission_collection.rb, line 28 def initialize(resource, opts = {}) @resource = resource super(opts) end
Adds permissions for specific users to launch this AMI.
@param [Array of Strings] users The AWS account IDs of the
users that should be able to launch this AMI.
@return [nil]
# File lib/aws/ec2/permission_collection.rb, line 90 def add(*users) modify(:add, *users) end
@yield [user_id] Each user ID that has explicit
permissions to launch this AMI.
# File lib/aws/ec2/permission_collection.rb, line 35 def each(&block) resp = client.send(describe_call, describe_params) resp.send(inflected_permissions_attribute).each do |permission| if permission[:user_id] user_id = permission[:user_id] yield(user_id) end end end
@return [Boolean] True if the collection is empty.
# File lib/aws/ec2/permission_collection.rb, line 52 def empty? size == 0 end
@return [Boolean] True if the resource is private (i.e. not
public).
# File lib/aws/ec2/permission_collection.rb, line 66 def private? !public? end
Sets whether the resource is public or not. This has no effect on the explicit AWS account IDs that may already have permissions to use the resource.
@param [Boolean] value If true, the resource is made public,
otherwise the resource is made private.
@return [nil]
# File lib/aws/ec2/permission_collection.rb, line 77 def public= value params = value ? { :add => [{ :group => "all" }] } : { :remove => [{ :group => "all" }] } client.send(modify_call, modify_params(params)) nil end
@return [Boolean] True if the resource is public.
# File lib/aws/ec2/permission_collection.rb, line 57 def public? resp = client.send(describe_call, describe_params) resp.send(inflected_permissions_attribute).any? do |permission| permission[:group] and permission[:group] == "all" end end
Removes permissions for specific users to launch this AMI. @param [Array of Strings] users The AWS account IDs of the
users that should no longer be able to launch this AMI.
@return [nil]
# File lib/aws/ec2/permission_collection.rb, line 98 def remove(*users) modify(:remove, *users) end
Resets the launch permissions to their default state. @return [nil]
# File lib/aws/ec2/permission_collection.rb, line 104 def reset client.send(reset_call, reset_params) end
@return [Integer] The number of users that have explicit
permissions to launch this AMI.
# File lib/aws/ec2/permission_collection.rb, line 47 def size inject(0) { |sum, i| sum + 1 } end
@private
# File lib/aws/ec2/permission_collection.rb, line 110 def describe_call "describe_#{resource_name}_attribute" end
@private
# File lib/aws/ec2/permission_collection.rb, line 128 def describe_params Hash[[["#{resource_name}_id".to_sym, @resource.send(:__resource_id__)], [:attribute, permissions_attribute]]] end
@private
# File lib/aws/ec2/permission_collection.rb, line 136 def inflected_permissions_attribute Core::Inflection.ruby_name(permissions_attribute).to_sym end
@private
# File lib/aws/ec2/permission_collection.rb, line 154 def modify(action, *users) return if users.empty? opts = modify_params(Hash[[[action, users.map do |user_id| { :user_id => user_id } end]]]) client.send(modify_call, opts) nil end
@private
# File lib/aws/ec2/permission_collection.rb, line 116 def modify_call "modify_#{resource_name}_attribute" end
@private
# File lib/aws/ec2/permission_collection.rb, line 166 def modify_params(modifications) Hash[[["#{resource_name}_id".to_sym, @resource.send(:__resource_id__)], [inflected_permissions_attribute, modifications]]] end
@private
# File lib/aws/ec2/permission_collection.rb, line 142 def permissions_attribute @resource.__permissions_attribute__ end
@private
# File lib/aws/ec2/permission_collection.rb, line 122 def reset_call "reset_#{resource_name}_attribute" end
@private
# File lib/aws/ec2/permission_collection.rb, line 148 def resource_name @resource.send(:inflected_name) end