lib/miam/exporter.rb in miam-0.1.4 vs lib/miam/exporter.rb in miam-0.2.0.beta
- old
+ new
@@ -9,22 +9,19 @@
@mutex = Mutex.new
@concurrency = options[:export_concurrency] || 16
end
def export
- users = list_users
- groups = list_groups
- roles = list_roles
+ account_authorization_details = get_account_authorization_details
+
+ users = account_authorization_details[:user_detail_list]
+ groups = account_authorization_details[:group_detail_list]
+ roles = account_authorization_details[:role_detail_list]
instance_profiles = list_instance_profiles
group_users = {}
instance_profile_roles = {}
- unless @options[:no_progress]
- progress_total = users.length + groups.length + roles.length + instance_profiles.length
- @progressbar = ProgressBar.create(:title => "Loading", :total => progress_total, :output => $stderr)
- end
-
expected = {
:users => export_users(users, group_users),
:groups => export_groups(groups),
:roles => export_roles(roles, instance_profile_roles),
:instance_profiles => export_instance_profiles(instance_profiles),
@@ -38,12 +35,12 @@
def export_users(users, group_users)
result = {}
Parallel.each(users, :in_threads => @concurrency) do |user|
user_name = user.user_name
- groups = export_user_groups(user_name)
- policies = export_user_policies(user_name)
+ groups = user.group_list
+ policies = export_user_policies(user)
login_profile = export_login_profile(user_name)
@mutex.synchronize do
groups.each do |group_name|
group_users[group_name] ||= []
@@ -57,35 +54,22 @@
}
if login_profile
result[user_name][:login_profile] = login_profile
end
-
- progress
end
end
result
end
- def export_user_groups(user_name)
- @iam.list_groups_for_user(:user_name => user_name).map {|resp|
- resp.groups.map do |group|
- group.group_name
- end
- }.flatten
- end
-
- def export_user_policies(user_name)
+ def export_user_policies(user)
result = {}
- @iam.list_user_policies(:user_name => user_name).each do |resp|
- resp.policy_names.map do |policy_name|
- policy = @iam.get_user_policy(:user_name => user_name, :policy_name => policy_name)
- document = CGI.unescape(policy.policy_document)
- result[policy_name] = JSON.parse(document)
- end
+ user.user_policy_list.each do |policy|
+ document = CGI.unescape(policy.policy_document)
+ result[policy.policy_name] = JSON.parse(document)
end
result
end
@@ -101,46 +85,41 @@
def export_groups(groups)
result = {}
Parallel.each(groups, :in_threads => @concurrency) do |group|
group_name = group.group_name
- policies = export_group_policies(group_name)
+ policies = export_group_policies(group)
@mutex.synchronize do
result[group_name] = {
:path => group.path,
:policies => policies,
}
-
- progress
end
end
result
end
- def export_group_policies(group_name)
+ def export_group_policies(group)
result = {}
- @iam.list_group_policies(:group_name => group_name).each do |resp|
- resp.policy_names.map do |policy_name|
- policy = @iam.get_group_policy(:group_name => group_name, :policy_name => policy_name)
- document = CGI.unescape(policy.policy_document)
- result[policy_name] = JSON.parse(document)
- end
+ group.group_policy_list.each do |policy|
+ document = CGI.unescape(policy.policy_document)
+ result[policy.policy_name] = JSON.parse(document)
end
result
end
def export_roles(roles, instance_profile_roles)
result = {}
Parallel.each(roles, :in_threads => @concurrency) do |role|
role_name = role.role_name
- instance_profiles = export_role_instance_profiles(role_name)
- policies = export_role_policies(role_name)
+ instance_profiles = role.instance_profile_list.map {|i| i.instance_profile_name }
+ policies = export_role_policies(role)
@mutex.synchronize do
instance_profiles.each do |instance_profile_name|
instance_profile_roles[instance_profile_name] ||= []
instance_profile_roles[instance_profile_name] << role_name
@@ -152,35 +131,22 @@
:path => role.path,
:assume_role_policy_document => JSON.parse(document),
:instance_profiles => instance_profiles,
:policies => policies,
}
-
- progress
end
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)
+ def export_role_policies(role)
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
+ role.role_policy_list.each do |policy|
+ document = CGI.unescape(policy.policy_document)
+ result[policy.policy_name] = JSON.parse(document)
end
result
end
@@ -192,49 +158,39 @@
@mutex.synchronize do
result[instance_profile_name] = {
:path => instance_profile.path,
}
-
- progress
end
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
+ def list_instance_profiles
+ @iam.list_instance_profiles.map {|resp|
+ resp.instance_profiles.to_a
}.flatten
end
- def list_users
- @iam.list_users.map {|resp|
- resp.users.to_a
- }.flatten
- end
+ def get_account_authorization_details
+ account_authorization_details = {}
- def list_groups
- @iam.list_groups.map {|resp|
- resp.groups.to_a
- }.flatten
- end
+ keys = [
+ :user_detail_list,
+ :group_detail_list,
+ :role_detail_list,
+ ]
- def list_roles
- @iam.list_roles.map {|resp|
- resp.roles.to_a
- }.flatten
- end
+ keys.each do |key|
+ account_authorization_details[key] = []
+ end
- def list_instance_profiles
- @iam.list_instance_profiles.map {|resp|
- resp.instance_profiles.to_a
- }.flatten
- end
+ @iam.get_account_authorization_details.each do |resp|
+ keys.each do |key|
+ account_authorization_details[key].concat(resp[key])
+ end
+ end
- def progress
- @progressbar.increment if @progressbar
+ account_authorization_details
end
end