kondate 0.3.2 → 0.3.3
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +27 -15
- data/lib/kondate/cli.rb +32 -35
- data/lib/kondate/host_plugin/file.rb +7 -7
- data/lib/kondate/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38160e964f7ea99cbd0bc387cc9309c27c3a442e
|
4
|
+
data.tar.gz: 1ea9ea5b11e0e70d80f1894c682c0cd156dcbcba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c1385a0f8868aea7ce912b88cb36576d23fefc3e8a7f6347fa66f0653a495b35f30d456b72a3b810ab397b3f6a19d57bf91084f674e593783bba89b0190015d
|
7
|
+
data.tar.gz: d7eadd64d34d4842561a4e5659a07048da0574740688a6d939d2d8efc6fa7e0066b9a70fd9b1558b568ca901245e17d7d99c1ef1dde2ccbae3de99a9a8c34794
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -25,7 +25,7 @@ Or install it yourself as:
|
|
25
25
|
Generate a template directory tree:
|
26
26
|
|
27
27
|
```
|
28
|
-
$ bundle exec kondate init
|
28
|
+
$ bundle exec kondate init .
|
29
29
|
```
|
30
30
|
|
31
31
|
Run itamae:
|
@@ -40,6 +40,18 @@ Run serverspec:
|
|
40
40
|
$ bundle exec kondate serverspec <host>
|
41
41
|
```
|
42
42
|
|
43
|
+
Run itamae for multiple hosts of a given role in parallel:
|
44
|
+
|
45
|
+
```
|
46
|
+
$ bundle exec kondate itamae-role <role>
|
47
|
+
```
|
48
|
+
|
49
|
+
Run serverspec for multiple hosts of a given role in parallel:
|
50
|
+
|
51
|
+
```
|
52
|
+
$ bundle exec kondate serverspec-role <role>
|
53
|
+
```
|
54
|
+
|
43
55
|
## Configuration
|
44
56
|
|
45
57
|
`kondate init` provides a template directory tree such as:
|
@@ -50,12 +62,12 @@ $ bundle exec kondate serverspec <host>
|
|
50
62
|
├── bootstrap.rb # itamae bootstrap
|
51
63
|
├── hosts.yml # manages hostnames and its roles
|
52
64
|
├── properties # manages run_lists and attributes
|
53
|
-
│ ├── nodes # host specific properties
|
65
|
+
│ ├── nodes # host specific properties
|
54
66
|
│ ├── roles # role properties
|
55
67
|
│ └── environments # environment properties
|
56
68
|
├── secrets # manages secrets attributes such as passwords
|
57
69
|
│ └── properties
|
58
|
-
│ ├── nodes
|
70
|
+
│ ├── nodes
|
59
71
|
│ ├── roles
|
60
72
|
│ └── environments
|
61
73
|
├── recipes # itamae recipes
|
@@ -76,13 +88,13 @@ The default .kondate.conf looks like below:
|
|
76
88
|
|
77
89
|
```
|
78
90
|
middlware_recipes_dir: recipes/middleware
|
79
|
-
roles_recipes_dir: recipes/roles
|
91
|
+
roles_recipes_dir: recipes/roles
|
80
92
|
middleware_recipes_serverspec_dir: spec/middleware
|
81
93
|
roles_recipes_serverspec_dir: spec/roles
|
82
|
-
nodes_properties_dir: properties/nodes
|
94
|
+
nodes_properties_dir: properties/nodes
|
83
95
|
roles_properties_dir: properties/roles
|
84
96
|
environments_properties_dir: properties/environments
|
85
|
-
secret_nodes_properties_dir: secrets/properties/nodes
|
97
|
+
secret_nodes_properties_dir: secrets/properties/nodes
|
86
98
|
secret_roles_properties_dir: secrets/properties/roles
|
87
99
|
secret_environments_properties_dir: secrets/properties/environments
|
88
100
|
plugin_dir: lib
|
@@ -174,7 +186,7 @@ Secret properties are places to write confidential attributes.
|
|
174
186
|
```
|
175
187
|
├── secrets # manages secrets attributes such as passwords
|
176
188
|
│ └── properties
|
177
|
-
│ ├── nodes
|
189
|
+
│ ├── nodes
|
178
190
|
│ ├── roles
|
179
191
|
│ └── environments
|
180
192
|
```
|
@@ -300,12 +312,12 @@ module Kondate
|
|
300
312
|
raise ConfigError.new('file: path is not configured') unless config.path
|
301
313
|
@path = config.path
|
302
314
|
|
303
|
-
@
|
304
|
-
@
|
305
|
-
@
|
315
|
+
@roles_of = YAML.load_file(@path)
|
316
|
+
@hosts_of = {}
|
317
|
+
@roles_of.each do |host, roles|
|
306
318
|
roles.each do |role|
|
307
|
-
@
|
308
|
-
@
|
319
|
+
@hosts_of[role] ||= []
|
320
|
+
@hosts_of[role] << host
|
309
321
|
end
|
310
322
|
end
|
311
323
|
end
|
@@ -319,7 +331,7 @@ module Kondate
|
|
319
331
|
# @param [String] host hostname
|
320
332
|
# @return [Array] array of roles
|
321
333
|
def get_roles(host)
|
322
|
-
@
|
334
|
+
@roles_of[host]
|
323
335
|
end
|
324
336
|
|
325
337
|
# @param [String] role role
|
@@ -327,7 +339,7 @@ module Kondate
|
|
327
339
|
#
|
328
340
|
# Available from kondate >= 0.3.0
|
329
341
|
def get_hosts(role)
|
330
|
-
@
|
342
|
+
@hosts_of[role]
|
331
343
|
end
|
332
344
|
|
333
345
|
# Optional
|
@@ -361,7 +373,7 @@ host_plugin:
|
|
361
373
|
## Development
|
362
374
|
|
363
375
|
```
|
364
|
-
bundle exec exe/kondate init
|
376
|
+
bundle exec exe/kondate init .
|
365
377
|
vagrant up
|
366
378
|
```
|
367
379
|
|
data/lib/kondate/cli.rb
CHANGED
@@ -25,8 +25,8 @@ module Kondate
|
|
25
25
|
Config.configure(@options)
|
26
26
|
end
|
27
27
|
|
28
|
-
desc "init [target_dir
|
29
|
-
def init(target_dir
|
28
|
+
desc "init [target_dir]", "Initialize kondate directory tree"
|
29
|
+
def init(target_dir)
|
30
30
|
Config.kondate_directories.each do |_, dir|
|
31
31
|
$stdout.puts "mkdir -p #{File.join(target_dir, dir)}"
|
32
32
|
FileUtils.mkdir_p(File.join(target_dir, dir)) unless @options[:dry_run]
|
@@ -84,16 +84,16 @@ module Kondate
|
|
84
84
|
end
|
85
85
|
$stdout.puts "Target hosts are [#{hosts.join(", ")}]"
|
86
86
|
|
87
|
-
|
87
|
+
property_files_of, summarized_property_files, hosts_of = build_property_files_of(hosts)
|
88
88
|
begin
|
89
|
-
if proceed?(summarized_property_files,
|
89
|
+
if proceed?(summarized_property_files, hosts_of)
|
90
90
|
successes = Parallel.map(hosts, in_processes: @options[:parallel]) do |host|
|
91
|
-
do_itamae(host,
|
91
|
+
do_itamae(host, property_files_of[host])
|
92
92
|
end
|
93
93
|
exit(-1) unless successes.all?
|
94
94
|
end
|
95
95
|
ensure
|
96
|
-
|
96
|
+
property_files_of.values.each {|property_files| clean_property_files(property_files) }
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -130,23 +130,24 @@ module Kondate
|
|
130
130
|
end
|
131
131
|
$stdout.puts "Target hosts are [#{hosts.join(", ")}]"
|
132
132
|
|
133
|
-
|
133
|
+
property_files_of, summarized_property_files, hosts_of = build_property_files_of(hosts)
|
134
134
|
begin
|
135
|
-
if proceed?(summarized_property_files,
|
135
|
+
if proceed?(summarized_property_files, hosts_of)
|
136
136
|
successes = Parallel.map(hosts, in_processes: @options[:parallel]) do |host|
|
137
|
-
do_serverspec(host,
|
137
|
+
do_serverspec(host, property_files_of[host])
|
138
138
|
end
|
139
139
|
exit(-1) unless successes.all?
|
140
140
|
end
|
141
141
|
ensure
|
142
|
-
|
142
|
+
property_files_of.values.each {|files| clean_property_files(files) }
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
146
|
private
|
147
147
|
|
148
148
|
def do_itamae(host, property_files)
|
149
|
-
|
149
|
+
env = {}
|
150
|
+
env['RUBYOPT'] = "-I #{Config.plugin_dir} -r bundler/setup -r ext/itamae/kondate"
|
150
151
|
property_files.each do |role, property_file|
|
151
152
|
next if property_file.nil?
|
152
153
|
command = "bundle exec itamae ssh"
|
@@ -169,15 +170,16 @@ module Kondate
|
|
169
170
|
command << " --profile=#{@options[:profile]}" if @options[:profile]
|
170
171
|
command << " --recipe-graph=#{@options[:recipe_graph]}" if @options[:recipe_graph]
|
171
172
|
command << " bootstrap.rb"
|
172
|
-
$stdout.puts command
|
173
|
-
return false unless system(command)
|
173
|
+
$stdout.puts "env #{env.map {|k, v| "#{k}=#{v.shellescape}" }.join(' ')} #{command}"
|
174
|
+
return false unless system(env, command)
|
174
175
|
end
|
175
176
|
true
|
176
177
|
end
|
177
178
|
|
178
179
|
def do_serverspec(host, property_files)
|
179
|
-
|
180
|
-
|
180
|
+
env = {}
|
181
|
+
env['TARGET_VAGRANT'] = '1' if @options[:vagrant]
|
182
|
+
env['RUBYOPT'] = "-I #{Config.plugin_dir} -r bundler/setup -r ext/serverspec/kondate"
|
181
183
|
property_files.each do |role, property_file|
|
182
184
|
next if property_file.nil?
|
183
185
|
recipes = YAML.load_file(property_file)['attributes'].keys.map {|recipe|
|
@@ -186,16 +188,17 @@ module Kondate
|
|
186
188
|
recipes << File.join(Config.roles_recipes_serverspec_dir, role)
|
187
189
|
spec_files = recipes.map {|recipe| "#{recipe}_spec.rb"}.select! {|spec| File.exist?(spec) }
|
188
190
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
191
|
+
env['TARGET_HOST'] = host
|
192
|
+
env['TARGET_NODE_FILE'] = property_file
|
193
|
+
command = "bundle exec rspec #{spec_files.map{|f| f.shellescape }.join(' ')}"
|
194
|
+
$stdout.puts "env #{env.map {|k, v| "#{k}=#{v.shellescape}" }.join(' ')} #{command}"
|
195
|
+
return false unless system(env, command)
|
193
196
|
end
|
194
197
|
true
|
195
198
|
end
|
196
199
|
|
197
|
-
def proceed?(property_files,
|
198
|
-
print_property_files(property_files,
|
200
|
+
def proceed?(property_files, hosts_of = {})
|
201
|
+
print_property_files(property_files, hosts_of)
|
199
202
|
if property_files.values.compact.empty?
|
200
203
|
$stderr.puts "Nothing to run"
|
201
204
|
false
|
@@ -207,7 +210,7 @@ module Kondate
|
|
207
210
|
end
|
208
211
|
end
|
209
212
|
|
210
|
-
def print_property_files(property_files,
|
213
|
+
def print_property_files(property_files, hosts_of = {})
|
211
214
|
roles = property_files.keys
|
212
215
|
if roles.nil? or roles.empty?
|
213
216
|
$stderr.puts 'No role'
|
@@ -216,7 +219,7 @@ module Kondate
|
|
216
219
|
$stdout.puts "Show property files for roles: [#{roles.join(", ")}]"
|
217
220
|
|
218
221
|
property_files.each do |role, property_file|
|
219
|
-
hosts =
|
222
|
+
hosts = hosts_of[role]
|
220
223
|
if hosts.nil? # itamae
|
221
224
|
$stdout.print "Show property file for role: #{role}"
|
222
225
|
else # itamae_role
|
@@ -239,12 +242,6 @@ module Kondate
|
|
239
242
|
end
|
240
243
|
end
|
241
244
|
|
242
|
-
def clean_property_files_of_hosts(property_files_of_hosts)
|
243
|
-
property_files_of_hosts.values.each do |property_files|
|
244
|
-
clean_property_files(property_files)
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
245
|
# @return [Hash] key value pairs whoses keys are roles and values are path (or nil)
|
249
246
|
def build_property_files(host)
|
250
247
|
builder = PropertyBuilder.new(host)
|
@@ -262,17 +259,17 @@ module Kondate
|
|
262
259
|
property_files
|
263
260
|
end
|
264
261
|
|
265
|
-
def
|
262
|
+
def build_property_files_of(hosts)
|
266
263
|
summarized_property_files = {}
|
267
|
-
|
268
|
-
|
264
|
+
property_files_of = {}
|
265
|
+
hosts_of = {}
|
269
266
|
hosts.each do |host|
|
270
267
|
property_files = build_property_files(host)
|
271
|
-
|
268
|
+
property_files_of[host] = property_files
|
272
269
|
property_files.each {|role, path| summarized_property_files[role] ||= path }
|
273
|
-
property_files.each {|role, path| (
|
270
|
+
property_files.each {|role, path| (hosts_of[role] ||= []) << host }
|
274
271
|
end
|
275
|
-
[
|
272
|
+
[property_files_of, summarized_property_files, hosts_of]
|
276
273
|
end
|
277
274
|
|
278
275
|
def mask_secrets(str)
|
@@ -13,12 +13,12 @@ module Kondate
|
|
13
13
|
raise ConfigError.new('file: path is not configured') unless config.path
|
14
14
|
@path = config.path
|
15
15
|
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
16
|
+
@roles_of = YAML.load_file(@path)
|
17
|
+
@hosts_of = {}
|
18
|
+
@roles_of.each do |host, roles|
|
19
19
|
roles.each do |role|
|
20
|
-
@
|
21
|
-
@
|
20
|
+
@hosts_of[role] ||= []
|
21
|
+
@hosts_of[role] << host
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -32,7 +32,7 @@ module Kondate
|
|
32
32
|
# @param [String] host hostname
|
33
33
|
# @return [Array] array of roles
|
34
34
|
def get_roles(host)
|
35
|
-
@
|
35
|
+
@roles_of[host]
|
36
36
|
end
|
37
37
|
|
38
38
|
# @param [String] role role
|
@@ -40,7 +40,7 @@ module Kondate
|
|
40
40
|
#
|
41
41
|
# Available from kondate >= 0.3.0
|
42
42
|
def get_hosts(role)
|
43
|
-
@
|
43
|
+
@hosts_of[role]
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
data/lib/kondate/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kondate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sonots
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: itamae
|