test-kitchen 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -1
- data/lib/kitchen/busser.rb +7 -2
- data/lib/kitchen/driver/ssh_base.rb +1 -0
- data/lib/kitchen/loader/yaml.rb +42 -3
- data/lib/kitchen/provisioner/chef_base.rb +5 -2
- data/lib/kitchen/ssh.rb +1 -0
- data/lib/kitchen/version.rb +1 -1
- data/spec/kitchen/loader/yaml_spec.rb +132 -0
- 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: 64d47d36ddf40c8ecc6d85d959e3a57156532e47
|
4
|
+
data.tar.gz: 2c60df4e026b0f2cad64dc5b4c3c3ba1341ac2a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3de01b4c239c767b824c4d29b8645950ab2704f20c821dd42877d9034ec7024f9b669d4b1c41141ebb213f02f1fe33832adbd2eef804b089abdff78e1aa3d2f
|
7
|
+
data.tar.gz: 3b6ad9625a57724367af1de37712d39b9e2bd6c2115a3f5a66bda655b180797f319888d5ac916a4425b013bf390178d21398aba2198c125779c487f92658f1ad
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## 1.1.1 / 2013-12-08
|
2
|
+
|
3
|
+
### Bug fixes
|
4
|
+
|
5
|
+
* Normalize driver, provisioner, & busser blocks when merging raw YAML. ([@fnichol][])
|
6
|
+
* Issue [#276][], issue [#278][]: Ensure `Busser#local_suite_files` only rejects chef data dirs. ([@fnichol][])
|
7
|
+
* Pull request [#275][]: Fix SSH 'Too many authentication failures' error. ([@zts][])
|
8
|
+
* When copying `./cookbooks`, conditionally check for `./site-cookbooks`. ([@fnichol][])
|
9
|
+
|
10
|
+
### Improvements
|
11
|
+
|
12
|
+
* Improve `kitchen diagnose` when loader data merging fails. ([@fnichol][])
|
13
|
+
|
14
|
+
|
1
15
|
## 1.1.0 / 2013-12-04
|
2
16
|
|
3
17
|
### Default updates
|
@@ -383,6 +397,9 @@ The initial release.
|
|
383
397
|
[#265]: https://github.com/opscode/test-kitchen/issues/265
|
384
398
|
[#266]: https://github.com/opscode/test-kitchen/issues/266
|
385
399
|
[#272]: https://github.com/opscode/test-kitchen/issues/272
|
400
|
+
[#275]: https://github.com/opscode/test-kitchen/issues/275
|
401
|
+
[#276]: https://github.com/opscode/test-kitchen/issues/276
|
402
|
+
[#278]: https://github.com/opscode/test-kitchen/issues/278
|
386
403
|
[@ChrisLundquist]: https://github.com/ChrisLundquist
|
387
404
|
[@adamhjk]: https://github.com/adamhjk
|
388
405
|
[@arangamani]: https://github.com/arangamani
|
@@ -419,4 +436,5 @@ The initial release.
|
|
419
436
|
[@sethvargo]: https://github.com/sethvargo
|
420
437
|
[@smith]: https://github.com/smith
|
421
438
|
[@stevendanna]: https://github.com/stevendanna
|
422
|
-
[@thommay]: https://github.com/thommay
|
439
|
+
[@thommay]: https://github.com/thommay
|
440
|
+
[@zts]: https://github.com/zts
|
data/lib/kitchen/busser.rb
CHANGED
@@ -181,12 +181,17 @@ module Kitchen
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def local_suite_files
|
184
|
-
|
184
|
+
base = File.join(config[:test_base_path], config[:suite_name])
|
185
|
+
glob = File.join(base, "*/**/*")
|
185
186
|
Dir.glob(glob).reject do |f|
|
186
|
-
|
187
|
+
is_chef_data_dir?(base, f) || File.directory?(f)
|
187
188
|
end
|
188
189
|
end
|
189
190
|
|
191
|
+
def is_chef_data_dir?(base, file)
|
192
|
+
file =~ %r[^#{base}/(data|data_bags|environments|nodes|roles)/]
|
193
|
+
end
|
194
|
+
|
190
195
|
def helper_files
|
191
196
|
Dir.glob(File.join(config[:test_base_path], "helpers", "*/**/*"))
|
192
197
|
end
|
@@ -85,6 +85,7 @@ module Kitchen
|
|
85
85
|
opts = Hash.new
|
86
86
|
opts[:user_known_hosts_file] = "/dev/null"
|
87
87
|
opts[:paranoid] = false
|
88
|
+
opts[:keys_only] = true if combined[:ssh_key]
|
88
89
|
opts[:password] = combined[:password] if combined[:password]
|
89
90
|
opts[:forward_agent] = combined[:forward_agent] if combined.key? :forward_agent
|
90
91
|
opts[:port] = combined[:port] if combined[:port]
|
data/lib/kitchen/loader/yaml.rb
CHANGED
@@ -80,7 +80,8 @@ module Kitchen
|
|
80
80
|
result[:local_config] =
|
81
81
|
{ :filename => local_config_file, :raw_data => local_yaml }
|
82
82
|
end
|
83
|
-
|
83
|
+
combined = begin ; combined_hash ; rescue => e ; failure_hash(e) ; end
|
84
|
+
result[:combined_config] = { :raw_data => combined }
|
84
85
|
result
|
85
86
|
end
|
86
87
|
|
@@ -91,8 +92,12 @@ module Kitchen
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def combined_hash
|
94
|
-
y = @process_local
|
95
|
-
|
95
|
+
y = if @process_local
|
96
|
+
normalize(yaml).rmerge(normalize(local_yaml))
|
97
|
+
else
|
98
|
+
normalize(yaml)
|
99
|
+
end
|
100
|
+
@process_global ? y.rmerge(normalize(global_yaml)) : y
|
96
101
|
rescue NoMethodError
|
97
102
|
raise UserError, "Error merging #{File.basename(config_file)} and" +
|
98
103
|
"#{File.basename(local_config_file)}"
|
@@ -128,6 +133,40 @@ module Kitchen
|
|
128
133
|
File.join(File.expand_path(ENV["HOME"]), ".kitchen", "config.yml")
|
129
134
|
end
|
130
135
|
|
136
|
+
def failure_hash(e)
|
137
|
+
{
|
138
|
+
:error => {
|
139
|
+
:exception => e.inspect,
|
140
|
+
:message => e.message,
|
141
|
+
:backtrace => e.backtrace
|
142
|
+
}
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
def normalize(obj)
|
147
|
+
if obj.is_a?(Hash)
|
148
|
+
obj.inject(Hash.new) { |h, (k, v)| normalize_hash(h, k, v) ; h }
|
149
|
+
else
|
150
|
+
obj
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def normalize_hash(hash, key, value)
|
155
|
+
case key
|
156
|
+
when "driver", "provisioner", "busser"
|
157
|
+
hash[key] = if value.nil?
|
158
|
+
Hash.new
|
159
|
+
elsif value.is_a?(String)
|
160
|
+
default_key = key == "busser" ? "version" : "name"
|
161
|
+
{ default_key => value }
|
162
|
+
else
|
163
|
+
normalize(value)
|
164
|
+
end
|
165
|
+
else
|
166
|
+
hash[key] = normalize(value)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
131
170
|
def parse_yaml_string(string, file_name)
|
132
171
|
return Hash.new if string.nil? || string.empty?
|
133
172
|
|
@@ -355,13 +355,16 @@ module Kitchen
|
|
355
355
|
FileUtils.mkdir_p(tmpbooks_dir)
|
356
356
|
FileUtils.cp_r(File.join(cookbooks_dir, "."), tmpbooks_dir)
|
357
357
|
|
358
|
+
cp_site_cookbooks if File.directory?(site_cookbooks_dir)
|
359
|
+
cp_this_cookbook if File.exists?(metadata_rb)
|
360
|
+
end
|
361
|
+
|
362
|
+
def cp_site_cookbooks
|
358
363
|
info("Preparing site-cookbooks from project directory")
|
359
364
|
debug("Using cookbooks from #{site_cookbooks_dir}")
|
360
365
|
|
361
366
|
FileUtils.mkdir_p(tmpsitebooks_dir)
|
362
367
|
FileUtils.cp_r(File.join(site_cookbooks_dir, "."), tmpsitebooks_dir)
|
363
|
-
|
364
|
-
cp_this_cookbook if File.exists?(metadata_rb)
|
365
368
|
end
|
366
369
|
|
367
370
|
def cp_this_cookbook
|
data/lib/kitchen/ssh.rb
CHANGED
@@ -92,6 +92,7 @@ module Kitchen
|
|
92
92
|
def login_command
|
93
93
|
args = %W{ -o UserKnownHostsFile=/dev/null }
|
94
94
|
args += %W{ -o StrictHostKeyChecking=no }
|
95
|
+
args += %W{ -o IdentitiesOnly=yes } if options[:keys]
|
95
96
|
args += %W{ -o LogLevel=#{logger.debug? ? "VERBOSE" : "ERROR"} }
|
96
97
|
args += %W{ -o ForwardAgent=#{options[:forward_agent] ? "yes" : "no"} } if options.key? :forward_agent
|
97
98
|
Array(options[:keys]).each { |ssh_key| args += %W{ -i #{ssh_key}} }
|
data/lib/kitchen/version.rb
CHANGED
@@ -130,6 +130,138 @@ describe Kitchen::Loader::YAML do
|
|
130
130
|
loader.read.must_equal({ :common => { :thekey => 'kinda' } })
|
131
131
|
end
|
132
132
|
|
133
|
+
NORMALIZED_KEYS = {
|
134
|
+
"driver" => "name",
|
135
|
+
"provisioner" => "name",
|
136
|
+
"busser" => "version"
|
137
|
+
}
|
138
|
+
|
139
|
+
NORMALIZED_KEYS.each do |key, default_key|
|
140
|
+
|
141
|
+
describe "normalizing #{key} config hashes" do
|
142
|
+
|
143
|
+
it "merges local with #{key} string value over yaml with hash value" do
|
144
|
+
stub_yaml!(".kitchen.yml", {
|
145
|
+
key => { 'dakey' => 'ya' }
|
146
|
+
})
|
147
|
+
stub_yaml!(".kitchen.local.yml", {
|
148
|
+
key => 'namey'
|
149
|
+
})
|
150
|
+
|
151
|
+
loader.read.must_equal({
|
152
|
+
key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
|
153
|
+
})
|
154
|
+
end
|
155
|
+
|
156
|
+
it "merges local with #{key} hash value over yaml with string value" do
|
157
|
+
stub_yaml!(".kitchen.yml", {
|
158
|
+
key => 'namey'
|
159
|
+
})
|
160
|
+
stub_yaml!(".kitchen.local.yml", {
|
161
|
+
key => { 'dakey' => 'ya' }
|
162
|
+
})
|
163
|
+
|
164
|
+
loader.read.must_equal({
|
165
|
+
key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
|
166
|
+
})
|
167
|
+
end
|
168
|
+
|
169
|
+
it "merges local with #{key} nil value over yaml with hash value" do
|
170
|
+
stub_yaml!(".kitchen.yml", {
|
171
|
+
key => { 'dakey' => 'ya' }
|
172
|
+
})
|
173
|
+
stub_yaml!(".kitchen.local.yml", {
|
174
|
+
key => nil
|
175
|
+
})
|
176
|
+
|
177
|
+
loader.read.must_equal({
|
178
|
+
key.to_sym => { :dakey => 'ya' }
|
179
|
+
})
|
180
|
+
end
|
181
|
+
|
182
|
+
it "merges local with #{key} hash value over yaml with nil value" do
|
183
|
+
stub_yaml!(".kitchen.yml", {
|
184
|
+
key => 'namey'
|
185
|
+
})
|
186
|
+
stub_yaml!(".kitchen.local.yml", {
|
187
|
+
key => nil
|
188
|
+
})
|
189
|
+
|
190
|
+
loader.read.must_equal({
|
191
|
+
key.to_sym => { default_key.to_sym => "namey" }
|
192
|
+
})
|
193
|
+
end
|
194
|
+
|
195
|
+
it "merges global with #{key} string value over yaml with hash value" do
|
196
|
+
stub_yaml!(".kitchen.yml", {
|
197
|
+
key => { 'dakey' => 'ya' }
|
198
|
+
})
|
199
|
+
stub_global!({
|
200
|
+
key => 'namey'
|
201
|
+
})
|
202
|
+
|
203
|
+
loader.read.must_equal({
|
204
|
+
key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
|
205
|
+
})
|
206
|
+
end
|
207
|
+
|
208
|
+
it "merges global with #{key} hash value over yaml with string value" do
|
209
|
+
stub_yaml!(".kitchen.yml", {
|
210
|
+
key => 'namey'
|
211
|
+
})
|
212
|
+
stub_global!({
|
213
|
+
key => { 'dakey' => 'ya' }
|
214
|
+
})
|
215
|
+
|
216
|
+
loader.read.must_equal({
|
217
|
+
key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
|
218
|
+
})
|
219
|
+
end
|
220
|
+
|
221
|
+
it "merges global with #{key} nil value over yaml with hash value" do
|
222
|
+
stub_yaml!(".kitchen.yml", {
|
223
|
+
key => { 'dakey' => 'ya' }
|
224
|
+
})
|
225
|
+
stub_global!({
|
226
|
+
key => nil
|
227
|
+
})
|
228
|
+
|
229
|
+
loader.read.must_equal({
|
230
|
+
key.to_sym => { :dakey => 'ya' }
|
231
|
+
})
|
232
|
+
end
|
233
|
+
|
234
|
+
it "merges global with #{key} hash value over yaml with nil value" do
|
235
|
+
stub_yaml!(".kitchen.yml", {
|
236
|
+
key => nil
|
237
|
+
})
|
238
|
+
stub_global!({
|
239
|
+
key => { 'dakey' => 'ya' }
|
240
|
+
})
|
241
|
+
|
242
|
+
loader.read.must_equal({
|
243
|
+
key.to_sym => { :dakey => 'ya' }
|
244
|
+
})
|
245
|
+
end
|
246
|
+
|
247
|
+
it "merges global, local, over yaml with mixed hash, string, nil values" do
|
248
|
+
stub_yaml!(".kitchen.yml", {
|
249
|
+
key => nil
|
250
|
+
})
|
251
|
+
stub_yaml!(".kitchen.local.yml", {
|
252
|
+
key => "namey"
|
253
|
+
})
|
254
|
+
stub_global!({
|
255
|
+
key => { 'dakey' => 'ya' }
|
256
|
+
})
|
257
|
+
|
258
|
+
loader.read.must_equal({
|
259
|
+
key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
|
260
|
+
})
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
133
265
|
it "handles a kitchen.local.yml with no yaml elements" do
|
134
266
|
stub_yaml!(".kitchen.yml", {
|
135
267
|
'a' => 'b'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-kitchen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|