miam 0.1.4 → 0.2.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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