test-kitchen 1.10.2 → 1.11.0
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/.kitchen.ci.yml +1 -1
- data/Berksfile +1 -1
- data/CHANGELOG.md +17 -0
- data/Gemfile +1 -7
- data/MAINTAINERS.md +1 -0
- data/Rakefile +2 -17
- data/lib/kitchen/cli.rb +1 -0
- data/lib/kitchen/configurable.rb +5 -1
- data/lib/kitchen/provisioner/chef/policyfile.rb +29 -3
- data/lib/kitchen/provisioner/chef_solo.rb +21 -4
- data/lib/kitchen/transport/ssh.rb +79 -10
- data/lib/kitchen/version.rb +1 -1
- data/spec/kitchen/configurable_spec.rb +49 -2
- data/spec/kitchen/provisioner/chef/policyfile_spec.rb +140 -0
- data/spec/kitchen/provisioner/chef_solo_spec.rb +22 -0
- data/spec/kitchen/transport/ssh_spec.rb +58 -0
- data/test-kitchen.gemspec +1 -1
- data/test/cookbooks/test_cookbook/metadata.rb +6 -0
- data/test/cookbooks/test_cookbook/recipes/default.rb +1 -0
- data/test/integration/default/default_spec.rb +2 -2
- metadata +23 -19
- data/.cane +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18c07230017975d3394e829c8325bce98a9d29e7
|
4
|
+
data.tar.gz: 7beebf652866a5046898dcb9b0b21ac5b82d4e8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 197303853148d6c9f2ca5add5d67c6683089bc4dd26cefb7e5b22b3b6f612adb68b82146027acaee6fdba7091bb5b49371429f0ecc1b92f8cb42c2895762b04e
|
7
|
+
data.tar.gz: 03bd9a05645d7e5860cf72a99569dd6b57fd7fdd795c90cc004b247eeccce3be31c9ae3b1b94aa6b5102bdaad494bb096cb667d6619f46afa362f83f6a833c4a
|
data/.kitchen.ci.yml
CHANGED
data/Berksfile
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [v1.11.0](https://github.com/test-kitchen/test-kitchen/tree/v1.11.0) (2016-08-11)
|
4
|
+
[Full Changelog](https://github.com/test-kitchen/test-kitchen/compare/v1.10.2...v1.11.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Provide some way for Chef to know it's running under test [\#458](https://github.com/test-kitchen/test-kitchen/issues/458)
|
9
|
+
- Dont set ssh key configuration if a password is specified [\#1095](https://github.com/test-kitchen/test-kitchen/pull/1095) ([mwrock](https://github.com/mwrock))
|
10
|
+
- Ability to work with Instances over SSH tunnel. [\#1091](https://github.com/test-kitchen/test-kitchen/pull/1091) ([EYurchenko](https://github.com/EYurchenko))
|
11
|
+
- Add environment variables $TEST\_KITCHEN and $CI [\#1081](https://github.com/test-kitchen/test-kitchen/pull/1081) ([coderanger](https://github.com/coderanger))
|
12
|
+
- Adding test\_base\_path CLI arg to the diagnose command [\#1076](https://github.com/test-kitchen/test-kitchen/pull/1076) ([tyler-ball](https://github.com/tyler-ball))
|
13
|
+
- Add legacy\_mode argument for chef\_solo provisioner [\#1073](https://github.com/test-kitchen/test-kitchen/pull/1073) ([SaltwaterC](https://github.com/SaltwaterC))
|
14
|
+
- Added support for Chef 10 [\#1072](https://github.com/test-kitchen/test-kitchen/pull/1072) ([acondrat](https://github.com/acondrat))
|
15
|
+
|
16
|
+
**Fixed bugs:**
|
17
|
+
|
18
|
+
- Escape paths before running policyfile commands [\#1085](https://github.com/test-kitchen/test-kitchen/pull/1085) ([coderanger](https://github.com/coderanger))
|
19
|
+
|
3
20
|
## [v1.10.2](https://github.com/test-kitchen/test-kitchen/tree/v1.10.2) (2016-06-23)
|
4
21
|
[Full Changelog](https://github.com/test-kitchen/test-kitchen/compare/v1.10.1...v1.10.2)
|
5
22
|
|
data/Gemfile
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
source "https://rubygems.org"
|
3
3
|
gemspec
|
4
|
-
|
5
|
-
group :guard do
|
6
|
-
gem "guard-minitest"
|
7
|
-
gem "guard-cucumber", "~> 1.4"
|
8
|
-
gem "guard-rubocop"
|
9
|
-
gem "guard-yard"
|
10
|
-
end
|
4
|
+
gem "rack", "< 2.0"
|
11
5
|
|
12
6
|
group :integration do
|
13
7
|
gem "berkshelf", "~> 4.3"
|
data/MAINTAINERS.md
CHANGED
@@ -20,6 +20,7 @@ receive a veto from the Lieutenant or the Project Lead.
|
|
20
20
|
* [Kimball Johnson](https://github.com/drrk)
|
21
21
|
* [Lamont Granquist](https://github.com/lamont-granquist)
|
22
22
|
* [Matt Wrock](https://github.com/mwrock)
|
23
|
+
* [Noah Kantrowitz](https://github.com/coderanger)
|
23
24
|
* [Robb Kidd](https://github.com/robbkidd)
|
24
25
|
* [Sean Omeara](http://github.com/someara)
|
25
26
|
* [Steven Murawski](http://github.com/smurawski)
|
data/Rakefile
CHANGED
@@ -40,23 +40,8 @@ rescue LoadError
|
|
40
40
|
puts "finstyle/rubocop is not available. gem install finstyle to do style checking."
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
require "cane/rake_task"
|
46
|
-
desc "Run cane to check quality metrics"
|
47
|
-
Cane::RakeTask.new do |cane|
|
48
|
-
cane.canefile = "./.cane"
|
49
|
-
end
|
50
|
-
|
51
|
-
desc "Run all quality tasks"
|
52
|
-
task :quality => [:cane, :style, :stats]
|
53
|
-
else
|
54
|
-
desc "Run all quality tasks"
|
55
|
-
task :quality => [:style, :stats]
|
56
|
-
end
|
57
|
-
rescue LoadError
|
58
|
-
puts "cane is not available. (sudo) gem install cane to check quality metrics."
|
59
|
-
end
|
43
|
+
desc "Run all quality tasks"
|
44
|
+
task :quality => [:style, :stats]
|
60
45
|
|
61
46
|
begin
|
62
47
|
require "yard"
|
data/lib/kitchen/cli.rb
CHANGED
data/lib/kitchen/configurable.rb
CHANGED
@@ -312,7 +312,11 @@ module Kitchen
|
|
312
312
|
end
|
313
313
|
|
314
314
|
def env_wrapped(code)
|
315
|
-
|
315
|
+
code_parts = proxy_settings
|
316
|
+
code_parts << shell_env_var("TEST_KITCHEN", 1)
|
317
|
+
code_parts << shell_env_var("CI", ENV["CI"]) if ENV["CI"]
|
318
|
+
code_parts << code
|
319
|
+
code_parts.join("\n")
|
316
320
|
end
|
317
321
|
|
318
322
|
def proxy_setting_keys
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
|
+
require "shellwords"
|
20
|
+
require "rbconfig"
|
21
|
+
|
19
22
|
require "kitchen/errors"
|
20
23
|
require "kitchen/logging"
|
21
24
|
require "kitchen/shell_out"
|
@@ -36,7 +39,7 @@ module Kitchen
|
|
36
39
|
|
37
40
|
# Creates a new cookbook resolver.
|
38
41
|
#
|
39
|
-
# @param
|
42
|
+
# @param policyfile [String] path to a Policyfile
|
40
43
|
# @param path [String] path in which to vendor the resulting
|
41
44
|
# cookbooks
|
42
45
|
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
@@ -59,7 +62,7 @@ module Kitchen
|
|
59
62
|
# in the desired path.
|
60
63
|
def resolve
|
61
64
|
info("Exporting cookbook dependencies from Policyfile #{path}...")
|
62
|
-
run_command("chef export #{policyfile} #{path} --force")
|
65
|
+
run_command("chef export #{escape_path(policyfile)} #{escape_path(path)} --force")
|
63
66
|
end
|
64
67
|
|
65
68
|
# Runs `chef install` to determine the correct cookbook set and
|
@@ -67,7 +70,7 @@ module Kitchen
|
|
67
70
|
def compile
|
68
71
|
info("Policy lock file doesn't exist, running `chef install` for "\
|
69
72
|
"Policyfile #{policyfile}...")
|
70
|
-
run_command("chef install #{policyfile}")
|
73
|
+
run_command("chef install #{escape_path(policyfile)}")
|
71
74
|
end
|
72
75
|
|
73
76
|
private
|
@@ -101,6 +104,29 @@ module Kitchen
|
|
101
104
|
"Could not find the chef executable in your PATH."
|
102
105
|
end
|
103
106
|
end
|
107
|
+
|
108
|
+
# Escape spaces in a path in way that works with both Sh (Unix) and
|
109
|
+
# Windows.
|
110
|
+
#
|
111
|
+
# @param path [String] Path to escape
|
112
|
+
# @return [String]
|
113
|
+
# @api private
|
114
|
+
def escape_path(path)
|
115
|
+
if RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
|
116
|
+
# I know what you're thinking: "just use Shellwords.escape". That
|
117
|
+
# method produces incorrect results on Windows with certain input
|
118
|
+
# which would be a metacharacter in Sh but is not for one or more of
|
119
|
+
# Windows command line parsing libraries. This covers the 99% case of
|
120
|
+
# spaces in the path without breaking other stuff.
|
121
|
+
if path =~ /[ \t\n\v"]/
|
122
|
+
"\"#{path.gsub(/[ \t\n\v\"\\]/) { |m| "\\" + m[0] }}\""
|
123
|
+
else
|
124
|
+
path
|
125
|
+
end
|
126
|
+
else
|
127
|
+
Shellwords.escape(path)
|
128
|
+
end
|
129
|
+
end
|
104
130
|
end
|
105
131
|
end
|
106
132
|
end
|
@@ -45,20 +45,37 @@ module Kitchen
|
|
45
45
|
prepare_solo_rb
|
46
46
|
end
|
47
47
|
|
48
|
+
def modern?
|
49
|
+
version = config[:require_chef_omnibus]
|
50
|
+
|
51
|
+
case version
|
52
|
+
when nil, false, true, 11, "11", "latest"
|
53
|
+
true
|
54
|
+
else
|
55
|
+
if Gem::Version.correct?(version)
|
56
|
+
Gem::Version.new(version) >= Gem::Version.new("11.0") ? true : false
|
57
|
+
else
|
58
|
+
true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
48
63
|
# (see Base#run_command)
|
49
|
-
|
50
|
-
|
64
|
+
# rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize
|
65
|
+
def run_command
|
66
|
+
config[:log_level] = "info" if !modern? && config[:log_level] = "auto"
|
51
67
|
cmd = sudo(config[:chef_solo_path]).dup.
|
52
68
|
tap { |str| str.insert(0, "& ") if powershell_shell? }
|
53
69
|
args = [
|
54
70
|
"--config #{remote_path_join(config[:root_path], "solo.rb")}",
|
55
|
-
"--log_level #{
|
56
|
-
"--force-formatter",
|
71
|
+
"--log_level #{config[:log_level]}",
|
57
72
|
"--no-color",
|
58
73
|
"--json-attributes #{remote_path_join(config[:root_path], "dna.json")}"
|
59
74
|
]
|
75
|
+
args << " --force-formatter" if modern?
|
60
76
|
args << "--logfile #{config[:log_file]}" if config[:log_file]
|
61
77
|
args << "--profile-ruby" if config[:profile_ruby]
|
78
|
+
args << "--legacy-mode" if config[:legacy_mode]
|
62
79
|
|
63
80
|
prefix_command(
|
64
81
|
wrap_shell_code(
|
@@ -19,6 +19,7 @@
|
|
19
19
|
require "kitchen"
|
20
20
|
|
21
21
|
require "net/ssh"
|
22
|
+
require "net/ssh/gateway"
|
22
23
|
require "net/scp"
|
23
24
|
require "timeout"
|
24
25
|
require "benchmark"
|
@@ -53,6 +54,9 @@ module Kitchen
|
|
53
54
|
default_config :connection_retry_sleep, 1
|
54
55
|
default_config :max_wait_until_ready, 600
|
55
56
|
|
57
|
+
default_config :ssh_gateway, nil
|
58
|
+
default_config :ssh_gateway_username, nil
|
59
|
+
|
56
60
|
default_config :ssh_key, nil
|
57
61
|
expand_path_for :ssh_key
|
58
62
|
|
@@ -142,6 +146,11 @@ module Kitchen
|
|
142
146
|
if options.key?(:forward_agent)
|
143
147
|
args += %W[ -o ForwardAgent=#{options[:forward_agent] ? "yes" : "no"} ]
|
144
148
|
end
|
149
|
+
if ssh_gateway
|
150
|
+
gateway_command = "ssh -q #{ssh_gateway_username}@#{ssh_gateway} nc #{hostname} #{port}"
|
151
|
+
# Should support other ports than 22 for ssh gateways
|
152
|
+
args += %W[ -o ProxyCommand=#{gateway_command} -p 22 ]
|
153
|
+
end
|
145
154
|
Array(options[:keys]).each { |ssh_key| args += %W[ -i #{ssh_key} ] }
|
146
155
|
args += %W[ -p #{port} ]
|
147
156
|
args += %W[ #{username}@#{hostname} ]
|
@@ -226,6 +235,33 @@ module Kitchen
|
|
226
235
|
# @api private
|
227
236
|
attr_reader :port
|
228
237
|
|
238
|
+
# @return [String] The ssh gateway to use when connecting to the
|
239
|
+
# remote SSH host
|
240
|
+
# @api private
|
241
|
+
attr_reader :ssh_gateway
|
242
|
+
|
243
|
+
# @return [String] The username to use when using an ssh gateway
|
244
|
+
# @api private
|
245
|
+
attr_reader :ssh_gateway_username
|
246
|
+
|
247
|
+
# Establish an SSH session on the remote host using a gateway host.
|
248
|
+
#
|
249
|
+
# @param opts [Hash] retry options
|
250
|
+
# @option opts [Integer] :retries the number of times to retry before
|
251
|
+
# failing
|
252
|
+
# @option opts [Float] :delay the number of seconds to wait until
|
253
|
+
# attempting a retry
|
254
|
+
# @option opts [String] :message an optional message to be logged on
|
255
|
+
# debug (overriding the default) when a rescuable exception is raised
|
256
|
+
# @return [Net::SSH::Connection::Session] the SSH connection session
|
257
|
+
# @api private
|
258
|
+
def establish_connection_via_gateway(opts)
|
259
|
+
retry_connection(opts) do
|
260
|
+
Net::SSH::Gateway.new(ssh_gateway,
|
261
|
+
ssh_gateway_username, options).ssh(hostname, username, options)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
229
265
|
# Establish an SSH session on the remote host.
|
230
266
|
#
|
231
267
|
# @param opts [Hash] retry options
|
@@ -238,8 +274,27 @@ module Kitchen
|
|
238
274
|
# @return [Net::SSH::Connection::Session] the SSH connection session
|
239
275
|
# @api private
|
240
276
|
def establish_connection(opts)
|
241
|
-
|
242
|
-
|
277
|
+
retry_connection(opts) do
|
278
|
+
Net::SSH.start(hostname, username, options)
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
# Connecto to a host executing passed block and properly handling retreis.
|
283
|
+
#
|
284
|
+
# @param opts [Hash] retry options
|
285
|
+
# @option opts [Integer] :retries the number of times to retry before
|
286
|
+
# failing
|
287
|
+
# @option opts [Float] :delay the number of seconds to wait until
|
288
|
+
# attempting a retry
|
289
|
+
# @option opts [String] :message an optional message to be logged on
|
290
|
+
# debug (overriding the default) when a rescuable exception is raised
|
291
|
+
# @return [Net::SSH::Connection::Session] the SSH connection session
|
292
|
+
# @api private
|
293
|
+
def retry_connection(opts)
|
294
|
+
log_msg = "[SSH] opening connection to #{self}"
|
295
|
+
log_msg += " via #{ssh_gateway_username}@#{ssh_gateway}" if ssh_gateway
|
296
|
+
logger.debug(log_msg)
|
297
|
+
yield
|
243
298
|
rescue *RESCUE_EXCEPTIONS_ON_ESTABLISH => e
|
244
299
|
if (opts[:retries] -= 1) > 0
|
245
300
|
message = if opts[:message]
|
@@ -298,6 +353,8 @@ module Kitchen
|
|
298
353
|
@connection_retry_sleep = @options.delete(:connection_retry_sleep)
|
299
354
|
@max_ssh_sessions = @options.delete(:max_ssh_sessions)
|
300
355
|
@max_wait_until_ready = @options.delete(:max_wait_until_ready)
|
356
|
+
@ssh_gateway = @options.delete(:ssh_gateway)
|
357
|
+
@ssh_gateway_username = @options.delete(:ssh_gateway_username)
|
301
358
|
end
|
302
359
|
|
303
360
|
# Returns a connection session, or establishes one when invoked the
|
@@ -307,10 +364,17 @@ module Kitchen
|
|
307
364
|
# @return [Net::SSH::Connection::Session] the SSH connection session
|
308
365
|
# @api private
|
309
366
|
def session(retry_options = {})
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
367
|
+
if ssh_gateway
|
368
|
+
@session ||= establish_connection_via_gateway({
|
369
|
+
:retries => connection_retries.to_i,
|
370
|
+
:delay => connection_retry_sleep.to_i
|
371
|
+
}.merge(retry_options))
|
372
|
+
else
|
373
|
+
@session ||= establish_connection({
|
374
|
+
:retries => connection_retries.to_i,
|
375
|
+
:delay => connection_retry_sleep.to_i
|
376
|
+
}.merge(retry_options))
|
377
|
+
end
|
314
378
|
end
|
315
379
|
|
316
380
|
# String representation of object, reporting its connection details and
|
@@ -347,12 +411,17 @@ module Kitchen
|
|
347
411
|
:connection_retries => data[:connection_retries],
|
348
412
|
:connection_retry_sleep => data[:connection_retry_sleep],
|
349
413
|
:max_ssh_sessions => data[:max_ssh_sessions],
|
350
|
-
:max_wait_until_ready => data[:max_wait_until_ready]
|
414
|
+
:max_wait_until_ready => data[:max_wait_until_ready],
|
415
|
+
:ssh_gateway => data[:ssh_gateway],
|
416
|
+
:ssh_gateway_username => data[:ssh_gateway_username]
|
351
417
|
}
|
352
418
|
|
353
|
-
|
354
|
-
|
355
|
-
|
419
|
+
if data[:ssh_key] && !data.key?(:password)
|
420
|
+
opts[:keys_only] = true
|
421
|
+
opts[:keys] = Array(data[:ssh_key])
|
422
|
+
opts[:auth_methods] = ["publickey"]
|
423
|
+
end
|
424
|
+
|
356
425
|
opts[:password] = data[:password] if data.key?(:password)
|
357
426
|
opts[:forward_agent] = data[:forward_agent] if data.key?(:forward_agent)
|
358
427
|
opts[:verbose] = data[:verbose].to_sym if data.key?(:verbose)
|
data/lib/kitchen/version.rb
CHANGED
@@ -732,7 +732,8 @@ describe Kitchen::Configurable do
|
|
732
732
|
ENV.replace("http_proxy" => nil, "HTTP_PROXY" => nil,
|
733
733
|
"https_proxy" => nil, "HTTPS_PROXY" => nil,
|
734
734
|
"ftp_proxy" => nil, "FTP_PROXY" => nil,
|
735
|
-
"no_proxy" => nil, "NO_PROXY" => nil
|
735
|
+
"no_proxy" => nil, "NO_PROXY" => nil,
|
736
|
+
"CI" => nil)
|
736
737
|
end
|
737
738
|
|
738
739
|
after do
|
@@ -747,6 +748,7 @@ describe Kitchen::Configurable do
|
|
747
748
|
it "uses bourne shell (sh)" do
|
748
749
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
749
750
|
sh -c '
|
751
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
750
752
|
mkdir foo
|
751
753
|
'
|
752
754
|
CODE
|
@@ -759,6 +761,7 @@ describe Kitchen::Configurable do
|
|
759
761
|
sh -c '
|
760
762
|
http_proxy="http://proxy"; export http_proxy
|
761
763
|
HTTP_PROXY="http://proxy"; export HTTP_PROXY
|
764
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
762
765
|
mkdir foo
|
763
766
|
'
|
764
767
|
CODE
|
@@ -771,6 +774,7 @@ describe Kitchen::Configurable do
|
|
771
774
|
sh -c '
|
772
775
|
https_proxy="https://proxy"; export https_proxy
|
773
776
|
HTTPS_PROXY="https://proxy"; export HTTPS_PROXY
|
777
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
774
778
|
mkdir foo
|
775
779
|
'
|
776
780
|
CODE
|
@@ -783,6 +787,7 @@ describe Kitchen::Configurable do
|
|
783
787
|
sh -c '
|
784
788
|
ftp_proxy="ftp://proxy"; export ftp_proxy
|
785
789
|
FTP_PROXY="ftp://proxy"; export FTP_PROXY
|
790
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
786
791
|
mkdir foo
|
787
792
|
'
|
788
793
|
CODE
|
@@ -801,6 +806,7 @@ describe Kitchen::Configurable do
|
|
801
806
|
HTTPS_PROXY="https://proxy"; export HTTPS_PROXY
|
802
807
|
ftp_proxy="ftp://proxy"; export ftp_proxy
|
803
808
|
FTP_PROXY="ftp://proxy"; export FTP_PROXY
|
809
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
804
810
|
mkdir foo
|
805
811
|
'
|
806
812
|
CODE
|
@@ -814,6 +820,7 @@ describe Kitchen::Configurable do
|
|
814
820
|
sh -c '
|
815
821
|
http_proxy="http://proxy"; export http_proxy
|
816
822
|
HTTP_PROXY="http://proxy"; export HTTP_PROXY
|
823
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
817
824
|
mkdir foo
|
818
825
|
'
|
819
826
|
CODE
|
@@ -827,6 +834,7 @@ describe Kitchen::Configurable do
|
|
827
834
|
sh -c '
|
828
835
|
https_proxy="https://proxy"; export https_proxy
|
829
836
|
HTTPS_PROXY="https://proxy"; export HTTPS_PROXY
|
837
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
830
838
|
mkdir foo
|
831
839
|
'
|
832
840
|
CODE
|
@@ -839,6 +847,7 @@ describe Kitchen::Configurable do
|
|
839
847
|
|
840
848
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
841
849
|
sh -c '
|
850
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
842
851
|
mkdir foo
|
843
852
|
'
|
844
853
|
CODE
|
@@ -851,6 +860,7 @@ describe Kitchen::Configurable do
|
|
851
860
|
|
852
861
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
853
862
|
sh -c '
|
863
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
854
864
|
mkdir foo
|
855
865
|
'
|
856
866
|
CODE
|
@@ -864,6 +874,7 @@ describe Kitchen::Configurable do
|
|
864
874
|
sh -c '
|
865
875
|
ftp_proxy="ftp://proxy"; export ftp_proxy
|
866
876
|
FTP_PROXY="ftp://proxy"; export FTP_PROXY
|
877
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
867
878
|
mkdir foo
|
868
879
|
'
|
869
880
|
CODE
|
@@ -874,6 +885,7 @@ describe Kitchen::Configurable do
|
|
874
885
|
|
875
886
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
876
887
|
sh -c '
|
888
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
877
889
|
mkdir foo
|
878
890
|
'
|
879
891
|
CODE
|
@@ -891,6 +903,7 @@ describe Kitchen::Configurable do
|
|
891
903
|
HTTP_PROXY="http://proxy"; export HTTP_PROXY
|
892
904
|
no_proxy="http://no"; export no_proxy
|
893
905
|
NO_PROXY="http://no"; export NO_PROXY
|
906
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
894
907
|
mkdir foo
|
895
908
|
'
|
896
909
|
CODE
|
@@ -908,6 +921,7 @@ describe Kitchen::Configurable do
|
|
908
921
|
HTTPS_PROXY="https://proxy"; export HTTPS_PROXY
|
909
922
|
no_proxy="http://no"; export no_proxy
|
910
923
|
NO_PROXY="http://no"; export NO_PROXY
|
924
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
911
925
|
mkdir foo
|
912
926
|
'
|
913
927
|
CODE
|
@@ -925,6 +939,19 @@ describe Kitchen::Configurable do
|
|
925
939
|
FTP_PROXY="ftp://proxy"; export FTP_PROXY
|
926
940
|
no_proxy="http://no"; export no_proxy
|
927
941
|
NO_PROXY="http://no"; export NO_PROXY
|
942
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
943
|
+
mkdir foo
|
944
|
+
'
|
945
|
+
CODE
|
946
|
+
end
|
947
|
+
|
948
|
+
it "exports CI when CI is set" do
|
949
|
+
ENV["CI"] = "1"
|
950
|
+
|
951
|
+
cmd.must_equal(outdent!(<<-CODE.chomp))
|
952
|
+
sh -c '
|
953
|
+
TEST_KITCHEN="1"; export TEST_KITCHEN
|
954
|
+
CI="1"; export CI
|
928
955
|
mkdir foo
|
929
956
|
'
|
930
957
|
CODE
|
@@ -936,7 +963,7 @@ describe Kitchen::Configurable do
|
|
936
963
|
before { platform.stubs(:shell_type).returns("powershell") }
|
937
964
|
|
938
965
|
it "uses powershell shell" do
|
939
|
-
cmd.must_equal("
|
966
|
+
cmd.must_equal("$env:TEST_KITCHEN = \"1\"\nmkdir foo")
|
940
967
|
end
|
941
968
|
|
942
969
|
it "exports http_proxy & HTTP_PROXY when :http_proxy is set" do
|
@@ -945,6 +972,7 @@ describe Kitchen::Configurable do
|
|
945
972
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
946
973
|
$env:http_proxy = "http://proxy"
|
947
974
|
$env:HTTP_PROXY = "http://proxy"
|
975
|
+
$env:TEST_KITCHEN = "1"
|
948
976
|
mkdir foo
|
949
977
|
CODE
|
950
978
|
end
|
@@ -955,6 +983,7 @@ describe Kitchen::Configurable do
|
|
955
983
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
956
984
|
$env:https_proxy = "https://proxy"
|
957
985
|
$env:HTTPS_PROXY = "https://proxy"
|
986
|
+
$env:TEST_KITCHEN = "1"
|
958
987
|
mkdir foo
|
959
988
|
CODE
|
960
989
|
end
|
@@ -965,6 +994,7 @@ describe Kitchen::Configurable do
|
|
965
994
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
966
995
|
$env:ftp_proxy = "ftp://proxy"
|
967
996
|
$env:FTP_PROXY = "ftp://proxy"
|
997
|
+
$env:TEST_KITCHEN = "1"
|
968
998
|
mkdir foo
|
969
999
|
CODE
|
970
1000
|
end
|
@@ -981,6 +1011,7 @@ describe Kitchen::Configurable do
|
|
981
1011
|
$env:HTTPS_PROXY = "https://proxy"
|
982
1012
|
$env:ftp_proxy = "ftp://proxy"
|
983
1013
|
$env:FTP_PROXY = "ftp://proxy"
|
1014
|
+
$env:TEST_KITCHEN = "1"
|
984
1015
|
mkdir foo
|
985
1016
|
CODE
|
986
1017
|
end
|
@@ -992,6 +1023,7 @@ describe Kitchen::Configurable do
|
|
992
1023
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
993
1024
|
$env:http_proxy = "http://proxy"
|
994
1025
|
$env:HTTP_PROXY = "http://proxy"
|
1026
|
+
$env:TEST_KITCHEN = "1"
|
995
1027
|
mkdir foo
|
996
1028
|
CODE
|
997
1029
|
end
|
@@ -1003,6 +1035,7 @@ describe Kitchen::Configurable do
|
|
1003
1035
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
1004
1036
|
$env:https_proxy = "https://proxy"
|
1005
1037
|
$env:HTTPS_PROXY = "https://proxy"
|
1038
|
+
$env:TEST_KITCHEN = "1"
|
1006
1039
|
mkdir foo
|
1007
1040
|
CODE
|
1008
1041
|
end
|
@@ -1014,6 +1047,7 @@ describe Kitchen::Configurable do
|
|
1014
1047
|
cmd.must_equal(outdent!(<<-CODE.chomp))
|
1015
1048
|
$env:ftp_proxy = "ftp://proxy"
|
1016
1049
|
$env:FTP_PROXY = "ftp://proxy"
|
1050
|
+
$env:TEST_KITCHEN = "1"
|
1017
1051
|
mkdir foo
|
1018
1052
|
CODE
|
1019
1053
|
end
|
@@ -1029,6 +1063,7 @@ describe Kitchen::Configurable do
|
|
1029
1063
|
$env:HTTP_PROXY = "http://proxy"
|
1030
1064
|
$env:no_proxy = "http://no"
|
1031
1065
|
$env:NO_PROXY = "http://no"
|
1066
|
+
$env:TEST_KITCHEN = "1"
|
1032
1067
|
mkdir foo
|
1033
1068
|
CODE
|
1034
1069
|
end
|
@@ -1044,6 +1079,7 @@ describe Kitchen::Configurable do
|
|
1044
1079
|
$env:HTTPS_PROXY = "https://proxy"
|
1045
1080
|
$env:no_proxy = "http://no"
|
1046
1081
|
$env:NO_PROXY = "http://no"
|
1082
|
+
$env:TEST_KITCHEN = "1"
|
1047
1083
|
mkdir foo
|
1048
1084
|
CODE
|
1049
1085
|
end
|
@@ -1059,6 +1095,17 @@ describe Kitchen::Configurable do
|
|
1059
1095
|
$env:FTP_PROXY = "ftp://proxy"
|
1060
1096
|
$env:no_proxy = "http://no"
|
1061
1097
|
$env:NO_PROXY = "http://no"
|
1098
|
+
$env:TEST_KITCHEN = "1"
|
1099
|
+
mkdir foo
|
1100
|
+
CODE
|
1101
|
+
end
|
1102
|
+
|
1103
|
+
it "exports CI when CI is set" do
|
1104
|
+
ENV["CI"] = "1"
|
1105
|
+
|
1106
|
+
cmd.must_equal(outdent!(<<-CODE.chomp))
|
1107
|
+
$env:TEST_KITCHEN = "1"
|
1108
|
+
$env:CI = "1"
|
1062
1109
|
mkdir foo
|
1063
1110
|
CODE
|
1064
1111
|
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Author:: Noah Kantrowitz
|
4
|
+
#
|
5
|
+
# Copyright (C) 2016, Noah Kantrowitz
|
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_relative "../../../spec_helper"
|
20
|
+
require "kitchen/provisioner/chef/policyfile"
|
21
|
+
|
22
|
+
describe Kitchen::Provisioner::Chef::Policyfile do
|
23
|
+
let(:policyfile) { "" }
|
24
|
+
let(:path) { "" }
|
25
|
+
let(:null_logger) do
|
26
|
+
stub(:fatal => nil, :error => nil, :warn => nil, :info => nil,
|
27
|
+
:debug => nil, :banner => nil)
|
28
|
+
end
|
29
|
+
let(:described_object) do
|
30
|
+
Kitchen::Provisioner::Chef::Policyfile.new(policyfile, path, null_logger)
|
31
|
+
end
|
32
|
+
let(:os) { "" }
|
33
|
+
before do
|
34
|
+
@original_rbconfig = RbConfig::CONFIG
|
35
|
+
verbose = $VERBOSE
|
36
|
+
$VERBOSE = nil
|
37
|
+
RbConfig.const_set(:CONFIG, "host_os" => os)
|
38
|
+
$VERBOSE = verbose
|
39
|
+
end
|
40
|
+
after do
|
41
|
+
verbose = $VERBOSE
|
42
|
+
$VERBOSE = nil
|
43
|
+
RbConfig.const_set(:CONFIG, @original_rbconfig)
|
44
|
+
$VERBOSE = verbose
|
45
|
+
end
|
46
|
+
|
47
|
+
# rubocop:disable Metrics/LineLength
|
48
|
+
describe "#resolve" do
|
49
|
+
subject { described_object.resolve }
|
50
|
+
|
51
|
+
describe "on Unix" do
|
52
|
+
let(:os) { "linux-gnu" }
|
53
|
+
|
54
|
+
describe "with simple paths" do
|
55
|
+
let(:policyfile) { "/home/user/cookbook/Policyfile.rb" }
|
56
|
+
let(:path) { "/tmp/kitchen/cookbooks" }
|
57
|
+
it do
|
58
|
+
described_object.expects(:run_command).with("chef export /home/user/cookbook/Policyfile.rb /tmp/kitchen/cookbooks --force")
|
59
|
+
subject
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "with Jenkins-y paths" do
|
64
|
+
let(:policyfile) { "/home/jenkins/My Chef Cookbook/workspace/current/Policyfile.rb" }
|
65
|
+
let(:path) { "/tmp/kitchen/cookbooks" }
|
66
|
+
it do
|
67
|
+
described_object.expects(:run_command).with("chef export /home/jenkins/My\\ Chef\\ Cookbook/workspace/current/Policyfile.rb /tmp/kitchen/cookbooks --force")
|
68
|
+
subject
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "on Windows" do
|
74
|
+
let(:os) { "mswin" }
|
75
|
+
|
76
|
+
describe "with simple paths" do
|
77
|
+
let(:policyfile) { "C:\\cookbook\\Policyfile.rb" }
|
78
|
+
let(:path) { "C:\\Temp\\kitchen\\cookbooks" }
|
79
|
+
it do
|
80
|
+
described_object.expects(:run_command).with("chef export C:\\cookbook\\Policyfile.rb C:\\Temp\\kitchen\\cookbooks --force")
|
81
|
+
subject
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "with Jenkins-y paths" do
|
86
|
+
let(:policyfile) { "C:\\Program Files\\Jenkins\\My Chef Cookbook\\workspace\\current\\Policyfile.rb" }
|
87
|
+
let(:path) { "C:\\Temp\\kitchen\\cookbooks" }
|
88
|
+
it do
|
89
|
+
described_object.expects(:run_command).with("chef export \"C:\\\\Program\\ Files\\\\Jenkins\\\\My\\ Chef\\ Cookbook\\\\workspace\\\\current\\\\Policyfile.rb\" C:\\Temp\\kitchen\\cookbooks --force")
|
90
|
+
subject
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#compile" do
|
97
|
+
subject { described_object.compile }
|
98
|
+
|
99
|
+
describe "on Unix" do
|
100
|
+
let(:os) { "linux-gnu" }
|
101
|
+
|
102
|
+
describe "with simple paths" do
|
103
|
+
let(:policyfile) { "/home/user/cookbook/Policyfile.rb" }
|
104
|
+
it do
|
105
|
+
described_object.expects(:run_command).with("chef install /home/user/cookbook/Policyfile.rb")
|
106
|
+
subject
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "with Jenkins-y paths" do
|
111
|
+
let(:policyfile) { "/home/jenkins/My Chef Cookbook/workspace/current/Policyfile.rb" }
|
112
|
+
it do
|
113
|
+
described_object.expects(:run_command).with("chef install /home/jenkins/My\\ Chef\\ Cookbook/workspace/current/Policyfile.rb")
|
114
|
+
subject
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "on Windows" do
|
120
|
+
let(:os) { "mswin" }
|
121
|
+
|
122
|
+
describe "with simple paths" do
|
123
|
+
let(:policyfile) { "C:\\cookbook\\Policyfile.rb" }
|
124
|
+
it do
|
125
|
+
described_object.expects(:run_command).with("chef install C:\\cookbook\\Policyfile.rb")
|
126
|
+
subject
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "with Jenkins-y paths" do
|
131
|
+
let(:policyfile) { "C:\\Program Files\\Jenkins\\My Chef Cookbook\\workspace\\current\\Policyfile.rb" }
|
132
|
+
it do
|
133
|
+
described_object.expects(:run_command).with("chef install \"C:\\\\Program\\ Files\\\\Jenkins\\\\My\\ Chef\\ Cookbook\\\\workspace\\\\current\\\\Policyfile.rb\"")
|
134
|
+
subject
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
# rubocop:enable Metrics/LineLength
|
140
|
+
end
|
@@ -401,6 +401,11 @@ describe Kitchen::Provisioner::ChefSolo do
|
|
401
401
|
cmd.must_match regexify(" --log_level auto", :partial_line)
|
402
402
|
end
|
403
403
|
|
404
|
+
it "sets log level flag on chef-solo to info by default if running Chef < 11" do
|
405
|
+
config[:require_chef_omnibus] = "10.34.6"
|
406
|
+
cmd.must_match regexify(" --log_level info", :partial_line)
|
407
|
+
end
|
408
|
+
|
404
409
|
it "set log level flag for custom level" do
|
405
410
|
config[:log_level] = :extreme
|
406
411
|
|
@@ -411,6 +416,11 @@ describe Kitchen::Provisioner::ChefSolo do
|
|
411
416
|
cmd.must_match regexify(" --force-formatter", :partial_line)
|
412
417
|
end
|
413
418
|
|
419
|
+
it "does not set force formatter flag on chef-solo if running Chef < 11" do
|
420
|
+
config[:require_chef_omnibus] = "10.34.6"
|
421
|
+
cmd.wont_match regexify(" --force-formatter", :partial_line)
|
422
|
+
end
|
423
|
+
|
414
424
|
it "sets no color flag on chef-solo" do
|
415
425
|
cmd.must_match regexify(" --no-color", :partial_line)
|
416
426
|
end
|
@@ -437,6 +447,18 @@ describe Kitchen::Provisioner::ChefSolo do
|
|
437
447
|
|
438
448
|
cmd.wont_match regexify(" --profile-ruby", :partial_line)
|
439
449
|
end
|
450
|
+
|
451
|
+
it "sets legacy-mode flag when config element is set" do
|
452
|
+
config[:legacy_mode] = true
|
453
|
+
|
454
|
+
cmd.must_match regexify(" --legacy-mode", :partial_line)
|
455
|
+
end
|
456
|
+
|
457
|
+
it "does not set legacy-mode flag when config element is falsey" do
|
458
|
+
config[:legacy_mode] = false
|
459
|
+
|
460
|
+
cmd.wont_match regexify(" --legacy-mode", :partial_line)
|
461
|
+
end
|
440
462
|
end
|
441
463
|
|
442
464
|
describe "for powershell shells on windows os types" do
|
@@ -531,6 +531,64 @@ describe Kitchen::Transport::Ssh do
|
|
531
531
|
make_connection
|
532
532
|
end
|
533
533
|
|
534
|
+
it "does not set :keys_only if :ssh_key is set in config but password is set" do
|
535
|
+
config[:ssh_key] = "ssh_key_from_config"
|
536
|
+
config[:password] = "password"
|
537
|
+
|
538
|
+
klass.expects(:new).with do |hash|
|
539
|
+
hash[:keys_only].nil?
|
540
|
+
end
|
541
|
+
|
542
|
+
make_connection
|
543
|
+
end
|
544
|
+
|
545
|
+
it "does not set :auth_methods if :ssh_key is set in config but password is set" do
|
546
|
+
config[:ssh_key] = "ssh_key_from_config"
|
547
|
+
config[:password] = "password"
|
548
|
+
|
549
|
+
klass.expects(:new).with do |hash|
|
550
|
+
hash[:auth_methods].nil?
|
551
|
+
end
|
552
|
+
|
553
|
+
make_connection
|
554
|
+
end
|
555
|
+
|
556
|
+
it "does not set :keys_only if :ssh_key is set in state but password is set" do
|
557
|
+
state[:ssh_key] = "ssh_key_from_config"
|
558
|
+
config[:ssh_key] = false
|
559
|
+
config[:password] = "password"
|
560
|
+
|
561
|
+
klass.expects(:new).with do |hash|
|
562
|
+
hash[:keys_only].nil?
|
563
|
+
end
|
564
|
+
|
565
|
+
make_connection
|
566
|
+
end
|
567
|
+
|
568
|
+
it "does not set :keys to an array if :ssh_key is set in config but password is set" do
|
569
|
+
config[:kitchen_root] = "/r"
|
570
|
+
config[:ssh_key] = "ssh_key_from_config"
|
571
|
+
config[:password] = "password"
|
572
|
+
|
573
|
+
klass.expects(:new).with do |hash|
|
574
|
+
hash[:keys].nil?
|
575
|
+
end
|
576
|
+
|
577
|
+
make_connection
|
578
|
+
end
|
579
|
+
|
580
|
+
it "does not set :keys to an array if :ssh_key is set in state but password is set" do
|
581
|
+
state[:ssh_key] = "ssh_key_from_state"
|
582
|
+
config[:ssh_key] = "ssh_key_from_config"
|
583
|
+
config[:password] = "password"
|
584
|
+
|
585
|
+
klass.expects(:new).with do |hash|
|
586
|
+
hash[:keys].nil?
|
587
|
+
end
|
588
|
+
|
589
|
+
make_connection
|
590
|
+
end
|
591
|
+
|
534
592
|
it "passes in :password if set in config" do
|
535
593
|
config[:password] = "password_from_config"
|
536
594
|
|
data/test-kitchen.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |gem|
|
|
26
26
|
gem.add_dependency "mixlib-shellout", ">= 1.2", "< 3.0"
|
27
27
|
gem.add_dependency "net-scp", "~> 1.1"
|
28
28
|
gem.add_dependency "net-ssh", ">= 2.9", "< 4.0"
|
29
|
+
gem.add_dependency "net-ssh-gateway", "~> 1.2.0"
|
29
30
|
gem.add_dependency "safe_yaml", "~> 1.0"
|
30
31
|
gem.add_dependency "thor", "~> 0.18"
|
31
32
|
gem.add_dependency "mixlib-install", "~> 1.0", ">= 1.0.4"
|
@@ -59,5 +60,4 @@ Gem::Specification.new do |gem|
|
|
59
60
|
# may introduce new and undesireable style choices which would be immediately
|
60
61
|
# enforced in CI
|
61
62
|
gem.add_development_dependency "finstyle", "1.5.0"
|
62
|
-
gem.add_development_dependency "cane", "2.6.2"
|
63
63
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
directory "/tk_test_directory"
|
@@ -1,3 +1,3 @@
|
|
1
|
-
describe
|
2
|
-
it { should
|
1
|
+
describe directory("/tk_test_directory") do
|
2
|
+
it { should exist }
|
3
3
|
end
|
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.
|
4
|
+
version: 1.11.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: 2016-
|
11
|
+
date: 2016-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -64,6 +64,20 @@ dependencies:
|
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '4.0'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: net-ssh-gateway
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 1.2.0
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.2.0
|
67
81
|
- !ruby/object:Gem::Dependency
|
68
82
|
name: safe_yaml
|
69
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -406,20 +420,6 @@ dependencies:
|
|
406
420
|
- - '='
|
407
421
|
- !ruby/object:Gem::Version
|
408
422
|
version: 1.5.0
|
409
|
-
- !ruby/object:Gem::Dependency
|
410
|
-
name: cane
|
411
|
-
requirement: !ruby/object:Gem::Requirement
|
412
|
-
requirements:
|
413
|
-
- - '='
|
414
|
-
- !ruby/object:Gem::Version
|
415
|
-
version: 2.6.2
|
416
|
-
type: :development
|
417
|
-
prerelease: false
|
418
|
-
version_requirements: !ruby/object:Gem::Requirement
|
419
|
-
requirements:
|
420
|
-
- - '='
|
421
|
-
- !ruby/object:Gem::Version
|
422
|
-
version: 2.6.2
|
423
423
|
description: Test Kitchen is an integration tool for developing and testing infrastructure
|
424
424
|
code and software on isolated target platforms.
|
425
425
|
email:
|
@@ -429,7 +429,6 @@ executables:
|
|
429
429
|
extensions: []
|
430
430
|
extra_rdoc_files: []
|
431
431
|
files:
|
432
|
-
- ".cane"
|
433
432
|
- ".gitattributes"
|
434
433
|
- ".github/ISSUE_TEMPLATE.md"
|
435
434
|
- ".gitignore"
|
@@ -557,6 +556,7 @@ files:
|
|
557
556
|
- spec/kitchen/metadata_chopper_spec.rb
|
558
557
|
- spec/kitchen/platform_spec.rb
|
559
558
|
- spec/kitchen/provisioner/base_spec.rb
|
559
|
+
- spec/kitchen/provisioner/chef/policyfile_spec.rb
|
560
560
|
- spec/kitchen/provisioner/chef_apply_spec.rb
|
561
561
|
- spec/kitchen/provisioner/chef_base_spec.rb
|
562
562
|
- spec/kitchen/provisioner/chef_solo_spec.rb
|
@@ -609,6 +609,8 @@ files:
|
|
609
609
|
- templates/init/chefignore.erb
|
610
610
|
- templates/init/kitchen.yml.erb
|
611
611
|
- test-kitchen.gemspec
|
612
|
+
- test/cookbooks/test_cookbook/metadata.rb
|
613
|
+
- test/cookbooks/test_cookbook/recipes/default.rb
|
612
614
|
- test/integration/default/default_spec.rb
|
613
615
|
- testing_windows.md
|
614
616
|
homepage: http://kitchen.ci
|
@@ -631,7 +633,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
631
633
|
version: '0'
|
632
634
|
requirements: []
|
633
635
|
rubyforge_project:
|
634
|
-
rubygems_version: 2.
|
636
|
+
rubygems_version: 2.6.4
|
635
637
|
signing_key:
|
636
638
|
specification_version: 4
|
637
639
|
summary: Test Kitchen is an integration tool for developing and testing infrastructure
|
@@ -677,6 +679,7 @@ test_files:
|
|
677
679
|
- spec/kitchen/metadata_chopper_spec.rb
|
678
680
|
- spec/kitchen/platform_spec.rb
|
679
681
|
- spec/kitchen/provisioner/base_spec.rb
|
682
|
+
- spec/kitchen/provisioner/chef/policyfile_spec.rb
|
680
683
|
- spec/kitchen/provisioner/chef_apply_spec.rb
|
681
684
|
- spec/kitchen/provisioner/chef_base_spec.rb
|
682
685
|
- spec/kitchen/provisioner/chef_solo_spec.rb
|
@@ -701,5 +704,6 @@ test_files:
|
|
701
704
|
- spec/kitchen_spec.rb
|
702
705
|
- spec/spec_helper.rb
|
703
706
|
- spec/support/powershell_max_size_spec.rb
|
707
|
+
- test/cookbooks/test_cookbook/metadata.rb
|
708
|
+
- test/cookbooks/test_cookbook/recipes/default.rb
|
704
709
|
- test/integration/default/default_spec.rb
|
705
|
-
has_rdoc:
|
data/.cane
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
--abc-max 20
|
2
|
-
--style-measure 100
|
3
|
-
--abc-exclude Kitchen::ThorTasks#define
|
4
|
-
--abc-exclude Kitchen::Driver::SSHBase#converge
|
5
|
-
--abc-exclude Kitchen::Driver::SSHBase#verify
|
6
|
-
--abc-exclude Kitchen::Configurable#wrap_shell_code
|
7
|
-
--style-exclude lib/vendor/**/*.rb
|
8
|
-
--doc-exclude lib/vendor/**/.rb
|