test-kitchen 2.10.0 → 2.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -10
- data/Rakefile +0 -22
- data/lib/kitchen/chef_utils_wiring.rb +40 -0
- data/lib/kitchen/provisioner/base.rb +1 -1
- data/lib/kitchen/provisioner/chef/policyfile.rb +31 -39
- data/lib/kitchen/transport/ssh.rb +8 -10
- data/lib/kitchen/verifier/shell.rb +1 -0
- data/lib/kitchen/version.rb +1 -1
- data/lib/kitchen/which.rb +26 -0
- data/test-kitchen.gemspec +2 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36e340a7aefc9e4512f05ded9b43003298a3466de705d7c6c6050dd07f433175
|
4
|
+
data.tar.gz: 310ae63b637cbd62a88cd5beef8effa437f0d1b2dec6bf9098ba3112e621c8ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc3e9bf0e55d519d757e4339b4e643f038216dedb573225aed9cc1ce2972ad121e7819db643e26e4038ebe5fc05e2bc0a57435588d462bf2d2a4a198cbd0b9b1
|
7
|
+
data.tar.gz: 48c9bc01e69691e4096f5ae219638b0d996f069852c3ac14ec143ce583c3f6f610263000e5b24256b3b969314c9903e95b570372c1d3a8d3298d3ba4c65885bd
|
data/Gemfile
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem"s dependencies in test-kitchen.gemspec
|
2
4
|
gemspec
|
3
5
|
|
4
6
|
group :integration do
|
@@ -8,10 +10,6 @@ group :integration do
|
|
8
10
|
gem "kitchen-vagrant"
|
9
11
|
end
|
10
12
|
|
11
|
-
group :changelog do
|
12
|
-
gem "github_changelog_generator", "1.15.2"
|
13
|
-
end
|
14
|
-
|
15
13
|
group :debug do
|
16
14
|
gem "pry"
|
17
15
|
gem "pry-byebug"
|
@@ -19,9 +17,5 @@ group :debug do
|
|
19
17
|
end
|
20
18
|
|
21
19
|
group :chefstyle do
|
22
|
-
gem "chefstyle"
|
23
|
-
end
|
24
|
-
|
25
|
-
group :docs do
|
26
|
-
gem "yard"
|
27
|
-
end
|
20
|
+
gem "chefstyle", "1.6.2"
|
21
|
+
end
|
data/Rakefile
CHANGED
@@ -41,30 +41,8 @@ end
|
|
41
41
|
desc "Run all quality tasks"
|
42
42
|
task quality: %i{style stats}
|
43
43
|
|
44
|
-
begin
|
45
|
-
require "yard" unless defined?(YARD)
|
46
|
-
YARD::Rake::YardocTask.new
|
47
|
-
rescue LoadError
|
48
|
-
puts "yard is not available. (sudo) gem install yard to generate yard documentation."
|
49
|
-
end
|
50
|
-
|
51
44
|
task default: %i{test quality}
|
52
45
|
|
53
|
-
begin
|
54
|
-
require "github_changelog_generator/task"
|
55
|
-
require "kitchen/version"
|
56
|
-
|
57
|
-
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
58
|
-
config.future_release = "v#{Kitchen::VERSION}"
|
59
|
-
config.enhancement_labels = "enhancement,Enhancement,New Feature,Feature,Improvement".split(",")
|
60
|
-
config.bug_labels = "bug,Bug".split(",")
|
61
|
-
config.exclude_labels = %w{Duplicate Question Discussion No_Changelog}
|
62
|
-
end
|
63
|
-
rescue LoadError
|
64
|
-
puts "github_changelog_generator is not available." \
|
65
|
-
" (sudo) gem install github_changelog_generator to generate changelogs"
|
66
|
-
end
|
67
|
-
|
68
46
|
namespace :docs do
|
69
47
|
desc "Deploy docs"
|
70
48
|
task :deploy do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
module Kitchen
|
20
|
+
# Common Dependency Injection wiring for ChefUtils-related modules
|
21
|
+
module ChefUtilsWiring
|
22
|
+
private
|
23
|
+
|
24
|
+
def __config
|
25
|
+
# this would need to be some kind of Chef::Config looking thing, which probably requires
|
26
|
+
# a translation object from t-k config to Chef::Config layout if that ever becomes necessary.
|
27
|
+
# this ISNT the t-k config.
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
|
31
|
+
def __log
|
32
|
+
@logger
|
33
|
+
end
|
34
|
+
|
35
|
+
def __transport_connection
|
36
|
+
# this could be wired up to train at some point, but need to be careful because about local vs. remote
|
37
|
+
# uses of helpers with test-kitchen, right now we're using it for local.
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -74,7 +74,7 @@ module Kitchen
|
|
74
74
|
|
75
75
|
instance.transport.connection(state) do |conn|
|
76
76
|
config[:uploads].to_h.each do |locals, remote|
|
77
|
-
debug("Uploading #{Array(locals).join(
|
77
|
+
debug("Uploading #{Array(locals).join(", ")} to #{remote}")
|
78
78
|
conn.upload(locals.to_s, remote)
|
79
79
|
end
|
80
80
|
conn.execute(install_command)
|
@@ -21,6 +21,7 @@ require "rbconfig" unless defined?(RbConfig)
|
|
21
21
|
require_relative "../../errors"
|
22
22
|
require_relative "../../logging"
|
23
23
|
require_relative "../../shell_out"
|
24
|
+
require_relative "../../which"
|
24
25
|
|
25
26
|
module Kitchen
|
26
27
|
module Provisioner
|
@@ -31,6 +32,7 @@ module Kitchen
|
|
31
32
|
class Policyfile
|
32
33
|
include Logging
|
33
34
|
include ShellOut
|
35
|
+
include Which
|
34
36
|
|
35
37
|
# Creates a new cookbook resolver.
|
36
38
|
#
|
@@ -40,9 +42,9 @@ module Kitchen
|
|
40
42
|
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
41
43
|
# to `Kitchen.logger`
|
42
44
|
def initialize(policyfile, path, logger: Kitchen.logger, always_update: false)
|
43
|
-
@policyfile
|
44
|
-
@path
|
45
|
-
@logger
|
45
|
+
@policyfile = policyfile
|
46
|
+
@path = path
|
47
|
+
@logger = logger
|
46
48
|
@always_update = always_update
|
47
49
|
end
|
48
50
|
|
@@ -51,30 +53,29 @@ module Kitchen
|
|
51
53
|
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
52
54
|
# to `Kitchen.logger`
|
53
55
|
def self.load!(logger: Kitchen.logger)
|
54
|
-
|
56
|
+
# intentionally left blank
|
55
57
|
end
|
56
58
|
|
57
59
|
# Performs the cookbook resolution and vendors the resulting cookbooks
|
58
60
|
# in the desired path.
|
59
61
|
def resolve
|
60
|
-
info("Exporting cookbook dependencies from Policyfile #{path}
|
61
|
-
run_command("
|
62
|
+
info("Exporting cookbook dependencies from Policyfile #{path} using `#{cli_path} export`...")
|
63
|
+
run_command("#{cli_path} export #{escape_path(policyfile)} #{escape_path(path)} --force")
|
62
64
|
end
|
63
65
|
|
64
66
|
# Runs `chef install` to determine the correct cookbook set and
|
65
67
|
# generate the policyfile lock.
|
66
68
|
def compile
|
67
69
|
if File.exist?(lockfile)
|
68
|
-
info("Installing cookbooks for Policyfile #{policyfile} using
|
70
|
+
info("Installing cookbooks for Policyfile #{policyfile} using `#{cli_path} install`")
|
69
71
|
else
|
70
|
-
info("Policy lock file doesn't exist, running
|
71
|
-
"Policyfile #{policyfile}...")
|
72
|
+
info("Policy lock file doesn't exist, running `#{cli_path} install` for Policyfile #{policyfile}...")
|
72
73
|
end
|
73
|
-
run_command("
|
74
|
+
run_command("#{cli_path} install #{escape_path(policyfile)}")
|
74
75
|
|
75
76
|
if always_update
|
76
|
-
info("Updating policy lock using
|
77
|
-
run_command("
|
77
|
+
info("Updating policy lock using `#{cli_path} update`")
|
78
|
+
run_command("#{cli_path} update #{escape_path(policyfile)}")
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
@@ -126,33 +127,24 @@ module Kitchen
|
|
126
127
|
end
|
127
128
|
end
|
128
129
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
end
|
148
|
-
logger.fatal("The `chef` executable cannot be found in your " \
|
149
|
-
"PATH. Ensure you have installed Chef Workstation " \
|
150
|
-
"from https://downloads.chef.io and that your PATH " \
|
151
|
-
"setting includes the path to the `chef` command.")
|
152
|
-
raise UserError,
|
153
|
-
"Could not find the chef executable in your PATH."
|
154
|
-
end
|
155
|
-
end
|
130
|
+
# Find the `chef` or `chef-cli` commands in the path or raise `chef` is present in
|
131
|
+
# ChefDK / Workstation releases, but is no longer shipped in any gems now that we
|
132
|
+
# use a Go based wrapper for the `chef` command in Workstation. The Ruby CLI has been
|
133
|
+
# renamed `chef-cli` under the hood and is shipped in the `chef-cli` gem.
|
134
|
+
#
|
135
|
+
# @api private
|
136
|
+
# @returns [String]
|
137
|
+
def cli_path
|
138
|
+
@cli_path ||= which("chef-cli") || which("chef") || no_cli_found_error
|
139
|
+
end
|
140
|
+
|
141
|
+
# @api private
|
142
|
+
def no_cli_found_error
|
143
|
+
@logger.fatal("The `chef` or `chef-cli` executables cannot be found in your " \
|
144
|
+
"PATH. Ensure you have installed Chef Workstation " \
|
145
|
+
"from https://downloads.chef.io and that your PATH " \
|
146
|
+
"setting includes the path to the `chef` or `chef-cli` commands.")
|
147
|
+
raise UserError, "Could not find the chef or chef-cli executables in your PATH."
|
156
148
|
end
|
157
149
|
|
158
150
|
end
|
@@ -195,18 +195,16 @@ module Kitchen
|
|
195
195
|
FileUtils.mkdir_p(File.dirname(local))
|
196
196
|
|
197
197
|
Array(remotes).each do |file|
|
198
|
+
logger.debug("Attempting to download '#{file}' as file")
|
199
|
+
session.scp.download!(file, local)
|
200
|
+
rescue Net::SCP::Error
|
198
201
|
begin
|
199
|
-
logger.debug("Attempting to download '#{file}' as
|
200
|
-
session.scp.download!(file, local)
|
202
|
+
logger.debug("Attempting to download '#{file}' as directory")
|
203
|
+
session.scp.download!(file, local, recursive: true)
|
201
204
|
rescue Net::SCP::Error
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
rescue Net::SCP::Error
|
206
|
-
logger.warn(
|
207
|
-
"SCP download failed for file or directory '#{file}', perhaps it does not exist?"
|
208
|
-
)
|
209
|
-
end
|
205
|
+
logger.warn(
|
206
|
+
"SCP download failed for file or directory '#{file}', perhaps it does not exist?"
|
207
|
+
)
|
210
208
|
end
|
211
209
|
end
|
212
210
|
rescue Net::SSH::Exception => ex
|
@@ -88,6 +88,7 @@ module Kitchen
|
|
88
88
|
env_state[:environment]["KITCHEN_INSTANCE"] = instance.name
|
89
89
|
env_state[:environment]["KITCHEN_PLATFORM"] = instance.platform.name
|
90
90
|
env_state[:environment]["KITCHEN_SUITE"] = instance.suite.name
|
91
|
+
env_state[:environment]["KITCHEN_USERNAME"] = instance.transport[:username] if instance.respond_to?(:transport)
|
91
92
|
state.each_pair do |key, value|
|
92
93
|
env_state[:environment]["KITCHEN_" + key.to_s.upcase] = value.to_s
|
93
94
|
end
|
data/lib/kitchen/version.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require "chef-utils/dsl/which" unless defined?(ChefUtils::DSL::Which)
|
19
|
+
require_relative "chef_utils_wiring" unless defined?(Ohai::Mixin::ChefUtilsWiring)
|
20
|
+
|
21
|
+
module Kitchen
|
22
|
+
module Which
|
23
|
+
include ChefUtils::DSL::Which
|
24
|
+
include ChefUtilsWiring
|
25
|
+
end
|
26
|
+
end
|
data/test-kitchen.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.executables = %w{kitchen}
|
21
21
|
gem.require_paths = ["lib"]
|
22
22
|
|
23
|
-
gem.required_ruby_version = ">= 2.
|
23
|
+
gem.required_ruby_version = ">= 2.5"
|
24
24
|
|
25
25
|
gem.add_dependency "mixlib-shellout", ">= 1.2", "< 4.0"
|
26
26
|
gem.add_dependency "net-scp", ">= 1.1", "< 4.0" # pinning until we can confirm 4+ works
|
@@ -33,6 +33,7 @@ Gem::Specification.new do |gem|
|
|
33
33
|
gem.add_dependency "winrm", "~> 2.0"
|
34
34
|
gem.add_dependency "winrm-elevated", "~> 1.0"
|
35
35
|
gem.add_dependency "winrm-fs", "~> 1.1"
|
36
|
+
gem.add_dependency "chef-utils", ">= 16.4.35"
|
36
37
|
# Required to run the Chef provisioner local license check for remote systems
|
37
38
|
# TK is not under Chef EULA
|
38
39
|
gem.add_dependency "license-acceptance", ">= 1.0.11", "< 3.0" # pinning until we can confirm 3+ works
|
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: 2.
|
4
|
+
version: 2.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: 2021-01
|
11
|
+
date: 2021-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -194,6 +194,20 @@ dependencies:
|
|
194
194
|
- - "~>"
|
195
195
|
- !ruby/object:Gem::Version
|
196
196
|
version: '1.1'
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: chef-utils
|
199
|
+
requirement: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - ">="
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: 16.4.35
|
204
|
+
type: :runtime
|
205
|
+
prerelease: false
|
206
|
+
version_requirements: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: 16.4.35
|
197
211
|
- !ruby/object:Gem::Dependency
|
198
212
|
name: license-acceptance
|
199
213
|
requirement: !ruby/object:Gem::Requirement
|
@@ -387,6 +401,7 @@ files:
|
|
387
401
|
- bin/kitchen
|
388
402
|
- lib/kitchen.rb
|
389
403
|
- lib/kitchen/base64_stream.rb
|
404
|
+
- lib/kitchen/chef_utils_wiring.rb
|
390
405
|
- lib/kitchen/cli.rb
|
391
406
|
- lib/kitchen/collection.rb
|
392
407
|
- lib/kitchen/color.rb
|
@@ -457,6 +472,7 @@ files:
|
|
457
472
|
- lib/kitchen/verifier/dummy.rb
|
458
473
|
- lib/kitchen/verifier/shell.rb
|
459
474
|
- lib/kitchen/version.rb
|
475
|
+
- lib/kitchen/which.rb
|
460
476
|
- lib/vendor/hash_recursive_merge.rb
|
461
477
|
- support/busser_install_command.ps1
|
462
478
|
- support/busser_install_command.sh
|
@@ -496,7 +512,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
496
512
|
requirements:
|
497
513
|
- - ">="
|
498
514
|
- !ruby/object:Gem::Version
|
499
|
-
version: '2.
|
515
|
+
version: '2.5'
|
500
516
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
501
517
|
requirements:
|
502
518
|
- - ">="
|