miam 0.1.4 → 0.2.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2f7fbc6d8f30d94ddf30434144c507f90a08a92
4
- data.tar.gz: f4bec97bf208b21f044bb4089f29453e8236ee15
3
+ metadata.gz: 93e592c9821a09f0eb8dee36c98f1ab14cbd9185
4
+ data.tar.gz: 06c463a3aa71249eaf5371fadcf5df506afe1c67
5
5
  SHA512:
6
- metadata.gz: 79ab922dc36aaa76e8ed5cec329daad942ea06deda43fa80cc657547d056d341320871a97e9ffc7103a61f180b7d357f7265e64963f13b0c05869a809c219ed2
7
- data.tar.gz: b98f1198e7c93184c5eedcebf1bb20dc45543e8d5800e58169eabffd065545db6a3c587447c93ec0e781ca1dad3afa8c1b6a29448baa5ae3da62d57f5ed3ebc2
6
+ metadata.gz: ebbb9ef86252c3240575445f3afe68690b53fe6c6a9bd7de7de95368d6a1b87bde63b2d22eb37942c7f83eea5f5215defc21b766ab67af42c9bfbf01df722cb8
7
+ data.tar.gz: ffabc21c6da3fa8ffa0c23308b90c2c2f7aec0bc0fecf90c29b6363014fd80974eed9a25018b4b80fff448c09f1987301d7f597d6c550aa5976a34b1d9b8c37a
data/README.md CHANGED
@@ -8,6 +8,12 @@ It defines the state of IAM using DSL, and updates IAM according to DSL.
8
8
  [![Build Status](https://travis-ci.org/winebarrel/miam.svg?branch=master)](https://travis-ci.org/winebarrel/miam)
9
9
  [![Coverage Status](https://coveralls.io/repos/winebarrel/miam/badge.png?branch=master)](https://coveralls.io/r/winebarrel/miam?branch=master)
10
10
 
11
+ ** Notice **
12
+
13
+ * `>= 0.2.0`
14
+ * Use [get_account_authorization_details](http://docs.aws.amazon.com/sdkforruby/api/Aws/IAM/Client.html#get_account_authorization_details-instance_method).
15
+ * Remove progress bar.
16
+
11
17
  ## Installation
12
18
 
13
19
  Add this line to your application's Gemfile:
@@ -56,7 +62,6 @@ Usage: miam [options]
56
62
  --export-concurrency N
57
63
  --target REGEXP
58
64
  --no-color
59
- --no-progress
60
65
  --debug
61
66
  ```
62
67
 
data/bin/miam CHANGED
@@ -46,7 +46,6 @@ ARGV.options do |opt|
46
46
  opt.on('' , '--export-concurrency N', Integer) {|v| options[:export_concurrency] = v }
47
47
  opt.on('' , '--target REGEXP') {|v| options[:target] = Regexp.new(v) }
48
48
  opt.on('' , '--no-color') { options[:color] = false }
49
- opt.on('' , '--no-progress') { options[:no_progress] = true }
50
49
  opt.on('' , '--debug') { options[:debug] = true }
51
50
  opt.parse!
52
51
 
data/lib/miam.rb CHANGED
@@ -6,7 +6,6 @@ require 'singleton'
6
6
  require 'thread'
7
7
 
8
8
  require 'aws-sdk-core'
9
- require 'ruby-progressbar'
10
9
  require 'parallel'
11
10
  require 'term/ansicolor'
12
11
 
data/lib/miam/exporter.rb CHANGED
@@ -11,18 +11,15 @@ class Miam::Exporter
11
11
  end
12
12
 
13
13
  def export
14
- users = list_users
15
- groups = list_groups
16
- roles = list_roles
14
+ account_authorization_details = get_account_authorization_details
15
+
16
+ users = account_authorization_details[:user_detail_list]
17
+ groups = account_authorization_details[:group_detail_list]
18
+ roles = account_authorization_details[:role_detail_list]
17
19
  instance_profiles = list_instance_profiles
18
20
  group_users = {}
19
21
  instance_profile_roles = {}
20
22
 
21
- unless @options[:no_progress]
22
- progress_total = users.length + groups.length + roles.length + instance_profiles.length
23
- @progressbar = ProgressBar.create(:title => "Loading", :total => progress_total, :output => $stderr)
24
- end
25
-
26
23
  expected = {
27
24
  :users => export_users(users, group_users),
28
25
  :groups => export_groups(groups),
@@ -40,8 +37,8 @@ class Miam::Exporter
40
37
 
41
38
  Parallel.each(users, :in_threads => @concurrency) do |user|
42
39
  user_name = user.user_name
43
- groups = export_user_groups(user_name)
44
- policies = export_user_policies(user_name)
40
+ groups = user.group_list
41
+ policies = export_user_policies(user)
45
42
  login_profile = export_login_profile(user_name)
46
43
 
47
44
  @mutex.synchronize do
@@ -59,31 +56,18 @@ class Miam::Exporter
59
56
  if login_profile
60
57
  result[user_name][:login_profile] = login_profile
61
58
  end
62
-
63
- progress
64
59
  end
65
60
  end
66
61
 
67
62
  result
68
63
  end
69
64
 
70
- def export_user_groups(user_name)
71
- @iam.list_groups_for_user(:user_name => user_name).map {|resp|
72
- resp.groups.map do |group|
73
- group.group_name
74
- end
75
- }.flatten
76
- end
77
-
78
- def export_user_policies(user_name)
65
+ def export_user_policies(user)
79
66
  result = {}
80
67
 
81
- @iam.list_user_policies(:user_name => user_name).each do |resp|
82
- resp.policy_names.map do |policy_name|
83
- policy = @iam.get_user_policy(:user_name => user_name, :policy_name => policy_name)
84
- document = CGI.unescape(policy.policy_document)
85
- result[policy_name] = JSON.parse(document)
86
- end
68
+ user.user_policy_list.each do |policy|
69
+ document = CGI.unescape(policy.policy_document)
70
+ result[policy.policy_name] = JSON.parse(document)
87
71
  end
88
72
 
89
73
  result
@@ -103,30 +87,25 @@ class Miam::Exporter
103
87
 
104
88
  Parallel.each(groups, :in_threads => @concurrency) do |group|
105
89
  group_name = group.group_name
106
- policies = export_group_policies(group_name)
90
+ policies = export_group_policies(group)
107
91
 
108
92
  @mutex.synchronize do
109
93
  result[group_name] = {
110
94
  :path => group.path,
111
95
  :policies => policies,
112
96
  }
113
-
114
- progress
115
97
  end
116
98
  end
117
99
 
118
100
  result
119
101
  end
120
102
 
121
- def export_group_policies(group_name)
103
+ def export_group_policies(group)
122
104
  result = {}
123
105
 
124
- @iam.list_group_policies(:group_name => group_name).each do |resp|
125
- resp.policy_names.map do |policy_name|
126
- policy = @iam.get_group_policy(:group_name => group_name, :policy_name => policy_name)
127
- document = CGI.unescape(policy.policy_document)
128
- result[policy_name] = JSON.parse(document)
129
- end
106
+ group.group_policy_list.each do |policy|
107
+ document = CGI.unescape(policy.policy_document)
108
+ result[policy.policy_name] = JSON.parse(document)
130
109
  end
131
110
 
132
111
  result
@@ -137,8 +116,8 @@ class Miam::Exporter
137
116
 
138
117
  Parallel.each(roles, :in_threads => @concurrency) do |role|
139
118
  role_name = role.role_name
140
- instance_profiles = export_role_instance_profiles(role_name)
141
- policies = export_role_policies(role_name)
119
+ instance_profiles = role.instance_profile_list.map {|i| i.instance_profile_name }
120
+ policies = export_role_policies(role)
142
121
 
143
122
  @mutex.synchronize do
144
123
  instance_profiles.each do |instance_profile_name|
@@ -154,31 +133,18 @@ class Miam::Exporter
154
133
  :instance_profiles => instance_profiles,
155
134
  :policies => policies,
156
135
  }
157
-
158
- progress
159
136
  end
160
137
  end
161
138
 
162
139
  result
163
140
  end
164
141
 
165
- def export_role_instance_profiles(role_name)
166
- @iam.list_instance_profiles_for_role(:role_name => role_name).map {|resp|
167
- resp.instance_profiles.map do |instance_profile|
168
- instance_profile.instance_profile_name
169
- end
170
- }.flatten
171
- end
172
-
173
- def export_role_policies(role_name)
142
+ def export_role_policies(role)
174
143
  result = {}
175
144
 
176
- @iam.list_role_policies(:role_name => role_name).each do |resp|
177
- resp.policy_names.map do |policy_name|
178
- policy = @iam.get_role_policy(:role_name => role_name, :policy_name => policy_name)
179
- document = CGI.unescape(policy.policy_document)
180
- result[policy_name] = JSON.parse(document)
181
- end
145
+ role.role_policy_list.each do |policy|
146
+ document = CGI.unescape(policy.policy_document)
147
+ result[policy.policy_name] = JSON.parse(document)
182
148
  end
183
149
 
184
150
  result
@@ -194,47 +160,37 @@ class Miam::Exporter
194
160
  result[instance_profile_name] = {
195
161
  :path => instance_profile.path,
196
162
  }
197
-
198
- progress
199
163
  end
200
164
  end
201
165
 
202
166
  result
203
167
  end
204
168
 
205
- def export_role_instance_profiles(role_name)
206
- @iam.list_instance_profiles_for_role(:role_name => role_name).map {|resp|
207
- resp.instance_profiles.map do |instance_profile|
208
- instance_profile.instance_profile_name
209
- end
169
+ def list_instance_profiles
170
+ @iam.list_instance_profiles.map {|resp|
171
+ resp.instance_profiles.to_a
210
172
  }.flatten
211
173
  end
212
174
 
213
- def list_users
214
- @iam.list_users.map {|resp|
215
- resp.users.to_a
216
- }.flatten
217
- end
175
+ def get_account_authorization_details
176
+ account_authorization_details = {}
218
177
 
219
- def list_groups
220
- @iam.list_groups.map {|resp|
221
- resp.groups.to_a
222
- }.flatten
223
- end
178
+ keys = [
179
+ :user_detail_list,
180
+ :group_detail_list,
181
+ :role_detail_list,
182
+ ]
224
183
 
225
- def list_roles
226
- @iam.list_roles.map {|resp|
227
- resp.roles.to_a
228
- }.flatten
229
- end
184
+ keys.each do |key|
185
+ account_authorization_details[key] = []
186
+ end
230
187
 
231
- def list_instance_profiles
232
- @iam.list_instance_profiles.map {|resp|
233
- resp.instance_profiles.to_a
234
- }.flatten
235
- end
188
+ @iam.get_account_authorization_details.each do |resp|
189
+ keys.each do |key|
190
+ account_authorization_details[key].concat(resp[key])
191
+ end
192
+ end
236
193
 
237
- def progress
238
- @progressbar.increment if @progressbar
194
+ account_authorization_details
239
195
  end
240
196
  end
data/lib/miam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Miam
2
- VERSION = '0.1.4'
2
+ VERSION = '0.2.0.beta'
3
3
  end
data/miam.gemspec CHANGED
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ['lib']
22
22
 
23
23
  spec.add_dependency 'aws-sdk-core', '~> 2.0.3'
24
- spec.add_dependency 'ruby-progressbar'
25
24
  spec.add_dependency 'parallel'
26
25
  spec.add_dependency 'term-ansicolor'
27
26
  spec.add_development_dependency 'bundler', '~> 1.7'
data/spec/spec_helper.rb CHANGED
@@ -29,7 +29,6 @@ end
29
29
  def client(user_options = {})
30
30
  options = {
31
31
  logger: Logger.new('/dev/null'),
32
- no_progress: true
33
32
  }
34
33
 
35
34
  options[:password_manager] = Miam::PasswordManager.new('/dev/null', options)
@@ -76,7 +75,7 @@ def apply(cli = client)
76
75
  end
77
76
 
78
77
  def export(options = {})
79
- options = {no_progress: true}.merge(options)
78
+ options = {}.merge(options)
80
79
  cli = options.delete(:client) || Aws::IAM::Client.new
81
80
  Miam::Exporter.export(cli, options)[0]
82
81
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-30 00:00:00.000000000 Z
11
+ date: 2014-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.0.3
27
- - !ruby/object:Gem::Dependency
28
- name: ruby-progressbar
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: parallel
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -189,9 +175,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
175
  version: '0'
190
176
  required_rubygems_version: !ruby/object:Gem::Requirement
191
177
  requirements:
192
- - - '>='
178
+ - - '>'
193
179
  - !ruby/object:Gem::Version
194
- version: '0'
180
+ version: 1.3.1
195
181
  requirements: []
196
182
  rubyforge_project:
197
183
  rubygems_version: 2.0.14