1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
module Fog
module AWS
class IAM
class Group < Fog::Model
identity :id, :aliases => 'GroupId'
attribute :arn, :aliases => 'Arn'
attribute :name, :aliases => 'GroupName'
attribute :path, :aliases => 'Path'
attribute :users, :aliases => 'Users', :type => :array
def add_user(user_or_name)
requires :name
user = if user_or_name.is_a?(Fog::AWS::IAM::User)
user_or_name
else
service.users.new(:id => user_or_name)
end
service.add_user_to_group(self.name, user.identity)
merge_attributes(:users => self.users + [user])
end
def attach(policy_or_arn)
requires :name
arn = if policy_or_arn.respond_to?(:arn)
policy_or_arn.arn
else
policy_or_arn
end
service.attach_group_policy(self.name, arn)
end
def attached_policies
requires :name
service.managed_policies(:group_name => self.name)
end
def destroy
requires :name
service.delete_group(self.name)
true
end
def detach(policy_or_arn)
requires :name
arn = if policy_or_arn.respond_to?(:arn)
policy_or_arn.arn
else
policy_or_arn
end
service.detach_group_policy(self.name, arn)
end
def save
if !persisted?
requires :name
merge_attributes(
service.create_group(self.name, self.path).body["Group"]
)
else
params = {}
if self.name
params['NewGroupName'] = self.name
end
if self.path
params['NewPath'] = self.path
end
service.update_group(self.name, params)
true
end
end
def policies
requires :name
service.policies(:group_name => self.name)
end
def reload
requires :name
data = begin
collection.get(self.name)
rescue Excon::Errors::SocketError
nil
end
return unless data
merge_attributes(data.attributes)
self
end
end
end
end
end
|