miam 0.2.2.beta → 0.2.2.beta2

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: 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.