test-kitchen 1.14.1 → 1.14.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Berksfile +1 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/Guardfile +5 -5
- data/Rakefile +5 -5
- data/bin/kitchen +1 -1
- data/features/step_definitions/gem_steps.rb +6 -6
- data/features/support/env.rb +6 -7
- data/lib/kitchen.rb +5 -7
- data/lib/kitchen/base64_stream.rb +2 -8
- data/lib/kitchen/cli.rb +76 -80
- data/lib/kitchen/collection.rb +0 -2
- data/lib/kitchen/color.rb +7 -9
- data/lib/kitchen/command.rb +0 -4
- data/lib/kitchen/command/action.rb +0 -3
- data/lib/kitchen/command/console.rb +4 -7
- data/lib/kitchen/command/diagnose.rb +7 -14
- data/lib/kitchen/command/driver_discover.rb +1 -4
- data/lib/kitchen/command/exec.rb +0 -3
- data/lib/kitchen/command/list.rb +9 -12
- data/lib/kitchen/command/login.rb +0 -3
- data/lib/kitchen/command/package.rb +0 -3
- data/lib/kitchen/command/sink.rb +6 -9
- data/lib/kitchen/command/test.rb +1 -4
- data/lib/kitchen/config.rb +25 -27
- data/lib/kitchen/configurable.rb +26 -31
- data/lib/kitchen/data_munger.rb +34 -36
- data/lib/kitchen/diagnostic.rb +5 -7
- data/lib/kitchen/driver.rb +3 -5
- data/lib/kitchen/driver/base.rb +0 -3
- data/lib/kitchen/driver/dummy.rb +0 -3
- data/lib/kitchen/driver/proxy.rb +0 -3
- data/lib/kitchen/driver/ssh_base.rb +13 -16
- data/lib/kitchen/errors.rb +11 -16
- data/lib/kitchen/generator/driver_create.rb +18 -21
- data/lib/kitchen/generator/init.rb +21 -26
- data/lib/kitchen/instance.rb +19 -23
- data/lib/kitchen/lazy_hash.rb +1 -2
- data/lib/kitchen/loader/yaml.rb +22 -25
- data/lib/kitchen/logger.rb +9 -14
- data/lib/kitchen/logging.rb +0 -3
- data/lib/kitchen/login_command.rb +0 -2
- data/lib/kitchen/metadata_chopper.rb +0 -2
- data/lib/kitchen/platform.rb +1 -3
- data/lib/kitchen/provisioner.rb +3 -5
- data/lib/kitchen/provisioner/base.rb +2 -5
- data/lib/kitchen/provisioner/chef/berkshelf.rb +1 -5
- data/lib/kitchen/provisioner/chef/common_sandbox.rb +24 -29
- data/lib/kitchen/provisioner/chef/librarian.rb +2 -6
- data/lib/kitchen/provisioner/chef/policyfile.rb +4 -8
- data/lib/kitchen/provisioner/chef_apply.rb +14 -17
- data/lib/kitchen/provisioner/chef_base.rb +43 -46
- data/lib/kitchen/provisioner/chef_solo.rb +10 -13
- data/lib/kitchen/provisioner/chef_zero.rb +22 -29
- data/lib/kitchen/provisioner/dummy.rb +0 -3
- data/lib/kitchen/provisioner/shell.rb +6 -9
- data/lib/kitchen/rake_tasks.rb +4 -6
- data/lib/kitchen/shell_out.rb +3 -5
- data/lib/kitchen/ssh.rb +16 -22
- data/lib/kitchen/state_file.rb +3 -5
- data/lib/kitchen/suite.rb +0 -2
- data/lib/kitchen/thor_tasks.rb +2 -4
- data/lib/kitchen/transport.rb +3 -5
- data/lib/kitchen/transport/base.rb +1 -7
- data/lib/kitchen/transport/dummy.rb +0 -4
- data/lib/kitchen/transport/ssh.rb +41 -47
- data/lib/kitchen/transport/winrm.rb +41 -40
- data/lib/kitchen/util.rb +1 -3
- data/lib/kitchen/verifier.rb +3 -5
- data/lib/kitchen/verifier/base.rb +2 -5
- data/lib/kitchen/verifier/busser.rb +24 -24
- data/lib/kitchen/verifier/dummy.rb +0 -3
- data/lib/kitchen/verifier/shell.rb +1 -3
- data/lib/kitchen/version.rb +1 -1
- data/lib/vendor/hash_recursive_merge.rb +0 -2
- data/spec/kitchen/base64_stream_spec.rb +3 -6
- data/spec/kitchen/cli_spec.rb +0 -2
- data/spec/kitchen/collection_spec.rb +4 -8
- data/spec/kitchen/color_spec.rb +0 -3
- data/spec/kitchen/config_spec.rb +91 -106
- data/spec/kitchen/configurable_spec.rb +44 -76
- data/spec/kitchen/data_munger_spec.rb +1178 -1247
- data/spec/kitchen/diagnostic_spec.rb +37 -38
- data/spec/kitchen/driver/base_spec.rb +7 -14
- data/spec/kitchen/driver/dummy_spec.rb +1 -7
- data/spec/kitchen/driver/proxy_spec.rb +2 -7
- data/spec/kitchen/driver/ssh_base_spec.rb +128 -149
- data/spec/kitchen/driver_spec.rb +7 -13
- data/spec/kitchen/errors_spec.rb +50 -60
- data/spec/kitchen/instance_spec.rb +217 -294
- data/spec/kitchen/lazy_hash_spec.rb +14 -18
- data/spec/kitchen/loader/yaml_spec.rb +201 -227
- data/spec/kitchen/logger_spec.rb +7 -15
- data/spec/kitchen/logging_spec.rb +1 -4
- data/spec/kitchen/login_command_spec.rb +3 -4
- data/spec/kitchen/metadata_chopper_spec.rb +0 -3
- data/spec/kitchen/platform_spec.rb +31 -32
- data/spec/kitchen/provisioner/base_spec.rb +22 -41
- data/spec/kitchen/provisioner/chef/policyfile_spec.rb +15 -15
- data/spec/kitchen/provisioner/chef_apply_spec.rb +8 -13
- data/spec/kitchen/provisioner/chef_base_spec.rb +150 -182
- data/spec/kitchen/provisioner/chef_solo_spec.rb +58 -72
- data/spec/kitchen/provisioner/chef_zero_spec.rb +99 -125
- data/spec/kitchen/provisioner/dummy_spec.rb +8 -11
- data/spec/kitchen/provisioner/shell_spec.rb +86 -103
- data/spec/kitchen/provisioner_spec.rb +5 -11
- data/spec/kitchen/shell_out_spec.rb +15 -19
- data/spec/kitchen/ssh_spec.rb +16 -35
- data/spec/kitchen/state_file_spec.rb +6 -11
- data/spec/kitchen/suite_spec.rb +5 -6
- data/spec/kitchen/transport/base_spec.rb +6 -14
- data/spec/kitchen/transport/ssh_spec.rb +39 -64
- data/spec/kitchen/transport/winrm_spec.rb +99 -127
- data/spec/kitchen/transport_spec.rb +7 -13
- data/spec/kitchen/util_spec.rb +17 -26
- data/spec/kitchen/verifier/base_spec.rb +24 -40
- data/spec/kitchen/verifier/busser_spec.rb +38 -68
- data/spec/kitchen/verifier/dummy_spec.rb +8 -11
- data/spec/kitchen/verifier/shell_spec.rb +14 -17
- data/spec/kitchen/verifier_spec.rb +7 -13
- data/spec/kitchen_spec.rb +4 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/support/powershell_max_size_spec.rb +1 -2
- data/support/chef-client-zero.rb +3 -4
- data/test-kitchen.gemspec +4 -6
- metadata +9 -9
data/lib/kitchen/configurable.rb
CHANGED
@@ -21,14 +21,12 @@ require "thor/util"
|
|
21
21
|
require "kitchen/lazy_hash"
|
22
22
|
|
23
23
|
module Kitchen
|
24
|
-
|
25
24
|
# A mixin for providing configuration-related behavior such as default
|
26
25
|
# config (static, computed, inherited), required config, local path
|
27
26
|
# expansion, etc.
|
28
27
|
#
|
29
28
|
# @author Fletcher Nichol <fnichol@nichol.ca>
|
30
29
|
module Configurable
|
31
|
-
|
32
30
|
def self.included(base)
|
33
31
|
base.extend(ClassMethods)
|
34
32
|
end
|
@@ -46,9 +44,7 @@ module Kitchen
|
|
46
44
|
# @return [self] itself, for use in chaining
|
47
45
|
# @raise [ClientError] if instance parameter is nil
|
48
46
|
def finalize_config!(instance)
|
49
|
-
if instance.nil?
|
50
|
-
raise ClientError, "Instance must be provided to #{self}"
|
51
|
-
end
|
47
|
+
raise ClientError, "Instance must be provided to #{self}" if instance.nil?
|
52
48
|
|
53
49
|
@instance = instance
|
54
50
|
expand_paths!
|
@@ -102,7 +98,7 @@ module Kitchen
|
|
102
98
|
[
|
103
99
|
File.join(base, instance.suite.name, path),
|
104
100
|
File.join(base, path),
|
105
|
-
File.join(Dir.pwd, path)
|
101
|
+
File.join(Dir.pwd, path),
|
106
102
|
].find do |candidate|
|
107
103
|
type == :directory ? File.directory?(candidate) : File.file?(candidate)
|
108
104
|
end
|
@@ -119,7 +115,7 @@ module Kitchen
|
|
119
115
|
#
|
120
116
|
# @return [Hash] a diagnostic hash
|
121
117
|
def diagnose
|
122
|
-
result =
|
118
|
+
result = {}
|
123
119
|
config_keys.sort.each { |k| result[k] = config[k] }
|
124
120
|
result
|
125
121
|
end
|
@@ -130,7 +126,7 @@ module Kitchen
|
|
130
126
|
#
|
131
127
|
# @return [Hash] a diagnostic hash
|
132
128
|
def diagnose_plugin
|
133
|
-
result =
|
129
|
+
result = {}
|
134
130
|
result[:name] = name
|
135
131
|
result.merge!(self.class.diagnose)
|
136
132
|
result
|
@@ -153,7 +149,7 @@ module Kitchen
|
|
153
149
|
# @return [String] joined path for instance's os_type
|
154
150
|
def remote_path_join(*parts)
|
155
151
|
path = File.join(*parts)
|
156
|
-
windows_os? ? path.
|
152
|
+
windows_os? ? path.tr("/", '\\') : path.tr('\\', "/")
|
157
153
|
end
|
158
154
|
|
159
155
|
# @return [TrueClass,FalseClass] true if `:os_type` is `"unix"` (or
|
@@ -210,10 +206,10 @@ module Kitchen
|
|
210
206
|
next if !should_expand || config[key].nil? || config[key] == false
|
211
207
|
|
212
208
|
config[key] = if config[key].is_a?(Array)
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
209
|
+
config[key].map { |path| File.expand_path(path, root_path) }
|
210
|
+
else
|
211
|
+
File.expand_path(config[key], root_path)
|
212
|
+
end
|
217
213
|
end
|
218
214
|
end
|
219
215
|
|
@@ -256,7 +252,7 @@ module Kitchen
|
|
256
252
|
[
|
257
253
|
"$env:PATH = try {",
|
258
254
|
"[System.Environment]::GetEnvironmentVariable('PATH','Machine')",
|
259
|
-
"} catch { $env:PATH }\n\n"
|
255
|
+
"} catch { $env:PATH }\n\n",
|
260
256
|
].join("\n")
|
261
257
|
end
|
262
258
|
|
@@ -329,8 +325,8 @@ module Kitchen
|
|
329
325
|
if !config.key?(protocol) || config[protocol].nil?
|
330
326
|
export_proxy(set_env, protocol)
|
331
327
|
elsif proxy_config_setting_present?(protocol)
|
332
|
-
set_env << shell_env_var(
|
333
|
-
set_env << shell_env_var(
|
328
|
+
set_env << shell_env_var(protocol.downcase.to_s, config[protocol])
|
329
|
+
set_env << shell_env_var(protocol.upcase.to_s, config[protocol])
|
334
330
|
end
|
335
331
|
end
|
336
332
|
end
|
@@ -356,7 +352,7 @@ module Kitchen
|
|
356
352
|
|
357
353
|
def proxy_from_environment?
|
358
354
|
proxy_setting_keys.any? do |protocol|
|
359
|
-
!ENV[
|
355
|
+
!ENV[protocol.downcase.to_s].nil? || !ENV[protocol.upcase.to_s].nil?
|
360
356
|
end
|
361
357
|
end
|
362
358
|
|
@@ -370,14 +366,13 @@ module Kitchen
|
|
370
366
|
# @param code [String] the type of proxy to export, one of 'http', 'https' or 'ftp'
|
371
367
|
# @api private
|
372
368
|
def export_proxy(env, type)
|
373
|
-
env << shell_env_var(
|
374
|
-
env << shell_env_var(
|
375
|
-
ENV[
|
369
|
+
env << shell_env_var(type.to_s, ENV[type.to_s]) if ENV[type.to_s]
|
370
|
+
env << shell_env_var(type.upcase.to_s, ENV[type.upcase.to_s]) if
|
371
|
+
ENV[type.upcase.to_s]
|
376
372
|
end
|
377
373
|
|
378
374
|
# Class methods which will be mixed in on inclusion of Configurable module.
|
379
375
|
module ClassMethods
|
380
|
-
|
381
376
|
# Sets the loaded version of this plugin, usually corresponding to the
|
382
377
|
# RubyGems version of the plugin's library. If the plugin does not set
|
383
378
|
# this value, then `nil` will be used and reported.
|
@@ -407,9 +402,9 @@ module Kitchen
|
|
407
402
|
# @return [Hash] a diagnostic hash
|
408
403
|
def diagnose
|
409
404
|
{
|
410
|
-
:
|
411
|
-
:
|
412
|
-
:
|
405
|
+
class: name,
|
406
|
+
version: @plugin_version,
|
407
|
+
api_version: @api_version,
|
413
408
|
}
|
414
409
|
end
|
415
410
|
|
@@ -489,7 +484,7 @@ module Kitchen
|
|
489
484
|
# @yieldparam value [Object] the current value of the attribute
|
490
485
|
# @yieldparam object [Object] a reference to the instantiated object
|
491
486
|
def required_config(attr, &block)
|
492
|
-
|
487
|
+
unless block_given?
|
493
488
|
klass = self
|
494
489
|
block = lambda do |_, value, thing|
|
495
490
|
if value.nil? || value.to_s.empty?
|
@@ -505,7 +500,7 @@ module Kitchen
|
|
505
500
|
# been merged with any superclass defaults
|
506
501
|
# @api private
|
507
502
|
def defaults
|
508
|
-
@defaults ||=
|
503
|
+
@defaults ||= {}.merge(super_defaults)
|
509
504
|
end
|
510
505
|
|
511
506
|
# @return [Hash] a hash of defaults from the included class' superclass
|
@@ -515,7 +510,7 @@ module Kitchen
|
|
515
510
|
if superclass.respond_to?(:defaults)
|
516
511
|
superclass.defaults
|
517
512
|
else
|
518
|
-
|
513
|
+
{}
|
519
514
|
end
|
520
515
|
end
|
521
516
|
|
@@ -524,7 +519,7 @@ module Kitchen
|
|
524
519
|
# which has been merged with any superclass expanded paths
|
525
520
|
# @api private
|
526
521
|
def expanded_paths
|
527
|
-
@expanded_paths ||=
|
522
|
+
@expanded_paths ||= {}.merge(super_expanded_paths)
|
528
523
|
end
|
529
524
|
|
530
525
|
# @return [Hash] a hash of expanded paths from the included class'
|
@@ -534,7 +529,7 @@ module Kitchen
|
|
534
529
|
if superclass.respond_to?(:expanded_paths)
|
535
530
|
superclass.expanded_paths
|
536
531
|
else
|
537
|
-
|
532
|
+
{}
|
538
533
|
end
|
539
534
|
end
|
540
535
|
|
@@ -542,7 +537,7 @@ module Kitchen
|
|
542
537
|
# which has been merged with any superclass valudations
|
543
538
|
# @api private
|
544
539
|
def validations
|
545
|
-
@validations ||=
|
540
|
+
@validations ||= {}.merge(super_validations)
|
546
541
|
end
|
547
542
|
|
548
543
|
# @return [Hash] a hash of validations from the included class'
|
@@ -552,7 +547,7 @@ module Kitchen
|
|
552
547
|
if superclass.respond_to?(:validations)
|
553
548
|
superclass.validations
|
554
549
|
else
|
555
|
-
|
550
|
+
{}
|
556
551
|
end
|
557
552
|
end
|
558
553
|
end
|
data/lib/kitchen/data_munger.rb
CHANGED
@@ -19,7 +19,6 @@
|
|
19
19
|
require "vendor/hash_recursive_merge"
|
20
20
|
|
21
21
|
module Kitchen
|
22
|
-
|
23
22
|
# Class to handle recursive merging of configuration between platforms,
|
24
23
|
# suites, and common data.
|
25
24
|
#
|
@@ -32,7 +31,6 @@ module Kitchen
|
|
32
31
|
#
|
33
32
|
# @author Fletcher Nichol <fnichol@nichol.ca>
|
34
33
|
class DataMunger
|
35
|
-
|
36
34
|
# Constructs a new DataMunger object.
|
37
35
|
#
|
38
36
|
# @param data [Hash] the incoming user data hash
|
@@ -135,9 +133,9 @@ module Kitchen
|
|
135
133
|
|
136
134
|
def combine_arrays!(root, key, *namespaces)
|
137
135
|
if root.key?(key)
|
138
|
-
root[key] = namespaces
|
139
|
-
|
140
|
-
|
136
|
+
root[key] = namespaces
|
137
|
+
.map { |namespace| root.fetch(key).fetch(namespace, []) }.flatten
|
138
|
+
.compact
|
141
139
|
end
|
142
140
|
end
|
143
141
|
|
@@ -219,11 +217,11 @@ module Kitchen
|
|
219
217
|
def convert_legacy_busser_format_at!(root)
|
220
218
|
if root.key?(:busser)
|
221
219
|
bdata = root.delete(:busser)
|
222
|
-
bdata = { :
|
220
|
+
bdata = { version: bdata } if bdata.is_a?(String)
|
223
221
|
bdata[:name] = "busser" if bdata[:name].nil?
|
224
222
|
|
225
|
-
vdata = root.fetch(:verifier,
|
226
|
-
vdata = { :
|
223
|
+
vdata = root.fetch(:verifier, {})
|
224
|
+
vdata = { name: vdata } if vdata.is_a?(String)
|
227
225
|
root[:verifier] = bdata.rmerge(vdata)
|
228
226
|
end
|
229
227
|
end
|
@@ -275,10 +273,10 @@ module Kitchen
|
|
275
273
|
# @api private
|
276
274
|
def convert_legacy_chef_paths_format!
|
277
275
|
data.fetch(:suites, []).each do |suite|
|
278
|
-
%w
|
276
|
+
%w{
|
279
277
|
data data_bags encrypted_data_bag_secret_key
|
280
278
|
environments nodes roles
|
281
|
-
|
279
|
+
}.each do |key|
|
282
280
|
move_chef_data_to_provisioner_at!(suite, "#{key}_path".to_sym)
|
283
281
|
end
|
284
282
|
end
|
@@ -364,15 +362,15 @@ module Kitchen
|
|
364
362
|
# @api private
|
365
363
|
def convert_legacy_driver_format_at!(root)
|
366
364
|
if root.key?(:driver_config)
|
367
|
-
ddata = root.fetch(:driver,
|
368
|
-
ddata = { :
|
365
|
+
ddata = root.fetch(:driver, {})
|
366
|
+
ddata = { name: ddata } if ddata.is_a?(String)
|
369
367
|
root[:driver] = root.delete(:driver_config).rmerge(ddata)
|
370
368
|
end
|
371
369
|
|
372
370
|
if root.key?(:driver_plugin)
|
373
|
-
ddata = root.fetch(:driver,
|
374
|
-
ddata = { :
|
375
|
-
root[:driver] = { :
|
371
|
+
ddata = root.fetch(:driver, {})
|
372
|
+
ddata = { name: ddata } if ddata.is_a?(String)
|
373
|
+
root[:driver] = { name: root.delete(:driver_plugin) }.rmerge(ddata)
|
376
374
|
end
|
377
375
|
end
|
378
376
|
|
@@ -485,17 +483,17 @@ module Kitchen
|
|
485
483
|
# longer are Drivers responsible for this.
|
486
484
|
# @api private
|
487
485
|
def convert_legacy_driver_http_proxy_format_at!(root)
|
488
|
-
ddata = root.fetch(:driver,
|
486
|
+
ddata = root.fetch(:driver, {})
|
489
487
|
|
490
488
|
[:http_proxy, :https_proxy].each do |key|
|
491
489
|
next unless ddata.is_a?(Hash) && ddata.key?(key)
|
492
490
|
|
493
|
-
pdata = root.fetch(:provisioner,
|
494
|
-
pdata = { :
|
491
|
+
pdata = root.fetch(:provisioner, {})
|
492
|
+
pdata = { name: pdata } if pdata.is_a?(String)
|
495
493
|
root[:provisioner] = { key => ddata.fetch(key) }.rmerge(pdata)
|
496
494
|
|
497
|
-
vdata = root.fetch(:verifier,
|
498
|
-
vdata = { :
|
495
|
+
vdata = root.fetch(:verifier, {})
|
496
|
+
vdata = { name: vdata } if vdata.is_a?(String)
|
499
497
|
root[:verifier] = { key => ddata.fetch(key) }.rmerge(vdata)
|
500
498
|
end
|
501
499
|
end
|
@@ -581,11 +579,11 @@ module Kitchen
|
|
581
579
|
# @api private
|
582
580
|
def convert_legacy_require_chef_omnibus_format_at!(root)
|
583
581
|
key = :require_chef_omnibus
|
584
|
-
ddata = root.fetch(:driver,
|
582
|
+
ddata = root.fetch(:driver, {})
|
585
583
|
|
586
584
|
if ddata.is_a?(Hash) && ddata.key?(key)
|
587
|
-
pdata = root.fetch(:provisioner,
|
588
|
-
pdata = { :
|
585
|
+
pdata = root.fetch(:provisioner, {})
|
586
|
+
pdata = { name: pdata } if pdata.is_a?(String)
|
589
587
|
root[:provisioner] =
|
590
588
|
{ key => root.fetch(:driver).delete(key) }.rmerge(pdata)
|
591
589
|
end
|
@@ -699,9 +697,9 @@ module Kitchen
|
|
699
697
|
# @api private
|
700
698
|
def move_chef_data_to_provisioner_at!(root, key)
|
701
699
|
if root.key?(key)
|
702
|
-
pdata = root.fetch(:provisioner,
|
703
|
-
pdata = { :
|
704
|
-
|
700
|
+
pdata = root.fetch(:provisioner, {})
|
701
|
+
pdata = { name: pdata } if pdata.is_a?(String)
|
702
|
+
unless root.fetch(key, nil).nil?
|
705
703
|
root[:provisioner] = pdata.rmerge(key => root.delete(key))
|
706
704
|
end
|
707
705
|
end
|
@@ -755,8 +753,8 @@ module Kitchen
|
|
755
753
|
# new Hash otherwise
|
756
754
|
# @api private
|
757
755
|
def normalized_common_data(key, default_key)
|
758
|
-
cdata = data.fetch(key,
|
759
|
-
cdata = cdata.nil? ?
|
756
|
+
cdata = data.fetch(key, {})
|
757
|
+
cdata = cdata.nil? ? {} : cdata.dup
|
760
758
|
cdata = { default_key => cdata } if cdata.is_a?(String)
|
761
759
|
cdata
|
762
760
|
end
|
@@ -799,7 +797,7 @@ module Kitchen
|
|
799
797
|
# new Hash otherwise
|
800
798
|
# @api private
|
801
799
|
def normalized_default_data(key, default_key, suite, platform)
|
802
|
-
ddata = kitchen_config.fetch(:defaults,
|
800
|
+
ddata = kitchen_config.fetch(:defaults, {}).fetch(key, {}).dup
|
803
801
|
ddata = { default_key => ddata.call(suite, platform) } if ddata.is_a?(Proc)
|
804
802
|
ddata = { default_key => ddata } if ddata.is_a?(String)
|
805
803
|
ddata
|
@@ -853,8 +851,8 @@ module Kitchen
|
|
853
851
|
# new Hash otherwise
|
854
852
|
# @api private
|
855
853
|
def normalized_platform_data(key, default_key, platform)
|
856
|
-
pdata = platform_data_for(platform).fetch(key,
|
857
|
-
pdata = pdata.nil? ?
|
854
|
+
pdata = platform_data_for(platform).fetch(key, {})
|
855
|
+
pdata = pdata.nil? ? {} : pdata.dup
|
858
856
|
pdata = { default_key => pdata } if pdata.is_a?(String)
|
859
857
|
namespace_array!(pdata, :run_list, :platform)
|
860
858
|
pdata
|
@@ -908,8 +906,8 @@ module Kitchen
|
|
908
906
|
# new Hash otherwise
|
909
907
|
# @api private
|
910
908
|
def normalized_suite_data(key, default_key, suite)
|
911
|
-
sdata = suite_data_for(suite).fetch(key,
|
912
|
-
sdata = sdata.nil? ?
|
909
|
+
sdata = suite_data_for(suite).fetch(key, {})
|
910
|
+
sdata = sdata.nil? ? {} : sdata.dup
|
913
911
|
sdata = { default_key => sdata } if sdata.is_a?(String)
|
914
912
|
namespace_array!(sdata, :run_list, :suite)
|
915
913
|
sdata
|
@@ -923,7 +921,7 @@ module Kitchen
|
|
923
921
|
# Hash if not found
|
924
922
|
# @api private
|
925
923
|
def platform_data_for(name)
|
926
|
-
data.fetch(:platforms,
|
924
|
+
data.fetch(:platforms, {}).find(-> { Hash.new }) do |platform|
|
927
925
|
platform.fetch(:name, nil) == name
|
928
926
|
end
|
929
927
|
end
|
@@ -939,7 +937,7 @@ module Kitchen
|
|
939
937
|
# @param key [Symbol] the key to search for
|
940
938
|
# @api private
|
941
939
|
def set_kitchen_config_at!(root, key)
|
942
|
-
kdata = data.fetch(:kitchen,
|
940
|
+
kdata = data.fetch(:kitchen, {})
|
943
941
|
|
944
942
|
root.delete(key) if root.key?(key)
|
945
943
|
root[key] = kitchen_config.fetch(key) if kitchen_config.key?(key)
|
@@ -954,7 +952,7 @@ module Kitchen
|
|
954
952
|
# Hash if not found
|
955
953
|
# @api private
|
956
954
|
def suite_data_for(name)
|
957
|
-
data.fetch(:suites,
|
955
|
+
data.fetch(:suites, {}).find(-> { Hash.new }) do |suite|
|
958
956
|
suite.fetch(:name, nil) == name
|
959
957
|
end
|
960
958
|
end
|
data/lib/kitchen/diagnostic.rb
CHANGED
@@ -20,13 +20,11 @@ require "kitchen/util"
|
|
20
20
|
require "kitchen/version"
|
21
21
|
|
22
22
|
module Kitchen
|
23
|
-
|
24
23
|
# Combines and compiles diagnostic information about a Test Kitchen
|
25
24
|
# configuration suitable for support and troubleshooting.
|
26
25
|
#
|
27
26
|
# @author Fletcher Nichol <fnichol@nichol.ca>
|
28
27
|
class Diagnostic
|
29
|
-
|
30
28
|
# Constructs a new Diagnostic object with an optional loader and optional
|
31
29
|
# instances array.
|
32
30
|
#
|
@@ -41,7 +39,7 @@ module Kitchen
|
|
41
39
|
@loader = options.fetch(:loader, nil)
|
42
40
|
@instances = options.fetch(:instances, [])
|
43
41
|
@plugins = options.fetch(:plugins, false)
|
44
|
-
@result =
|
42
|
+
@result = {}
|
45
43
|
end
|
46
44
|
|
47
45
|
# Returns a Hash with stringified keys containing diagnostic information.
|
@@ -98,12 +96,12 @@ module Kitchen
|
|
98
96
|
return unless @plugins
|
99
97
|
|
100
98
|
if error_hash?(instances)
|
101
|
-
result[:plugins] = { :
|
99
|
+
result[:plugins] = { error: instances[:error] }
|
102
100
|
elsif instances.empty?
|
103
|
-
result[:plugins] =
|
101
|
+
result[:plugins] = {}
|
104
102
|
else
|
105
103
|
plugins = {
|
106
|
-
:
|
104
|
+
driver: [], provisioner: [], transport: [], verifier: []
|
107
105
|
}
|
108
106
|
instances.map(&:diagnose_plugins).each do |plugin_hash|
|
109
107
|
plugin_hash.each { |type, plugin| plugins[type] << plugin }
|
@@ -120,7 +118,7 @@ module Kitchen
|
|
120
118
|
#
|
121
119
|
# @api private
|
122
120
|
def prepare_instances
|
123
|
-
result[:instances] =
|
121
|
+
result[:instances] = {}
|
124
122
|
if error_hash?(instances)
|
125
123
|
result[:instances][:error] = instances[:error]
|
126
124
|
else
|
data/lib/kitchen/driver.rb
CHANGED
@@ -19,13 +19,11 @@
|
|
19
19
|
require "thor/util"
|
20
20
|
|
21
21
|
module Kitchen
|
22
|
-
|
23
22
|
# A driver is responsible for carrying out the lifecycle activities of an
|
24
23
|
# instance, such as creating and destroying an instance.
|
25
24
|
#
|
26
25
|
# @author Fletcher Nichol <fnichol@nichol.ca>
|
27
26
|
module Driver
|
28
|
-
|
29
27
|
# Default driver plugin to use
|
30
28
|
DEFAULT_PLUGIN = "dummy".freeze
|
31
29
|
|
@@ -48,9 +46,9 @@ module Kitchen
|
|
48
46
|
raise
|
49
47
|
rescue LoadError, NameError
|
50
48
|
raise ClientError,
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
"Could not load the '#{plugin}' driver from the load path." \
|
50
|
+
" Please ensure that your driver is installed as a gem or included" \
|
51
|
+
" in your Gemfile if using Bundler."
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|