test-kitchen 1.25.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kitchen/cli.rb +0 -5
- data/lib/kitchen/command.rb +0 -1
- data/lib/kitchen/instance.rb +0 -1
- data/lib/kitchen/loader/yaml.rb +1 -8
- data/lib/kitchen/provisioner/base.rb +0 -6
- data/lib/kitchen/provisioner/chef/common_sandbox.rb +5 -25
- data/lib/kitchen/provisioner/chef/policyfile.rb +3 -3
- data/lib/kitchen/provisioner/chef_apply.rb +0 -1
- data/lib/kitchen/provisioner/chef_base.rb +5 -66
- data/lib/kitchen/provisioner/chef_solo.rb +2 -17
- data/lib/kitchen/provisioner/chef_zero.rb +2 -73
- data/lib/kitchen/transport/ssh.rb +16 -4
- data/lib/kitchen/verifier/busser.rb +1 -1
- data/lib/kitchen/version.rb +1 -1
- data/test-kitchen.gemspec +5 -9
- metadata +4 -28
- data/lib/kitchen/provisioner/chef/librarian.rb +0 -112
- data/support/chef-client-zero.rb +0 -76
- data/support/chef_zero_prepare_command_legacy.ps1 +0 -9
- data/support/chef_zero_prepare_command_legacy.sh +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77640b7351ca31e3fb82454cc038bf093358b16f6a1d98275d28cf7ae8a91d65
|
4
|
+
data.tar.gz: fb58807514c09100fd70489fc7db56d305b505f0ee3d44c2a504ccc9cadab23a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b047ad7cab30721bb5f39921a70436938eda6359aa0e397b2598df284d53e175f87e9e25cf9fa589131ff474382013ea36a2e26736dd011405e23a86d3d16c6d
|
7
|
+
data.tar.gz: 0b64d308b0eec60811dff865b52f5f77f9403799e117e82d21c3f77e93ffe2cdefcb10fa49146afc6dc051d85cc452085752aec544ab552e89f1041db65d349d
|
data/lib/kitchen/cli.rb
CHANGED
@@ -186,11 +186,6 @@ module Kitchen
|
|
186
186
|
default: false,
|
187
187
|
desc: "Run the #{action} with debugging enabled."
|
188
188
|
end
|
189
|
-
method_option :fail_fast,
|
190
|
-
aliases: "-f",
|
191
|
-
type: :boolean,
|
192
|
-
desc: "Fail immediately when errors occur in concurrency mode"
|
193
|
-
|
194
189
|
test_base_path
|
195
190
|
log_options
|
196
191
|
define_method(action) do |*args|
|
data/lib/kitchen/command.rb
CHANGED
data/lib/kitchen/instance.rb
CHANGED
data/lib/kitchen/loader/yaml.rb
CHANGED
@@ -352,14 +352,7 @@ module Kitchen
|
|
352
352
|
def parse_yaml_string(string, file_name)
|
353
353
|
return {} if string.nil? || string.empty?
|
354
354
|
|
355
|
-
result =
|
356
|
-
if Gem::Requirement.new(">= 3.1.0").satisfied_by?(Gem::Version.new(Psych::VERSION))
|
357
|
-
# ruby >= 2.6.0
|
358
|
-
::YAML.safe_load(string, permitted_classes: [Symbol], permitted_symbols: [], aliases: true) || {}
|
359
|
-
else
|
360
|
-
# ruby < 2.6.0
|
361
|
-
::YAML.safe_load(string, [Symbol], [], true) || {}
|
362
|
-
end
|
355
|
+
result = ::YAML.safe_load(string, [Symbol], [], true) || {}
|
363
356
|
unless result.is_a?(Hash)
|
364
357
|
raise UserError, "Error parsing #{file_name} as YAML " \
|
365
358
|
"(Result of parse was not a Hash, but was a #{result.class}).\n" \
|
@@ -105,12 +105,6 @@ module Kitchen
|
|
105
105
|
false
|
106
106
|
end
|
107
107
|
|
108
|
-
# Certain products that Test Kitchen uses to provision require accepting
|
109
|
-
# a license to use. Overwrite this method in the specific provisioner
|
110
|
-
# to implement this check.
|
111
|
-
def check_license
|
112
|
-
end
|
113
|
-
|
114
108
|
# Generates a command string which will install and configure the
|
115
109
|
# provisioner software on an instance. If no work is required, then `nil`
|
116
110
|
# will be returned.
|
@@ -89,22 +89,14 @@ module Kitchen
|
|
89
89
|
# @api private
|
90
90
|
def policyfile
|
91
91
|
basename = config[:policyfile_path] || config[:policyfile] || "Policyfile.rb"
|
92
|
-
File.
|
92
|
+
File.join(config[:kitchen_root], basename)
|
93
93
|
end
|
94
94
|
|
95
95
|
# @return [String] an absolute path to a Berksfile, relative to the
|
96
96
|
# kitchen root
|
97
97
|
# @api private
|
98
98
|
def berksfile
|
99
|
-
|
100
|
-
File.expand_path(basename, config[:kitchen_root])
|
101
|
-
end
|
102
|
-
|
103
|
-
# @return [String] an absolute path to a Cheffile, relative to the
|
104
|
-
# kitchen root
|
105
|
-
# @api private
|
106
|
-
def cheffile
|
107
|
-
File.join(config[:kitchen_root], "Cheffile")
|
99
|
+
File.join(config[:kitchen_root], "Berksfile")
|
108
100
|
end
|
109
101
|
|
110
102
|
# @return [String] an absolute path to a cookbooks/ directory, relative
|
@@ -180,8 +172,8 @@ module Kitchen
|
|
180
172
|
#
|
181
173
|
# @api private
|
182
174
|
def make_fake_cookbook
|
183
|
-
info("
|
184
|
-
"so Chef
|
175
|
+
info("Berksfile, cookbooks/, or metadata.rb not found " \
|
176
|
+
"so Chef will run with effectively no cookbooks. Is this intended?")
|
185
177
|
name = File.basename(config[:kitchen_root])
|
186
178
|
fake_cb = File.join(tmpbooks_dir, name)
|
187
179
|
FileUtils.mkdir_p(fake_cb)
|
@@ -258,9 +250,6 @@ module Kitchen
|
|
258
250
|
resolve_with_policyfile
|
259
251
|
elsif File.exist?(berksfile)
|
260
252
|
resolve_with_berkshelf
|
261
|
-
elsif File.exist?(cheffile)
|
262
|
-
resolve_with_librarian
|
263
|
-
cp_site_cookbooks if File.directory?(site_cookbooks_dir)
|
264
253
|
elsif File.directory?(cookbooks_dir)
|
265
254
|
cp_cookbooks
|
266
255
|
elsif File.exist?(metadata_rb)
|
@@ -293,7 +282,7 @@ module Kitchen
|
|
293
282
|
|
294
283
|
def update_dna_for_policyfile
|
295
284
|
if !config[:run_list].nil? && !config[:run_list].empty?
|
296
|
-
warn("You must set your run_list in your
|
285
|
+
warn("You must set your run_list in your policyfile instead of "\
|
297
286
|
"kitchen config. The run_list in your config will be ignored.")
|
298
287
|
warn("Ignored run_list: #{config[:run_list].inspect}")
|
299
288
|
end
|
@@ -330,15 +319,6 @@ module Kitchen
|
|
330
319
|
end
|
331
320
|
end
|
332
321
|
|
333
|
-
# Performs a Librarin-Chef cookbook resolution inside a common mutex.
|
334
|
-
#
|
335
|
-
# @api private
|
336
|
-
def resolve_with_librarian
|
337
|
-
Kitchen.mutex.synchronize do
|
338
|
-
Chef::Librarian.new(cheffile, tmpbooks_dir, logger: logger).resolve
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
322
|
# @return [String] an absolute path to a site-cookbooks/ directory,
|
343
323
|
# relative to the kitchen root
|
344
324
|
# @api private
|
@@ -87,7 +87,7 @@ module Kitchen
|
|
87
87
|
|
88
88
|
private
|
89
89
|
|
90
|
-
# @return [String] path to a
|
90
|
+
# @return [String] path to a Berksfile
|
91
91
|
# @api private
|
92
92
|
attr_reader :policyfile
|
93
93
|
|
@@ -139,8 +139,8 @@ module Kitchen
|
|
139
139
|
File.exist?(File.join(p, "chef"))
|
140
140
|
end
|
141
141
|
logger.fatal("The `chef` executable cannot be found in your " \
|
142
|
-
"PATH. Ensure you have installed ChefDK
|
143
|
-
"
|
142
|
+
"PATH. Ensure you have installed ChefDK from " \
|
143
|
+
"https://downloads.chef.io and that your PATH " \
|
144
144
|
"setting includes the path to the `chef` comand.")
|
145
145
|
raise UserError,
|
146
146
|
"Could not find the chef executable in your PATH."
|
@@ -24,11 +24,9 @@ require "cgi"
|
|
24
24
|
require "kitchen/provisioner/chef/policyfile"
|
25
25
|
require "kitchen/provisioner/chef/berkshelf"
|
26
26
|
require "kitchen/provisioner/chef/common_sandbox"
|
27
|
-
require "kitchen/provisioner/chef/librarian"
|
28
27
|
require "kitchen/util"
|
29
28
|
require "mixlib/install"
|
30
29
|
require "mixlib/install/script_generator"
|
31
|
-
require "license_acceptance/acceptor"
|
32
30
|
|
33
31
|
begin
|
34
32
|
require "chef-config/config"
|
@@ -46,7 +44,6 @@ module Kitchen
|
|
46
44
|
default_config :require_chef_omnibus, true
|
47
45
|
default_config :chef_omnibus_url, "https://omnitruck.chef.io/install.sh"
|
48
46
|
default_config :chef_omnibus_install_options, nil
|
49
|
-
default_config :chef_license, nil
|
50
47
|
default_config :run_list, []
|
51
48
|
default_config :attributes, {}
|
52
49
|
default_config :config_path, nil
|
@@ -60,9 +57,6 @@ module Kitchen
|
|
60
57
|
# Will try to autodetect by searching for `Policyfile.rb` if not set.
|
61
58
|
# If set, will error if the file doesn't exist.
|
62
59
|
default_config :policyfile_path, nil
|
63
|
-
# Will try to autodetect by searching for `Berksfile` if not set.
|
64
|
-
# If set, will error if the file doesn't exist.
|
65
|
-
default_config :berksfile_path, nil
|
66
60
|
# If set to true (which is the default from `chef generate`), try to update
|
67
61
|
# backend cookbook downloader on every kitchen run.
|
68
62
|
default_config :always_update_cookbooks, false
|
@@ -249,43 +243,6 @@ module Kitchen
|
|
249
243
|
end
|
250
244
|
end
|
251
245
|
|
252
|
-
# gives us the product version from either require_chef_omnibus or product_version
|
253
|
-
# If the non-default (true) value of require_chef_omnibus is present use that
|
254
|
-
# otherwise use config[:product_version] which defaults to :latest and is the actual
|
255
|
-
# default for chef provisioners
|
256
|
-
#
|
257
|
-
# @return [String,Symbol,NilClass] version or nil if not applicable
|
258
|
-
def product_version
|
259
|
-
case config[:require_chef_omnibus]
|
260
|
-
when FalseClass
|
261
|
-
nil
|
262
|
-
when TrueClass
|
263
|
-
config[:product_version]
|
264
|
-
else
|
265
|
-
config[:require_chef_omnibus]
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
# (see Base#check_license)
|
270
|
-
def check_license
|
271
|
-
name = config[:product_name] || "chef"
|
272
|
-
version = product_version
|
273
|
-
debug("Checking if we need to prompt for license acceptance on product: #{name} version: #{version}.")
|
274
|
-
|
275
|
-
acceptor = LicenseAcceptance::Acceptor.new(logger: Kitchen.logger, provided: config[:chef_license])
|
276
|
-
if acceptor.license_required?(name, version)
|
277
|
-
debug("License acceptance required for #{name} version: #{version}. Prompting")
|
278
|
-
license_id = acceptor.id_from_mixlib(name)
|
279
|
-
begin
|
280
|
-
acceptor.check_and_persist(license_id, version.to_s)
|
281
|
-
rescue LicenseAcceptance::LicenseNotAcceptedError => e
|
282
|
-
error("Cannot converge without accepting the #{e.product.pretty_name} License. Set it in your kitchen.yml or using the CHEF_LICENSE environment variable")
|
283
|
-
raise
|
284
|
-
end
|
285
|
-
config[:chef_license] ||= acceptor.acceptance_value
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
246
|
# (see Base#create_sandbox)
|
290
247
|
def create_sandbox
|
291
248
|
super
|
@@ -358,22 +315,14 @@ module Kitchen
|
|
358
315
|
# @api private
|
359
316
|
def policyfile
|
360
317
|
policyfile_basename = config[:policyfile_path] || config[:policyfile] || "Policyfile.rb"
|
361
|
-
File.
|
318
|
+
File.join(config[:kitchen_root], policyfile_basename)
|
362
319
|
end
|
363
320
|
|
364
321
|
# @return [String] an absolute path to a Berksfile, relative to the
|
365
322
|
# kitchen root
|
366
323
|
# @api private
|
367
324
|
def berksfile
|
368
|
-
|
369
|
-
File.expand_path(berksfile_basename, config[:kitchen_root])
|
370
|
-
end
|
371
|
-
|
372
|
-
# @return [String] an absolute path to a Cheffile, relative to the
|
373
|
-
# kitchen root
|
374
|
-
# @api private
|
375
|
-
def cheffile
|
376
|
-
File.join(config[:kitchen_root], "Cheffile")
|
325
|
+
File.join(config[:kitchen_root], "Berksfile")
|
377
326
|
end
|
378
327
|
|
379
328
|
# Generates a Hash with default values for a solo.rb or client.rb Chef
|
@@ -384,7 +333,7 @@ module Kitchen
|
|
384
333
|
def default_config_rb # rubocop:disable Metrics/MethodLength
|
385
334
|
root = config[:root_path].gsub("$env:TEMP", "\#{ENV['TEMP']\}")
|
386
335
|
|
387
|
-
|
336
|
+
{
|
388
337
|
node_name: instance.name,
|
389
338
|
checksum_path: remote_path_join(root, "checksums"),
|
390
339
|
file_cache_path: remote_path_join(root, "cache"),
|
@@ -407,8 +356,6 @@ module Kitchen
|
|
407
356
|
),
|
408
357
|
treat_deprecation_warnings_as_errors: config[:deprecations_as_errors],
|
409
358
|
}
|
410
|
-
config_rb[:chef_license] = config[:chef_license] unless config[:chef_license].nil?
|
411
|
-
config_rb
|
412
359
|
end
|
413
360
|
|
414
361
|
# Generates a rendered client.rb/solo.rb/knife.rb formatted file as a
|
@@ -477,9 +424,6 @@ module Kitchen
|
|
477
424
|
elsif File.exist?(berksfile)
|
478
425
|
debug("Berksfile found at #{berksfile}, using Berkshelf to resolve cookbook dependencies")
|
479
426
|
Chef::Berkshelf.load!(logger: logger)
|
480
|
-
elsif File.exist?(cheffile)
|
481
|
-
debug("Cheffile found at #{cheffile}, loading Librarian-Chef")
|
482
|
-
Chef::Librarian.load!(logger: logger)
|
483
427
|
end
|
484
428
|
end
|
485
429
|
|
@@ -582,18 +526,13 @@ module Kitchen
|
|
582
526
|
if (config[:policyfile_path] || config[:policyfile]) && !File.exist?(policyfile)
|
583
527
|
raise UserError, "policyfile_path set in config "\
|
584
528
|
"(#{config[:policyfile_path]} could not be found. " \
|
585
|
-
"Expected to find it at full path #{policyfile}
|
586
|
-
end
|
587
|
-
if config[:berksfile_path] && !File.exist?(berksfile)
|
588
|
-
raise UserError, "berksfile_path set in config "\
|
589
|
-
"(#{config[:berksfile_path]} could not be found. " \
|
590
|
-
"Expected to find it at full path #{berksfile}."
|
529
|
+
"Expected to find it at full path #{policyfile} " \
|
591
530
|
end
|
592
531
|
if File.exist?(policyfile) && !supports_policyfile?
|
593
532
|
raise UserError, "policyfile detected, but provisioner " \
|
594
533
|
"#{self.class.name} doesn't support Policyfiles. " \
|
595
534
|
"Either use a different provisioner, or delete/rename " \
|
596
|
-
"#{policyfile}
|
535
|
+
"#{policyfile}"
|
597
536
|
end
|
598
537
|
end
|
599
538
|
|
@@ -47,24 +47,8 @@ module Kitchen
|
|
47
47
|
prepare_config_rb
|
48
48
|
end
|
49
49
|
|
50
|
-
def modern?
|
51
|
-
version = config[:require_chef_omnibus]
|
52
|
-
|
53
|
-
case version
|
54
|
-
when nil, false, true, 11, "11", "latest"
|
55
|
-
true
|
56
|
-
else
|
57
|
-
if Gem::Version.correct?(version)
|
58
|
-
Gem::Version.new(version) >= Gem::Version.new("11.0") ? true : false
|
59
|
-
else
|
60
|
-
true
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
50
|
# (see Base#run_command)
|
66
51
|
def run_command
|
67
|
-
config[:log_level] = "info" if !modern? && config[:log_level] == "auto"
|
68
52
|
cmd = sudo(config[:chef_solo_path]).dup
|
69
53
|
.tap { |str| str.insert(0, "& ") if powershell_shell? }
|
70
54
|
|
@@ -81,13 +65,14 @@ module Kitchen
|
|
81
65
|
args = [
|
82
66
|
"--config #{remote_path_join(config[:root_path], solo_rb_filename)}",
|
83
67
|
"--log_level #{config[:log_level]}",
|
68
|
+
"--force-formatter",
|
84
69
|
"--no-color",
|
85
70
|
"--json-attributes #{remote_path_join(config[:root_path], 'dna.json')}",
|
86
71
|
]
|
87
|
-
args << " --force-formatter" if modern?
|
88
72
|
args << "--logfile #{config[:log_file]}" if config[:log_file]
|
89
73
|
args << "--profile-ruby" if config[:profile_ruby]
|
90
74
|
args << "--legacy-mode" if config[:legacy_mode]
|
75
|
+
|
91
76
|
args
|
92
77
|
end
|
93
78
|
end
|
@@ -48,28 +48,12 @@ module Kitchen
|
|
48
48
|
# (see Base#create_sandbox)
|
49
49
|
def create_sandbox
|
50
50
|
super
|
51
|
-
prepare_chef_client_zero_rb
|
52
51
|
prepare_validation_pem
|
53
52
|
prepare_config_rb
|
54
53
|
end
|
55
54
|
|
56
|
-
# (see Base#prepare_command)
|
57
|
-
def prepare_command
|
58
|
-
return if modern?
|
59
|
-
|
60
|
-
gem_bin = remote_path_join(config[:ruby_bindir], "gem")
|
61
|
-
.tap { |path| path.concat(".bat") if windows_os? }
|
62
|
-
vars = [
|
63
|
-
chef_client_zero_env,
|
64
|
-
shell_var("gem", sudo(gem_bin)),
|
65
|
-
].join("\n").concat("\n")
|
66
|
-
|
67
|
-
prefix_command(shell_code_from_file(vars, "chef_zero_prepare_command_legacy"))
|
68
|
-
end
|
69
|
-
|
70
|
-
# (see Base#run_command)
|
71
55
|
def run_command
|
72
|
-
cmd =
|
56
|
+
cmd = "#{sudo(config[:chef_client_path])} --local-mode".tap { |str| str.insert(0, "& ") if powershell_shell? }
|
73
57
|
|
74
58
|
chef_cmd(cmd)
|
75
59
|
end
|
@@ -88,9 +72,8 @@ module Kitchen
|
|
88
72
|
args << "--json-attributes #{json}"
|
89
73
|
end
|
90
74
|
args << "--logfile #{config[:log_file]}" if config[:log_file]
|
91
|
-
return unless modern?
|
92
75
|
|
93
|
-
# these flags are
|
76
|
+
# these flags are chef-client local mode only and will not work
|
94
77
|
# on older versions of chef-client
|
95
78
|
if config[:chef_zero_host]
|
96
79
|
args << "--chef-zero-host #{config[:chef_zero_host]}"
|
@@ -137,60 +120,6 @@ module Kitchen
|
|
137
120
|
].join("\n").concat("\n")
|
138
121
|
end
|
139
122
|
|
140
|
-
# Returns the command that will run chef client in local mode (a.k.a.
|
141
|
-
# chef zero mode).
|
142
|
-
#
|
143
|
-
# @return [String] the command string
|
144
|
-
# @api private
|
145
|
-
def local_mode_command
|
146
|
-
"#{sudo(config[:chef_client_path])} --local-mode"
|
147
|
-
.tap { |str| str.insert(0, "& ") if powershell_shell? }
|
148
|
-
end
|
149
|
-
|
150
|
-
# Determines whether or not local mode (a.k.a chef zero mode) is
|
151
|
-
# supported in the version of Chef as determined by inspecting the
|
152
|
-
# require_chef_omnibus config variable.
|
153
|
-
#
|
154
|
-
# The only way this method returns false is if require_chef_omnibus has
|
155
|
-
# an explicit version set to less than 11.8.0, when chef zero mode was
|
156
|
-
# introduced. Otherwise a modern Chef installation is assumed.
|
157
|
-
#
|
158
|
-
# @return [true,false] whether or not the desired version of Chef
|
159
|
-
# supports local mode
|
160
|
-
# @api private
|
161
|
-
def modern?
|
162
|
-
version = config[:require_chef_omnibus]
|
163
|
-
|
164
|
-
case version
|
165
|
-
when nil, false, true, 11, "11", "latest"
|
166
|
-
true
|
167
|
-
else
|
168
|
-
if Gem::Version.correct?(version)
|
169
|
-
Gem::Version.new(version) >= Gem::Version.new("11.8.0") ? true : false
|
170
|
-
else
|
171
|
-
# Build versions of chef, for example
|
172
|
-
# 12.5.0-current.0+20150721082808.git.14.c91b337-1
|
173
|
-
true
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
# Writes a chef-client local-mode shim script to the sandbox directory
|
179
|
-
# only if the desired version of Chef is old enough. The version of Chef
|
180
|
-
# is determined using the `config[:require_chef_omnibus]` value.
|
181
|
-
#
|
182
|
-
# @api private
|
183
|
-
def prepare_chef_client_zero_rb
|
184
|
-
return if modern?
|
185
|
-
|
186
|
-
info("Preparing chef-client-zero.rb")
|
187
|
-
debug("Using a vendored chef-client-zero.rb")
|
188
|
-
|
189
|
-
source = File.join(File.dirname(__FILE__),
|
190
|
-
%w{.. .. .. support chef-client-zero.rb})
|
191
|
-
FileUtils.cp(source, File.join(sandbox_path, "chef-client-zero.rb"))
|
192
|
-
end
|
193
|
-
|
194
123
|
# Writes a fake (but valid) validation.pem into the sandbox directory.
|
195
124
|
#
|
196
125
|
# @api private
|
@@ -232,7 +232,7 @@ module Kitchen
|
|
232
232
|
Errno::EACCES, Errno::EALREADY, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
|
233
233
|
Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH, Errno::EPIPE,
|
234
234
|
Net::SSH::Disconnect, Net::SSH::AuthenticationFailed, Net::SSH::ConnectionTimeout,
|
235
|
-
|
235
|
+
Timeout::Error
|
236
236
|
].freeze
|
237
237
|
|
238
238
|
# @return [Integer] cap on number of parallel ssh sessions we can use
|
@@ -498,9 +498,9 @@ module Kitchen
|
|
498
498
|
opts[:forward_agent] = data[:forward_agent] if data.key?(:forward_agent)
|
499
499
|
opts[:verbose] = data[:verbose].to_sym if data.key?(:verbose)
|
500
500
|
|
501
|
-
# disable host key verification. The hash key to use
|
502
|
-
#
|
503
|
-
opts[verify_host_key_option] =
|
501
|
+
# disable host key verification. The hash key and value to use
|
502
|
+
# depend on the version of net-ssh in use
|
503
|
+
opts[verify_host_key_option] = verify_host_key_value
|
504
504
|
|
505
505
|
opts
|
506
506
|
end
|
@@ -524,6 +524,18 @@ module Kitchen
|
|
524
524
|
current_net_ssh >= new_option_version ? :verify_host_key : :paranoid
|
525
525
|
end
|
526
526
|
|
527
|
+
#
|
528
|
+
# Returns the correct host-key-verification option value to use depending
|
529
|
+
# on what version of net-ssh is in use. In net-ssh <= 5, the supported
|
530
|
+
# parameter is false but in 5.0, it became `:never`
|
531
|
+
#
|
532
|
+
def verify_host_key_value
|
533
|
+
current_net_ssh = Net::SSH::Version::CURRENT
|
534
|
+
new_option_version = Net::SSH::Version[5, 0, 0]
|
535
|
+
|
536
|
+
current_net_ssh >= new_option_version ? :never : false
|
537
|
+
end
|
538
|
+
|
527
539
|
# Creates a new SSH Connection instance and save it for potential future
|
528
540
|
# reuse.
|
529
541
|
#
|
@@ -182,7 +182,7 @@ module Kitchen
|
|
182
182
|
# to be under /tmp/verifier
|
183
183
|
args = gem
|
184
184
|
args += " --version #{version}" if version
|
185
|
-
args += " --no-
|
185
|
+
args += " --no-rdoc --no-ri --no-format-executable -n #{gem_bin}"
|
186
186
|
args += " --no-user-install"
|
187
187
|
args
|
188
188
|
end
|
data/lib/kitchen/version.rb
CHANGED
data/test-kitchen.gemspec
CHANGED
@@ -24,18 +24,14 @@ Gem::Specification.new do |gem|
|
|
24
24
|
gem.required_ruby_version = ">= 2.3"
|
25
25
|
|
26
26
|
gem.add_dependency "mixlib-shellout", ">= 1.2", "< 3.0"
|
27
|
-
gem.add_dependency "net-scp",
|
28
|
-
gem.add_dependency "net-ssh",
|
27
|
+
gem.add_dependency "net-scp", ">= 1.1", "< 3.0" # pinning until we can confirm 3+ works
|
28
|
+
gem.add_dependency "net-ssh", ">= 2.9", "< 6.0" # pinning until we can confirm 6+ works
|
29
29
|
gem.add_dependency "net-ssh-gateway", ">= 1.2", "< 3.0" # pinning until we can confirm 3+ works
|
30
30
|
gem.add_dependency "thor", "~> 0.19"
|
31
31
|
gem.add_dependency "mixlib-install", "~> 3.6"
|
32
|
-
gem.add_dependency "winrm",
|
33
|
-
gem.add_dependency "winrm-elevated",
|
34
|
-
gem.add_dependency "winrm-fs",
|
35
|
-
|
36
|
-
# Required to run the Chef provisioner local license check for remote systems
|
37
|
-
# TK is not under Chef EULA
|
38
|
-
gem.add_dependency "license-acceptance", "~> 1.0", ">= 1.0.11"
|
32
|
+
gem.add_dependency "winrm", "~> 2.0"
|
33
|
+
gem.add_dependency "winrm-elevated", "~> 1.0"
|
34
|
+
gem.add_dependency "winrm-fs", "~> 1.1"
|
39
35
|
|
40
36
|
gem.add_development_dependency "rb-readline"
|
41
37
|
gem.add_development_dependency "bundler"
|
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
version: '2.9'
|
60
60
|
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '6.0'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
version: '2.9'
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
72
|
+
version: '6.0'
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: net-ssh-gateway
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,26 +160,6 @@ dependencies:
|
|
160
160
|
- - "~>"
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '1.1'
|
163
|
-
- !ruby/object:Gem::Dependency
|
164
|
-
name: license-acceptance
|
165
|
-
requirement: !ruby/object:Gem::Requirement
|
166
|
-
requirements:
|
167
|
-
- - "~>"
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: '1.0'
|
170
|
-
- - ">="
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: 1.0.11
|
173
|
-
type: :runtime
|
174
|
-
prerelease: false
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
176
|
-
requirements:
|
177
|
-
- - "~>"
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version: '1.0'
|
180
|
-
- - ">="
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: 1.0.11
|
183
163
|
- !ruby/object:Gem::Dependency
|
184
164
|
name: rb-readline
|
185
165
|
requirement: !ruby/object:Gem::Requirement
|
@@ -381,7 +361,6 @@ files:
|
|
381
361
|
- lib/kitchen/provisioner/base.rb
|
382
362
|
- lib/kitchen/provisioner/chef/berkshelf.rb
|
383
363
|
- lib/kitchen/provisioner/chef/common_sandbox.rb
|
384
|
-
- lib/kitchen/provisioner/chef/librarian.rb
|
385
364
|
- lib/kitchen/provisioner/chef/policyfile.rb
|
386
365
|
- lib/kitchen/provisioner/chef_apply.rb
|
387
366
|
- lib/kitchen/provisioner/chef_base.rb
|
@@ -412,13 +391,10 @@ files:
|
|
412
391
|
- support/busser_install_command.ps1
|
413
392
|
- support/busser_install_command.sh
|
414
393
|
- support/chef-client-fail-if-update-handler.rb
|
415
|
-
- support/chef-client-zero.rb
|
416
394
|
- support/chef_base_init_command.ps1
|
417
395
|
- support/chef_base_init_command.sh
|
418
396
|
- support/chef_base_install_command.ps1
|
419
397
|
- support/chef_base_install_command.sh
|
420
|
-
- support/chef_zero_prepare_command_legacy.ps1
|
421
|
-
- support/chef_zero_prepare_command_legacy.sh
|
422
398
|
- support/download_helpers.sh
|
423
399
|
- support/dummy-validation.pem
|
424
400
|
- templates/driver/CHANGELOG.md.erb
|
@@ -1,112 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
4
|
-
#
|
5
|
-
# Copyright (C) 2013, Fletcher Nichol
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require "kitchen/errors"
|
20
|
-
require "kitchen/logging"
|
21
|
-
|
22
|
-
module Kitchen
|
23
|
-
module Provisioner
|
24
|
-
module Chef
|
25
|
-
# Chef cookbook resolver that uses Librarian-Chef and a Cheffile to
|
26
|
-
# calculate dependencies.
|
27
|
-
#
|
28
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
29
|
-
class Librarian
|
30
|
-
include Logging
|
31
|
-
|
32
|
-
# Creates a new cookbook resolver.
|
33
|
-
#
|
34
|
-
# @param cheffile [String] path to a Cheffile
|
35
|
-
# @param path [String] path in which to vendor the resulting
|
36
|
-
# cookbooks
|
37
|
-
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
38
|
-
# to `Kitchen.logger`
|
39
|
-
def initialize(cheffile, path, logger: Kitchen.logger)
|
40
|
-
@cheffile = cheffile
|
41
|
-
@path = path
|
42
|
-
@logger = logger
|
43
|
-
end
|
44
|
-
|
45
|
-
# Loads the library code required to use the resolver.
|
46
|
-
#
|
47
|
-
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
48
|
-
# to `Kitchen.logger`
|
49
|
-
def self.load!(logger: Kitchen.logger)
|
50
|
-
load_librarian!(logger)
|
51
|
-
end
|
52
|
-
|
53
|
-
# Performs the cookbook resolution and vendors the resulting cookbooks
|
54
|
-
# in the desired path.
|
55
|
-
def resolve
|
56
|
-
version = ::Librarian::Chef::VERSION
|
57
|
-
info("Resolving cookbook dependencies with Librarian-Chef #{version}...")
|
58
|
-
debug("Using Cheffile from #{cheffile}")
|
59
|
-
|
60
|
-
env = ::Librarian::Chef::Environment.new(
|
61
|
-
project_path: File.dirname(cheffile))
|
62
|
-
env.config_db.local["path"] = path
|
63
|
-
::Librarian::Action::Resolve.new(env).run
|
64
|
-
::Librarian::Action::Install.new(env).run
|
65
|
-
end
|
66
|
-
|
67
|
-
private
|
68
|
-
|
69
|
-
# @return [String] path to a Cheffile
|
70
|
-
# @api private
|
71
|
-
attr_reader :cheffile
|
72
|
-
|
73
|
-
# @return [String] path in which to vendor the resulting cookbooks
|
74
|
-
# @api private
|
75
|
-
attr_reader :path
|
76
|
-
|
77
|
-
# @return [Kitchen::Logger] a logger to use for output
|
78
|
-
# @api private
|
79
|
-
attr_reader :logger
|
80
|
-
|
81
|
-
class << self
|
82
|
-
private
|
83
|
-
|
84
|
-
# Load the Librarian-specific libary code.
|
85
|
-
#
|
86
|
-
# @param logger [Kitchen::Logger] the logger to use
|
87
|
-
# @raise [UserError] if the library couldn't be loaded
|
88
|
-
# @api private
|
89
|
-
def load_librarian!(logger)
|
90
|
-
first_load = require "librarian/chef/environment"
|
91
|
-
require "librarian/action/resolve"
|
92
|
-
require "librarian/action/install"
|
93
|
-
|
94
|
-
version = ::Librarian::Chef::VERSION
|
95
|
-
if first_load
|
96
|
-
logger.debug("Librarian-Chef #{version} library loaded")
|
97
|
-
else
|
98
|
-
logger.debug("Librarian-Chef #{version} previously loaded")
|
99
|
-
end
|
100
|
-
rescue LoadError => e
|
101
|
-
logger.fatal("The `librarian-chef' gem is missing and must be installed" \
|
102
|
-
" or cannot be properly activated. Run" \
|
103
|
-
" `gem install librarian-chef` or add the following to your" \
|
104
|
-
" Gemfile if you are using Bundler: `gem 'librarian-chef'`.")
|
105
|
-
raise UserError,
|
106
|
-
"Could not load or activate Librarian-Chef (#{e.message})"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
data/support/chef-client-zero.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# -*- encoding: utf-8 -*-
|
3
|
-
#
|
4
|
-
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
5
|
-
#
|
6
|
-
# Copyright (C) 2013, Fletcher Nichol
|
7
|
-
#
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
-
# you may not use this file except in compliance with the License.
|
10
|
-
# You may obtain a copy of the License at
|
11
|
-
#
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
-
#
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
-
# See the License for the specific language governing permissions and
|
18
|
-
# limitations under the License.
|
19
|
-
|
20
|
-
require "rubygems"
|
21
|
-
require "chef/config"
|
22
|
-
require "chef_zero/server"
|
23
|
-
require "chef/chef_fs/chef_fs_data_store"
|
24
|
-
require "chef/chef_fs/config"
|
25
|
-
require "English"
|
26
|
-
require "fileutils"
|
27
|
-
|
28
|
-
# Bust out of our self-imposed sandbox before running chef-client so
|
29
|
-
# gems installed via gem_package land in Chef's GEM_HOME.
|
30
|
-
#
|
31
|
-
# https://github.com/chef/test-kitchen/issues/240
|
32
|
-
#
|
33
|
-
ENV["GEM_HOME"] = ENV["GEM_PATH"] = ENV["GEM_CACHE"] = nil
|
34
|
-
|
35
|
-
class ChefClientZero
|
36
|
-
def self.start
|
37
|
-
new.run
|
38
|
-
end
|
39
|
-
|
40
|
-
def run
|
41
|
-
create_chef_zero_server
|
42
|
-
run_chef_client
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def create_chef_zero_server
|
48
|
-
Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(repo_path)
|
49
|
-
|
50
|
-
chef_fs = Chef::ChefFS::Config.new.local_fs
|
51
|
-
chef_fs.write_pretty_json = true
|
52
|
-
|
53
|
-
@server = ChefZero::Server.new(
|
54
|
-
generate_real_keys: false,
|
55
|
-
data_store: Chef::ChefFS::ChefFSDataStore.new(chef_fs)
|
56
|
-
)
|
57
|
-
puts "-----> Starting Chef Zero server in #{chef_fs.fs_description}"
|
58
|
-
@server.start_background
|
59
|
-
|
60
|
-
at_exit do
|
61
|
-
puts "-----> Shutting down Chef Zero server"
|
62
|
-
@server.stop
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def repo_path
|
67
|
-
ENV.fetch("CHEF_REPO_PATH", Dir.pwd)
|
68
|
-
end
|
69
|
-
|
70
|
-
def run_chef_client
|
71
|
-
system("chef-client", *ARGV)
|
72
|
-
raise if $CHILD_STATUS != 0
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
ChefClientZero.start
|
@@ -1,9 +0,0 @@
|
|
1
|
-
# we are installing the first version of chef that bundled chef-zero in order
|
2
|
-
# to get chef-zero and Chef::ChefFS only. The version of Chef that gets run
|
3
|
-
# will be the installed omnibus package. Yep, this is funky :)
|
4
|
-
|
5
|
-
if ((& "$gem" list chef-zero -i) -ne "true") {
|
6
|
-
Write-Host ">>>>>> Attempting to use chef-zero with old version of Chef`n"
|
7
|
-
Write-Host "-----> Installing chef zero dependencies`n"
|
8
|
-
& "$gem" install chef --version 11.8.0 --no-ri --no-rdoc --conservative
|
9
|
-
}
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# we are installing the first version of chef that bundled chef-zero in order
|
2
|
-
# to get chef-zero and Chef::ChefFS only. The version of Chef that gets run
|
3
|
-
# will be the installed omnibus package. Yep, this is funky :)
|
4
|
-
|
5
|
-
$gem list chef-zero -i 2>&1 >/dev/null
|
6
|
-
if test $? -ne 0 ; then
|
7
|
-
echo ">>>>>> Attempting to use chef-zero with old version of Chef"
|
8
|
-
echo "-----> Installing chef zero dependencies"
|
9
|
-
$gem install chef --version 11.8.0 --no-ri --no-rdoc --conservative
|
10
|
-
fi
|