miam 0.2.2.beta → 0.2.2.beta2

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: fe963fe6fae509bed4854e4e671692fcc18c4107
4
- data.tar.gz: 231af89b949cdddf357961cdf89e80958c4d5f41
3
+ metadata.gz: 02694ddfe3ad49f32f2105b74f6367f52cdf0eaa
4
+ data.tar.gz: 950a3109de9a191931aaadf6313b9628da4f943c
5
5
  SHA512:
6
- metadata.gz: a83c3befa251be6948f7e44de4a29905661c65a251f7eb4198894ff3e84b62438809caf75179d9f8aaa79370a824b49e3e294e7bba6bf22066a1ffb8b0b322da
7
- data.tar.gz: 3c527e428ab28af26051c578c9e526573ad381669480e118e43bc06ef8fb152a004d3f84f19b3c48382e803b91a2ec98143ae0adb6587485dc3866002aee1370
6
+ metadata.gz: 332e80bae95488ee96f9b269d120cb80d896ba7eec058419e5498f784c45cc40a5018f9a14c5c59d2995a2c326ac100d8c607690d23798e7a3114ca9ac62ddcf
7
+ data.tar.gz: c7f97f201ab25b1765e8dc8fa445110354c41546f8ad6c9a376a85b3e3fffc0e72b067967151eed40fab6fc9896266a3012cd1b8a0ff4af5beddcbdfb3d4aa02
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
3
4
  - 2.0.0
data/README.md CHANGED
@@ -6,7 +6,7 @@ It defines the state of IAM using DSL, and updates IAM according to DSL.
6
6
 
7
7
  [![Gem Version](https://badge.fury.io/rb/miam.svg)](http://badge.fury.io/rb/miam)
8
8
  [![Build Status](https://travis-ci.org/winebarrel/miam.svg?branch=master)](https://travis-ci.org/winebarrel/miam)
9
- [![Coverage Status](https://coveralls.io/repos/winebarrel/miam/badge.png?branch=master)](https://coveralls.io/r/winebarrel/miam?branch=master)
9
+ [![Coverage Status](https://coveralls.io/repos/winebarrel/miam/badge.svg?branch=master&service=github)](https://coveralls.io/github/winebarrel/miam?branch=master)
10
10
 
11
11
  **Notice**
12
12
 
@@ -15,6 +15,9 @@ It defines the state of IAM using DSL, and updates IAM according to DSL.
15
15
  * `>= 0.2.1`
16
16
  * Support Managed Policy attach/detach
17
17
  * Support JSON format
18
+ * `>= 0.2.2`
19
+ * Improve update (show diff)
20
+ * Support Template
18
21
 
19
22
  ## Installation
20
23
 
@@ -216,5 +219,71 @@ Apply `iam.json` to IAM (dry-run)
216
219
  No change
217
220
  ```
218
221
 
222
+ ## Use Template
223
+
224
+ ```ruby
225
+ template "common-policy" do
226
+ policy "my-policy" do
227
+ {"Version"=>context.version,
228
+ "Statement"=>
229
+ [{"Action"=>
230
+ ["s3:Get*",
231
+ "s3:List*"],
232
+ "Effect"=>"Allow",
233
+ "Resource"=>"*"}]}
234
+ end
235
+ end
236
+
237
+ template "common-role-attrs" do
238
+ assume_role_policy_document do
239
+ {"Version"=>context.version,
240
+ "Statement"=>
241
+ [{"Sid"=>"",
242
+ "Effect"=>"Allow",
243
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
244
+ "Action"=>"sts:AssumeRole"}]}
245
+ end
246
+ end
247
+
248
+ user "bob", :path => "/developer/" do
249
+ login_profile :password_reset_required=>true
250
+
251
+ groups(
252
+ "Admin"
253
+ )
254
+
255
+ include_template "common-policy", version: "2012-10-17"
256
+ end
257
+
258
+ user "mary", :path => "/staff/" do
259
+ # login_profile :password_reset_required=>true
260
+
261
+ groups(
262
+ # no group
263
+ )
264
+
265
+ context.version = "2012-10-17"
266
+ include_template "common-policy"
267
+
268
+ attached_managed_policies(
269
+ "arn:aws:iam::aws:policy/AdministratorAccess",
270
+ "arn:aws:iam::123456789012:policy/my_policy"
271
+ )
272
+ end
273
+
274
+ role "S3", :path => "/" do
275
+ instance_profiles(
276
+ "S3"
277
+ )
278
+
279
+ include_template "common-role-attrs"
280
+
281
+ policy "S3-role-policy" do
282
+ {"Version"=>"2012-10-17",
283
+ "Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
284
+ end
285
+ end
286
+ ```
287
+
219
288
  ## Similar tools
220
289
  * [Codenize.tools](http://codenize.tools/)
data/lib/miam.rb CHANGED
@@ -10,9 +10,11 @@ require 'ruby-progressbar'
10
10
  require 'parallel'
11
11
  require 'term/ansicolor'
12
12
  require 'diffy'
13
+ require 'hashie'
13
14
 
14
15
  module Miam; end
15
16
  require 'miam/logger'
17
+ require 'miam/template_helper'
16
18
  require 'miam/client'
17
19
  require 'miam/driver'
18
20
  require 'miam/dsl'
@@ -1,4 +1,6 @@
1
1
  class Miam::DSL::Context
2
+ include Miam::TemplateHelper
3
+
2
4
  def self.eval(dsl, path, options = {})
3
5
  self.new(path, options) {
4
6
  eval(dsl, binding, path)
@@ -11,9 +13,20 @@ class Miam::DSL::Context
11
13
  @path = path
12
14
  @options = options
13
15
  @result = {:users => {}, :groups => {}, :roles => {}, :instance_profiles => {}}
16
+
17
+ @context = Hashie::Mash.new(
18
+ :path => path,
19
+ :options => options,
20
+ :templates => {}
21
+ )
22
+
14
23
  instance_eval(&block)
15
24
  end
16
25
 
26
+ def template(name, &block)
27
+ @context.templates[name.to_s] = block
28
+ end
29
+
17
30
  private
18
31
 
19
32
  def require(file)
@@ -35,7 +48,7 @@ class Miam::DSL::Context
35
48
  raise "User `#{name}` is already defined"
36
49
  end
37
50
 
38
- attrs = Miam::DSL::Context::User.new(name, &block).result
51
+ attrs = Miam::DSL::Context::User.new(@context, name, &block).result
39
52
  @result[:users][name] = user_options.merge(attrs)
40
53
  end
41
54
 
@@ -46,7 +59,7 @@ class Miam::DSL::Context
46
59
  raise "Group `#{name}` is already defined"
47
60
  end
48
61
 
49
- attrs = Miam::DSL::Context::Group.new(name, &block).result
62
+ attrs = Miam::DSL::Context::Group.new(@context, name, &block).result
50
63
  @result[:groups][name] = group_options.merge(attrs)
51
64
  end
52
65
 
@@ -57,7 +70,7 @@ class Miam::DSL::Context
57
70
  raise "Role `#{name}` is already defined"
58
71
  end
59
72
 
60
- attrs = Miam::DSL::Context::Role.new(name, &block).result
73
+ attrs = Miam::DSL::Context::Role.new(@context, name, &block).result
61
74
  @result[:roles][name] = role_options.merge(attrs)
62
75
  end
63
76
 
@@ -1,6 +1,9 @@
1
1
  class Miam::DSL::Context::Group
2
- def initialize(name, &block)
2
+ include Miam::TemplateHelper
3
+
4
+ def initialize(context, name, &block)
3
5
  @group_name = name
6
+ @context = context.merge(:group_name => name)
4
7
  @result = {:policies => {}, :attached_managed_policies => []}
5
8
  instance_eval(&block)
6
9
  end
@@ -1,6 +1,9 @@
1
1
  class Miam::DSL::Context::Role
2
- def initialize(name, &block)
2
+ include Miam::TemplateHelper
3
+
4
+ def initialize(context, name, &block)
3
5
  @role_name = name
6
+ @context = context.merge(:role_name => name)
4
7
  @result = {:instance_profiles => [], :policies => {}, :attached_managed_policies => []}
5
8
  instance_eval(&block)
6
9
  end
@@ -1,6 +1,9 @@
1
1
  class Miam::DSL::Context::User
2
- def initialize(name, &block)
2
+ include Miam::TemplateHelper
3
+
4
+ def initialize(context, name, &block)
3
5
  @user_name = name
6
+ @context = context.merge(:user_name => name)
4
7
  @result = {:groups => [], :policies => {}, :attached_managed_policies => []}
5
8
  instance_eval(&block)
6
9
  end
@@ -0,0 +1,20 @@
1
+ module Miam
2
+ module TemplateHelper
3
+ def include_template(template_name, context = {})
4
+ tmplt = @context.templates[template_name.to_s]
5
+
6
+ unless tmplt
7
+ raise "Template `#{template_name}` is not defined"
8
+ end
9
+
10
+ context_orig = @context
11
+ @context = @context.merge(context)
12
+ instance_eval(&tmplt)
13
+ @context = context_orig
14
+ end
15
+
16
+ def context
17
+ @context
18
+ end
19
+ end
20
+ end
data/lib/miam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Miam
2
- VERSION = '0.2.2.beta'
2
+ VERSION = '0.2.2.beta2'
3
3
  end
data/miam.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'parallel'
26
26
  spec.add_dependency 'term-ansicolor'
27
27
  spec.add_dependency 'diffy'
28
+ spec.add_dependency 'hashie'
28
29
  spec.add_development_dependency 'bundler'
29
30
  spec.add_development_dependency 'rake'
30
31
  spec.add_development_dependency 'rspec', '>= 3.0.0'
@@ -85,68 +85,171 @@ describe 'create' do
85
85
  context 'when apply' do
86
86
  subject { client }
87
87
 
88
+ let(:expected) do
89
+ {:users=>
90
+ {"bob"=>
91
+ {:path=>"/devloper/",
92
+ :groups=>["Admin", "SES"],
93
+ :attached_managed_policies=>[],
94
+ :policies=>
95
+ {"S3"=>
96
+ {"Statement"=>
97
+ [{"Action"=>["s3:Get*", "s3:List*"],
98
+ "Effect"=>"Allow",
99
+ "Resource"=>"*"}]}},
100
+ :login_profile=>{:password_reset_required=>true}},
101
+ "mary"=>
102
+ {:path=>"/staff/",
103
+ :groups=>[],
104
+ :attached_managed_policies=>[],
105
+ :policies=>
106
+ {"S3"=>
107
+ {"Statement"=>
108
+ [{"Action"=>["s3:Get*", "s3:List*"],
109
+ "Effect"=>"Allow",
110
+ "Resource"=>"*"}]}}}},
111
+ :groups=>
112
+ {"Admin"=>
113
+ {:path=>"/admin/",
114
+ :attached_managed_policies=>[],
115
+ :policies=>
116
+ {"Admin"=>
117
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}}},
118
+ "SES"=>
119
+ {:path=>"/ses/",
120
+ :attached_managed_policies=>[],
121
+ :policies=>
122
+ {"ses-policy"=>
123
+ {"Statement"=>
124
+ [{"Effect"=>"Allow",
125
+ "Action"=>"ses:SendRawEmail",
126
+ "Resource"=>"*"}]}}}},
127
+ :roles=>
128
+ {"my-role"=>
129
+ {:path=>"/any/",
130
+ :assume_role_policy_document=>
131
+ {"Version"=>"2012-10-17",
132
+ "Statement"=>
133
+ [{"Sid"=>"",
134
+ "Effect"=>"Allow",
135
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
136
+ "Action"=>"sts:AssumeRole"}]},
137
+ :instance_profiles=>["my-instance-profile"],
138
+ :attached_managed_policies=>[],
139
+ :policies=>
140
+ {"role-policy"=>
141
+ {"Statement"=>
142
+ [{"Action"=>["s3:Get*", "s3:List*"],
143
+ "Effect"=>"Allow",
144
+ "Resource"=>"*"}]}}}},
145
+ :instance_profiles=>{"my-instance-profile"=>{:path=>"/profile/"}}}
146
+ end
147
+
88
148
  it do
89
149
  updated = apply(subject) { dsl }
90
150
  expect(updated).to be_truthy
91
- expect(export).to eq(
92
- {:users=>
93
- {"bob"=>
94
- {:path=>"/devloper/",
95
- :groups=>["Admin", "SES"],
96
- :attached_managed_policies=>[],
97
- :policies=>
98
- {"S3"=>
99
- {"Statement"=>
100
- [{"Action"=>["s3:Get*", "s3:List*"],
101
- "Effect"=>"Allow",
102
- "Resource"=>"*"}]}},
103
- :login_profile=>{:password_reset_required=>true}},
104
- "mary"=>
105
- {:path=>"/staff/",
106
- :groups=>[],
107
- :attached_managed_policies=>[],
108
- :policies=>
109
- {"S3"=>
110
- {"Statement"=>
111
- [{"Action"=>["s3:Get*", "s3:List*"],
112
- "Effect"=>"Allow",
113
- "Resource"=>"*"}]}}}},
114
- :groups=>
115
- {"Admin"=>
116
- {:path=>"/admin/",
117
- :attached_managed_policies=>[],
118
- :policies=>
119
- {"Admin"=>
120
- {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}}},
121
- "SES"=>
122
- {:path=>"/ses/",
123
- :attached_managed_policies=>[],
124
- :policies=>
125
- {"ses-policy"=>
126
- {"Statement"=>
127
- [{"Effect"=>"Allow",
128
- "Action"=>"ses:SendRawEmail",
129
- "Resource"=>"*"}]}}}},
130
- :roles=>
131
- {"my-role"=>
132
- {:path=>"/any/",
133
- :assume_role_policy_document=>
151
+ expect(export).to eq expected
152
+ end
153
+
154
+ context 'when using template' do
155
+ let(:dsl) do
156
+ <<-RUBY
157
+ template "bob" do
158
+ login_profile :password_reset_required=>true
159
+
160
+ groups(
161
+ "Admin",
162
+ "SES"
163
+ )
164
+
165
+ policy "S3" do
166
+ {"Statement"=>
167
+ [{"Action"=>
168
+ ["s3:Get*",
169
+ "s3:List*"],
170
+ "Effect"=>"Allow",
171
+ "Resource"=>"*"}]}
172
+ end
173
+ end
174
+
175
+ template "mary" do
176
+ policy "S3" do
177
+ {"Statement"=>
178
+ [{"Action"=>
179
+ ["s3:Get*",
180
+ "s3:List*"],
181
+ "Effect"=>"Allow",
182
+ "Resource"=>"*"}]}
183
+ end
184
+ end
185
+
186
+ user "bob", :path=>"/devloper/" do
187
+ include_template context.user_name
188
+ end
189
+
190
+ user "mary", :path=>"/staff/" do
191
+ include_template context.user_name
192
+ end
193
+
194
+ template "Admin" do
195
+ policy context.policy_name do
196
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
197
+ end
198
+ end
199
+
200
+ template "SES" do
201
+ policy context.policy_name do
202
+ {"Statement"=>
203
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
204
+ end
205
+ end
206
+
207
+ group "Admin", :path=>"/admin/" do
208
+ include_template context.group_name, policy_name: "Admin"
209
+ end
210
+
211
+ group "SES", :path=>"/ses/" do
212
+ context.policy_name = "ses-policy"
213
+ include_template context.group_name
214
+ end
215
+
216
+ template "my-role" do
217
+ instance_profiles(
218
+ "my-instance-profile"
219
+ )
220
+
221
+ assume_role_policy_document do
134
222
  {"Version"=>"2012-10-17",
135
223
  "Statement"=>
136
224
  [{"Sid"=>"",
137
225
  "Effect"=>"Allow",
138
226
  "Principal"=>{"Service"=>"ec2.amazonaws.com"},
139
- "Action"=>"sts:AssumeRole"}]},
140
- :instance_profiles=>["my-instance-profile"],
141
- :attached_managed_policies=>[],
142
- :policies=>
143
- {"role-policy"=>
144
- {"Statement"=>
145
- [{"Action"=>["s3:Get*", "s3:List*"],
146
- "Effect"=>"Allow",
147
- "Resource"=>"*"}]}}}},
148
- :instance_profiles=>{"my-instance-profile"=>{:path=>"/profile/"}}}
149
- )
227
+ "Action"=>"sts:AssumeRole"}]}
228
+ end
229
+
230
+ policy "role-policy" do
231
+ {"Statement"=>
232
+ [{"Action"=>
233
+ ["s3:Get*",
234
+ "s3:List*"],
235
+ "Effect"=>"Allow",
236
+ "Resource"=>"*"}]}
237
+ end
238
+ end
239
+
240
+ role "my-role", :path=>"/any/" do
241
+ include_template context.role_name
242
+ end
243
+
244
+ instance_profile "my-instance-profile", :path=>"/profile/"
245
+ RUBY
246
+ end
247
+
248
+ it do
249
+ updated = apply(subject) { dsl }
250
+ expect(updated).to be_truthy
251
+ expect(export).to eq expected
252
+ end
150
253
  end
151
254
  end
152
255
 
metadata CHANGED
@@ -1,153 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2.beta
4
+ version: 0.2.2.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-11 00:00:00.000000000 Z
11
+ date: 2015-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 2.0.42
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.0.42
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ruby-progressbar
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: parallel
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: term-ansicolor
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: diffy
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: hashie
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - '>='
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - '>='
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - '>='
115
+ - - ">="
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - '>='
122
+ - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rspec
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - '>='
129
+ - - ">="
116
130
  - !ruby/object:Gem::Version
117
131
  version: 3.0.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - '>='
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: 3.0.0
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rspec-instafail
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - '>='
143
+ - - ">="
130
144
  - !ruby/object:Gem::Version
131
145
  version: '0'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - '>='
150
+ - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: coveralls
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - '>='
157
+ - - ">="
144
158
  - !ruby/object:Gem::Version
145
159
  version: '0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - '>='
164
+ - - ">="
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
167
  description: Miam is a tool to manage IAM. It defines the state of IAM using DSL,
@@ -159,9 +173,9 @@ executables:
159
173
  extensions: []
160
174
  extra_rdoc_files: []
161
175
  files:
162
- - .gitignore
163
- - .rspec
164
- - .travis.yml
176
+ - ".gitignore"
177
+ - ".rspec"
178
+ - ".travis.yml"
165
179
  - Gemfile
166
180
  - LICENSE.txt
167
181
  - README.md
@@ -180,6 +194,7 @@ files:
180
194
  - lib/miam/ext/string_ext.rb
181
195
  - lib/miam/logger.rb
182
196
  - lib/miam/password_manager.rb
197
+ - lib/miam/template_helper.rb
183
198
  - lib/miam/utils.rb
184
199
  - lib/miam/version.rb
185
200
  - miam.gemspec
@@ -199,17 +214,17 @@ require_paths:
199
214
  - lib
200
215
  required_ruby_version: !ruby/object:Gem::Requirement
201
216
  requirements:
202
- - - '>='
217
+ - - ">="
203
218
  - !ruby/object:Gem::Version
204
219
  version: '0'
205
220
  required_rubygems_version: !ruby/object:Gem::Requirement
206
221
  requirements:
207
- - - '>'
222
+ - - ">"
208
223
  - !ruby/object:Gem::Version
209
224
  version: 1.3.1
210
225
  requirements: []
211
226
  rubyforge_project:
212
- rubygems_version: 2.0.14.1
227
+ rubygems_version: 2.4.5
213
228
  signing_key:
214
229
  specification_version: 4
215
230
  summary: Miam is a tool to manage IAM.