lib/miam/exporter.rb in miam-0.1.0 vs lib/miam/exporter.rb in miam-0.1.1
- old
+ new
@@ -9,23 +9,28 @@
end
def export(&block)
users = list_users
groups = list_groups
+ roles = list_roles
+ instance_profiles = list_instance_profiles
group_users = {}
+ instance_profile_roles = {}
export_options = {
- :progress_total => (users.length + groups.length),
+ :progress_total => (users.length + groups.length + roles.length + instance_profiles.length),
:progress => 0,
}
expected = {
:users => export_users(users, group_users, export_options, &block),
:groups => export_groups(groups, export_options, &block),
+ :roles => export_roles(roles, instance_profile_roles, export_options, &block),
+ :instance_profiles => export_instance_profiles(instance_profiles, export_options, &block),
}
- [expected, group_users]
+ [expected, group_users, instance_profile_roles]
end
private
def export_users(users, group_users, export_options = {})
@@ -121,17 +126,105 @@
end
result
end
+ def export_roles(roles, instance_profile_roles, export_options = {})
+ result = {}
+
+ roles.each do |role|
+ role_name = role.role_name
+
+ instance_profiles = export_role_instance_profiles(role_name)
+
+ instance_profiles.each do |instance_profile_name|
+ instance_profile_roles[instance_profile_name] ||= []
+ instance_profile_roles[instance_profile_name] << role_name
+ end
+
+ document = CGI.unescape(role.assume_role_policy_document)
+
+ result[role_name] = {
+ :path => role.path,
+ :assume_role_policy_document => JSON.parse(document),
+ :instance_profiles => instance_profiles,
+ :policies => export_role_policies(role_name),
+ }
+
+ export_options[:progress] += 1
+ yield(export_options) if block_given?
+ end
+
+ result
+ end
+
+ def export_role_instance_profiles(role_name)
+ @iam.list_instance_profiles_for_role(:role_name => role_name).map {|resp|
+ resp.instance_profiles.map do |instance_profile|
+ instance_profile.instance_profile_name
+ end
+ }.flatten
+ end
+
+ def export_role_policies(role_name)
+ result = {}
+
+ @iam.list_role_policies(:role_name => role_name).each do |resp|
+ resp.policy_names.map do |policy_name|
+ policy = @iam.get_role_policy(:role_name => role_name, :policy_name => policy_name)
+ document = CGI.unescape(policy.policy_document)
+ result[policy_name] = JSON.parse(document)
+ end
+ end
+
+ result
+ end
+
+ def export_instance_profiles(instance_profiles, export_options = {})
+ result = {}
+
+ instance_profiles.each do |instance_profile|
+ instance_profile_name = instance_profile.instance_profile_name
+
+ result[instance_profile_name] = {
+ :path => instance_profile.path,
+ }
+
+ export_options[:progress] += 1
+ yield(export_options) if block_given?
+ end
+
+ result
+ end
+
+ def export_role_instance_profiles(role_name)
+ @iam.list_instance_profiles_for_role(:role_name => role_name).map {|resp|
+ resp.instance_profiles.map do |instance_profile|
+ instance_profile.instance_profile_name
+ end
+ }.flatten
+ end
+
def list_users
@iam.list_users.map {|resp|
resp.users.to_a
}.flatten
end
def list_groups
@iam.list_groups.map {|resp|
resp.groups.to_a
+ }.flatten
+ end
+
+ def list_roles
+ @iam.list_roles.map {|resp|
+ resp.roles.to_a
+ }.flatten
+ end
+
+ def list_instance_profiles
+ @iam.list_instance_profiles.map {|resp|
+ resp.instance_profiles.to_a
}.flatten
end
end