test-kitchen 1.7.0 → 1.7.1.dev
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/.cane +8 -8
- data/.gitattributes +3 -0
- data/.github/ISSUE_TEMPLATE.md +55 -55
- data/.gitignore +28 -28
- data/.kitchen.ci.yml +23 -23
- data/.kitchen.proxy.yml +27 -27
- data/.rubocop.yml +3 -3
- data/.travis.yml +70 -70
- data/.yardopts +3 -3
- data/Berksfile +3 -3
- data/CHANGELOG.md +1090 -1083
- data/CONTRIBUTING.md +14 -14
- data/Gemfile +19 -19
- data/Gemfile.proxy_tests +4 -4
- data/Guardfile +42 -42
- data/LICENSE +15 -15
- data/MAINTAINERS.md +23 -23
- data/README.md +135 -135
- data/Rakefile +61 -61
- data/appveyor.yml +44 -44
- data/features/kitchen_action_commands.feature +164 -164
- data/features/kitchen_command.feature +16 -16
- data/features/kitchen_console_command.feature +34 -34
- data/features/kitchen_defaults.feature +38 -38
- data/features/kitchen_diagnose_command.feature +96 -96
- data/features/kitchen_driver_create_command.feature +64 -64
- data/features/kitchen_driver_discover_command.feature +25 -25
- data/features/kitchen_help_command.feature +16 -16
- data/features/kitchen_init_command.feature +274 -274
- data/features/kitchen_list_command.feature +104 -104
- data/features/kitchen_login_command.feature +62 -62
- data/features/kitchen_sink_command.feature +30 -30
- data/features/kitchen_test_command.feature +88 -88
- data/features/step_definitions/gem_steps.rb +36 -36
- data/features/step_definitions/git_steps.rb +5 -5
- data/features/step_definitions/output_steps.rb +5 -5
- data/features/support/env.rb +75 -75
- data/lib/kitchen.rb +150 -150
- data/lib/kitchen/base64_stream.rb +55 -55
- data/lib/kitchen/cli.rb +419 -419
- data/lib/kitchen/collection.rb +55 -55
- data/lib/kitchen/color.rb +65 -65
- data/lib/kitchen/command.rb +185 -185
- data/lib/kitchen/command/action.rb +45 -45
- data/lib/kitchen/command/console.rb +58 -58
- data/lib/kitchen/command/diagnose.rb +92 -92
- data/lib/kitchen/command/driver_discover.rb +105 -105
- data/lib/kitchen/command/exec.rb +41 -41
- data/lib/kitchen/command/list.rb +119 -119
- data/lib/kitchen/command/login.rb +43 -43
- data/lib/kitchen/command/sink.rb +54 -54
- data/lib/kitchen/command/test.rb +51 -51
- data/lib/kitchen/config.rb +322 -322
- data/lib/kitchen/configurable.rb +529 -529
- data/lib/kitchen/data_munger.rb +959 -959
- data/lib/kitchen/diagnostic.rb +141 -141
- data/lib/kitchen/driver.rb +56 -56
- data/lib/kitchen/driver/base.rb +134 -134
- data/lib/kitchen/driver/dummy.rb +108 -108
- data/lib/kitchen/driver/proxy.rb +72 -72
- data/lib/kitchen/driver/ssh_base.rb +357 -357
- data/lib/kitchen/errors.rb +229 -229
- data/lib/kitchen/generator/driver_create.rb +177 -177
- data/lib/kitchen/generator/init.rb +296 -296
- data/lib/kitchen/instance.rb +662 -662
- data/lib/kitchen/lazy_hash.rb +142 -142
- data/lib/kitchen/loader/yaml.rb +349 -349
- data/lib/kitchen/logger.rb +423 -423
- data/lib/kitchen/logging.rb +56 -56
- data/lib/kitchen/login_command.rb +52 -52
- data/lib/kitchen/metadata_chopper.rb +52 -52
- data/lib/kitchen/platform.rb +67 -67
- data/lib/kitchen/provisioner.rb +54 -54
- data/lib/kitchen/provisioner/base.rb +236 -236
- data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
- data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
- data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
- data/lib/kitchen/provisioner/chef_apply.rb +124 -124
- data/lib/kitchen/provisioner/chef_base.rb +341 -341
- data/lib/kitchen/provisioner/chef_solo.rb +88 -88
- data/lib/kitchen/provisioner/chef_zero.rb +245 -245
- data/lib/kitchen/provisioner/dummy.rb +79 -79
- data/lib/kitchen/provisioner/shell.rb +138 -138
- data/lib/kitchen/rake_tasks.rb +63 -63
- data/lib/kitchen/shell_out.rb +93 -93
- data/lib/kitchen/ssh.rb +276 -276
- data/lib/kitchen/state_file.rb +120 -120
- data/lib/kitchen/suite.rb +51 -51
- data/lib/kitchen/thor_tasks.rb +66 -66
- data/lib/kitchen/transport.rb +54 -54
- data/lib/kitchen/transport/base.rb +176 -176
- data/lib/kitchen/transport/dummy.rb +79 -79
- data/lib/kitchen/transport/ssh.rb +364 -364
- data/lib/kitchen/transport/winrm.rb +486 -486
- data/lib/kitchen/util.rb +147 -147
- data/lib/kitchen/verifier.rb +55 -55
- data/lib/kitchen/verifier/base.rb +235 -235
- data/lib/kitchen/verifier/busser.rb +277 -277
- data/lib/kitchen/verifier/dummy.rb +79 -79
- data/lib/kitchen/verifier/shell.rb +101 -101
- data/lib/kitchen/version.rb +21 -21
- data/lib/vendor/hash_recursive_merge.rb +82 -82
- data/spec/kitchen/base64_stream_spec.rb +77 -77
- data/spec/kitchen/cli_spec.rb +56 -56
- data/spec/kitchen/collection_spec.rb +80 -80
- data/spec/kitchen/color_spec.rb +54 -54
- data/spec/kitchen/config_spec.rb +408 -408
- data/spec/kitchen/configurable_spec.rb +1095 -1095
- data/spec/kitchen/data_munger_spec.rb +2694 -2694
- data/spec/kitchen/diagnostic_spec.rb +129 -129
- data/spec/kitchen/driver/base_spec.rb +121 -121
- data/spec/kitchen/driver/dummy_spec.rb +199 -199
- data/spec/kitchen/driver/proxy_spec.rb +138 -138
- data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
- data/spec/kitchen/driver_spec.rb +112 -112
- data/spec/kitchen/errors_spec.rb +309 -309
- data/spec/kitchen/instance_spec.rb +1419 -1419
- data/spec/kitchen/lazy_hash_spec.rb +117 -117
- data/spec/kitchen/loader/yaml_spec.rb +774 -774
- data/spec/kitchen/logger_spec.rb +429 -429
- data/spec/kitchen/logging_spec.rb +59 -59
- data/spec/kitchen/login_command_spec.rb +68 -68
- data/spec/kitchen/metadata_chopper_spec.rb +82 -82
- data/spec/kitchen/platform_spec.rb +89 -89
- data/spec/kitchen/provisioner/base_spec.rb +386 -386
- data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
- data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1161
- data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
- data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
- data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
- data/spec/kitchen/provisioner/shell_spec.rb +566 -566
- data/spec/kitchen/provisioner_spec.rb +107 -107
- data/spec/kitchen/shell_out_spec.rb +150 -150
- data/spec/kitchen/ssh_spec.rb +693 -693
- data/spec/kitchen/state_file_spec.rb +129 -129
- data/spec/kitchen/suite_spec.rb +62 -62
- data/spec/kitchen/transport/base_spec.rb +89 -89
- data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
- data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
- data/spec/kitchen/transport_spec.rb +112 -112
- data/spec/kitchen/util_spec.rb +165 -165
- data/spec/kitchen/verifier/base_spec.rb +362 -362
- data/spec/kitchen/verifier/busser_spec.rb +610 -610
- data/spec/kitchen/verifier/dummy_spec.rb +99 -99
- data/spec/kitchen/verifier/shell_spec.rb +160 -160
- data/spec/kitchen/verifier_spec.rb +120 -120
- data/spec/kitchen_spec.rb +114 -114
- data/spec/spec_helper.rb +85 -85
- data/spec/support/powershell_max_size_spec.rb +40 -40
- data/support/busser_install_command.ps1 +14 -14
- data/support/busser_install_command.sh +14 -14
- data/support/chef-client-zero.rb +77 -77
- data/support/chef_base_init_command.ps1 +18 -18
- data/support/chef_base_init_command.sh +2 -2
- data/support/chef_base_install_command.ps1 +85 -85
- data/support/chef_base_install_command.sh +229 -229
- data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
- data/support/chef_zero_prepare_command_legacy.sh +10 -10
- data/support/download_helpers.sh +109 -109
- data/support/dummy-validation.pem +27 -27
- data/templates/driver/CHANGELOG.md.erb +3 -3
- data/templates/driver/Gemfile.erb +3 -3
- data/templates/driver/README.md.erb +64 -64
- data/templates/driver/Rakefile.erb +21 -21
- data/templates/driver/driver.rb.erb +23 -23
- data/templates/driver/gemspec.erb +29 -29
- data/templates/driver/gitignore.erb +17 -17
- data/templates/driver/license_apachev2.erb +15 -15
- data/templates/driver/license_lgplv3.erb +16 -16
- data/templates/driver/license_mit.erb +22 -22
- data/templates/driver/license_reserved.erb +5 -5
- data/templates/driver/tailor.erb +4 -4
- data/templates/driver/travis.yml.erb +11 -11
- data/templates/driver/version.rb.erb +12 -12
- data/templates/init/chefignore.erb +1 -1
- data/templates/init/kitchen.yml.erb +18 -18
- data/test-kitchen.gemspec +62 -62
- data/test/integration/default/default_spec.rb +3 -3
- data/testing_windows.md +37 -37
- metadata +5 -4
|
@@ -1,79 +1,79 @@
|
|
|
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"
|
|
20
|
-
|
|
21
|
-
module Kitchen
|
|
22
|
-
|
|
23
|
-
module Provisioner
|
|
24
|
-
|
|
25
|
-
# Dummy provisioner for Kitchen. This driver does nothing but report what
|
|
26
|
-
# would happen if this provisioner did anything of consequence. As a result
|
|
27
|
-
# it may be a useful provisioner to use when debugging or developing new
|
|
28
|
-
# features or plugins.
|
|
29
|
-
#
|
|
30
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
31
|
-
class Dummy < Kitchen::Provisioner::Base
|
|
32
|
-
|
|
33
|
-
kitchen_provisioner_api_version 2
|
|
34
|
-
|
|
35
|
-
plugin_version Kitchen::VERSION
|
|
36
|
-
|
|
37
|
-
default_config :sleep, 0
|
|
38
|
-
default_config :random_failure, false
|
|
39
|
-
|
|
40
|
-
# (see Base#call)
|
|
41
|
-
def call(state)
|
|
42
|
-
info("[#{name}] Converge on instance=#{instance} with state=#{state}")
|
|
43
|
-
sleep_if_set
|
|
44
|
-
failure_if_set
|
|
45
|
-
debug("[#{name}] Converge completed (#{config[:sleep]}s).")
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
# Sleep for a period of time, if a value is set in the config.
|
|
51
|
-
#
|
|
52
|
-
# @api private
|
|
53
|
-
def sleep_if_set
|
|
54
|
-
sleep(config[:sleep].to_f) if config[:sleep].to_f > 0.0
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# Simulate a failure in an action, if set in the config.
|
|
58
|
-
#
|
|
59
|
-
# @api private
|
|
60
|
-
def failure_if_set
|
|
61
|
-
if config[:fail]
|
|
62
|
-
debug("Failure for Provisioner #{name}.")
|
|
63
|
-
raise ActionFailed, "Action #converge failed for #{instance.to_str}."
|
|
64
|
-
elsif config[:random_failure] && randomly_fail?
|
|
65
|
-
debug("Random failure for Provisioner #{name}.")
|
|
66
|
-
raise ActionFailed, "Action #converge failed for #{instance.to_str}."
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Determine whether or not to randomly fail.
|
|
71
|
-
#
|
|
72
|
-
# @return [true, false]
|
|
73
|
-
# @api private
|
|
74
|
-
def randomly_fail?
|
|
75
|
-
[true, false].sample
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
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"
|
|
20
|
+
|
|
21
|
+
module Kitchen
|
|
22
|
+
|
|
23
|
+
module Provisioner
|
|
24
|
+
|
|
25
|
+
# Dummy provisioner for Kitchen. This driver does nothing but report what
|
|
26
|
+
# would happen if this provisioner did anything of consequence. As a result
|
|
27
|
+
# it may be a useful provisioner to use when debugging or developing new
|
|
28
|
+
# features or plugins.
|
|
29
|
+
#
|
|
30
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
31
|
+
class Dummy < Kitchen::Provisioner::Base
|
|
32
|
+
|
|
33
|
+
kitchen_provisioner_api_version 2
|
|
34
|
+
|
|
35
|
+
plugin_version Kitchen::VERSION
|
|
36
|
+
|
|
37
|
+
default_config :sleep, 0
|
|
38
|
+
default_config :random_failure, false
|
|
39
|
+
|
|
40
|
+
# (see Base#call)
|
|
41
|
+
def call(state)
|
|
42
|
+
info("[#{name}] Converge on instance=#{instance} with state=#{state}")
|
|
43
|
+
sleep_if_set
|
|
44
|
+
failure_if_set
|
|
45
|
+
debug("[#{name}] Converge completed (#{config[:sleep]}s).")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
# Sleep for a period of time, if a value is set in the config.
|
|
51
|
+
#
|
|
52
|
+
# @api private
|
|
53
|
+
def sleep_if_set
|
|
54
|
+
sleep(config[:sleep].to_f) if config[:sleep].to_f > 0.0
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Simulate a failure in an action, if set in the config.
|
|
58
|
+
#
|
|
59
|
+
# @api private
|
|
60
|
+
def failure_if_set
|
|
61
|
+
if config[:fail]
|
|
62
|
+
debug("Failure for Provisioner #{name}.")
|
|
63
|
+
raise ActionFailed, "Action #converge failed for #{instance.to_str}."
|
|
64
|
+
elsif config[:random_failure] && randomly_fail?
|
|
65
|
+
debug("Random failure for Provisioner #{name}.")
|
|
66
|
+
raise ActionFailed, "Action #converge failed for #{instance.to_str}."
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Determine whether or not to randomly fail.
|
|
71
|
+
#
|
|
72
|
+
# @return [true, false]
|
|
73
|
+
# @api private
|
|
74
|
+
def randomly_fail?
|
|
75
|
+
[true, false].sample
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -1,138 +1,138 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: Chris Lundquist (<chris.lundquist@github.com>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2013, Chris Lundquist
|
|
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/provisioner/base"
|
|
20
|
-
require "kitchen/version"
|
|
21
|
-
|
|
22
|
-
module Kitchen
|
|
23
|
-
|
|
24
|
-
module Provisioner
|
|
25
|
-
|
|
26
|
-
# Basic shell provisioner.
|
|
27
|
-
#
|
|
28
|
-
# @author Chris Lundquist (<chris.ludnquist@github.com>)
|
|
29
|
-
class Shell < Base
|
|
30
|
-
|
|
31
|
-
kitchen_provisioner_api_version 2
|
|
32
|
-
|
|
33
|
-
plugin_version Kitchen::VERSION
|
|
34
|
-
|
|
35
|
-
default_config :script do |provisioner|
|
|
36
|
-
src = provisioner.powershell_shell? ? "bootstrap.ps1" : "bootstrap.sh"
|
|
37
|
-
provisioner.calculate_path(src, :type => :file)
|
|
38
|
-
end
|
|
39
|
-
expand_path_for :script
|
|
40
|
-
|
|
41
|
-
default_config :data_path do |provisioner|
|
|
42
|
-
provisioner.calculate_path("data")
|
|
43
|
-
end
|
|
44
|
-
expand_path_for :data_path
|
|
45
|
-
|
|
46
|
-
# (see Base#create_sandbox)
|
|
47
|
-
def create_sandbox
|
|
48
|
-
super
|
|
49
|
-
prepare_data
|
|
50
|
-
prepare_script
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# (see Base#init_command)
|
|
54
|
-
def init_command
|
|
55
|
-
root = config[:root_path]
|
|
56
|
-
data = remote_path_join(root, "data")
|
|
57
|
-
|
|
58
|
-
code = if powershell_shell?
|
|
59
|
-
Util.outdent!(<<-POWERSHELL)
|
|
60
|
-
if (Test-Path "#{data}") {
|
|
61
|
-
Remove-Item "#{data}" -Recurse -Force
|
|
62
|
-
}
|
|
63
|
-
if (-Not (Test-Path "#{root}")) {
|
|
64
|
-
New-Item "#{root}" -ItemType directory | Out-Null
|
|
65
|
-
}
|
|
66
|
-
POWERSHELL
|
|
67
|
-
else
|
|
68
|
-
"#{sudo("rm")} -rf #{data} ; mkdir -p #{root}"
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
wrap_shell_code(code)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# (see Base#run_command)
|
|
75
|
-
def run_command
|
|
76
|
-
script = remote_path_join(
|
|
77
|
-
config[:root_path],
|
|
78
|
-
File.basename(config[:script])
|
|
79
|
-
)
|
|
80
|
-
code = powershell_shell? ? %{& "#{script}"} : sudo(script)
|
|
81
|
-
|
|
82
|
-
wrap_shell_code(code)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
private
|
|
86
|
-
|
|
87
|
-
# Creates a data directory in the sandbox directory, if a data directory
|
|
88
|
-
# can be found and copies in the tree.
|
|
89
|
-
#
|
|
90
|
-
# @api private
|
|
91
|
-
def prepare_data
|
|
92
|
-
return unless config[:data_path]
|
|
93
|
-
|
|
94
|
-
info("Preparing data")
|
|
95
|
-
debug("Using data from #{config[:data_path]}")
|
|
96
|
-
|
|
97
|
-
tmpdata_dir = File.join(sandbox_path, "data")
|
|
98
|
-
FileUtils.mkdir_p(tmpdata_dir)
|
|
99
|
-
FileUtils.cp_r(Dir.glob("#{config[:data_path]}/*"), tmpdata_dir)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Copies the executable script to the sandbox directory or creates a
|
|
103
|
-
# stub script if one cannot be found.
|
|
104
|
-
#
|
|
105
|
-
# @api private
|
|
106
|
-
def prepare_script
|
|
107
|
-
info("Preparing script")
|
|
108
|
-
|
|
109
|
-
if config[:script]
|
|
110
|
-
debug("Using script from #{config[:script]}")
|
|
111
|
-
FileUtils.cp_r(config[:script], sandbox_path)
|
|
112
|
-
else
|
|
113
|
-
prepare_stubbed_script
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
FileUtils.chmod(0755,
|
|
117
|
-
File.join(sandbox_path, File.basename(config[:script])))
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# Creates a minimal, no-op script in the sandbox path.
|
|
121
|
-
#
|
|
122
|
-
# @api private
|
|
123
|
-
def prepare_stubbed_script
|
|
124
|
-
base = powershell_shell? ? "bootstrap.ps1" : "bootstrap.sh"
|
|
125
|
-
config[:script] = File.join(sandbox_path, base)
|
|
126
|
-
info("#{File.basename(config[:script])} not found " \
|
|
127
|
-
"so Kitchen will run a stubbed script. Is this intended?")
|
|
128
|
-
File.open(config[:script], "wb") do |file|
|
|
129
|
-
if powershell_shell?
|
|
130
|
-
file.write(%{Write-Host "NO BOOTSTRAP SCRIPT PRESENT`n"\n})
|
|
131
|
-
else
|
|
132
|
-
file.write(%{#!/bin/sh\necho "NO BOOTSTRAP SCRIPT PRESENT"\n})
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
end
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Author:: Chris Lundquist (<chris.lundquist@github.com>)
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2013, Chris Lundquist
|
|
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/provisioner/base"
|
|
20
|
+
require "kitchen/version"
|
|
21
|
+
|
|
22
|
+
module Kitchen
|
|
23
|
+
|
|
24
|
+
module Provisioner
|
|
25
|
+
|
|
26
|
+
# Basic shell provisioner.
|
|
27
|
+
#
|
|
28
|
+
# @author Chris Lundquist (<chris.ludnquist@github.com>)
|
|
29
|
+
class Shell < Base
|
|
30
|
+
|
|
31
|
+
kitchen_provisioner_api_version 2
|
|
32
|
+
|
|
33
|
+
plugin_version Kitchen::VERSION
|
|
34
|
+
|
|
35
|
+
default_config :script do |provisioner|
|
|
36
|
+
src = provisioner.powershell_shell? ? "bootstrap.ps1" : "bootstrap.sh"
|
|
37
|
+
provisioner.calculate_path(src, :type => :file)
|
|
38
|
+
end
|
|
39
|
+
expand_path_for :script
|
|
40
|
+
|
|
41
|
+
default_config :data_path do |provisioner|
|
|
42
|
+
provisioner.calculate_path("data")
|
|
43
|
+
end
|
|
44
|
+
expand_path_for :data_path
|
|
45
|
+
|
|
46
|
+
# (see Base#create_sandbox)
|
|
47
|
+
def create_sandbox
|
|
48
|
+
super
|
|
49
|
+
prepare_data
|
|
50
|
+
prepare_script
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# (see Base#init_command)
|
|
54
|
+
def init_command
|
|
55
|
+
root = config[:root_path]
|
|
56
|
+
data = remote_path_join(root, "data")
|
|
57
|
+
|
|
58
|
+
code = if powershell_shell?
|
|
59
|
+
Util.outdent!(<<-POWERSHELL)
|
|
60
|
+
if (Test-Path "#{data}") {
|
|
61
|
+
Remove-Item "#{data}" -Recurse -Force
|
|
62
|
+
}
|
|
63
|
+
if (-Not (Test-Path "#{root}")) {
|
|
64
|
+
New-Item "#{root}" -ItemType directory | Out-Null
|
|
65
|
+
}
|
|
66
|
+
POWERSHELL
|
|
67
|
+
else
|
|
68
|
+
"#{sudo("rm")} -rf #{data} ; mkdir -p #{root}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
wrap_shell_code(code)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# (see Base#run_command)
|
|
75
|
+
def run_command
|
|
76
|
+
script = remote_path_join(
|
|
77
|
+
config[:root_path],
|
|
78
|
+
File.basename(config[:script])
|
|
79
|
+
)
|
|
80
|
+
code = powershell_shell? ? %{& "#{script}"} : sudo(script)
|
|
81
|
+
|
|
82
|
+
wrap_shell_code(code)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
# Creates a data directory in the sandbox directory, if a data directory
|
|
88
|
+
# can be found and copies in the tree.
|
|
89
|
+
#
|
|
90
|
+
# @api private
|
|
91
|
+
def prepare_data
|
|
92
|
+
return unless config[:data_path]
|
|
93
|
+
|
|
94
|
+
info("Preparing data")
|
|
95
|
+
debug("Using data from #{config[:data_path]}")
|
|
96
|
+
|
|
97
|
+
tmpdata_dir = File.join(sandbox_path, "data")
|
|
98
|
+
FileUtils.mkdir_p(tmpdata_dir)
|
|
99
|
+
FileUtils.cp_r(Dir.glob("#{config[:data_path]}/*"), tmpdata_dir)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Copies the executable script to the sandbox directory or creates a
|
|
103
|
+
# stub script if one cannot be found.
|
|
104
|
+
#
|
|
105
|
+
# @api private
|
|
106
|
+
def prepare_script
|
|
107
|
+
info("Preparing script")
|
|
108
|
+
|
|
109
|
+
if config[:script]
|
|
110
|
+
debug("Using script from #{config[:script]}")
|
|
111
|
+
FileUtils.cp_r(config[:script], sandbox_path)
|
|
112
|
+
else
|
|
113
|
+
prepare_stubbed_script
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
FileUtils.chmod(0755,
|
|
117
|
+
File.join(sandbox_path, File.basename(config[:script])))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Creates a minimal, no-op script in the sandbox path.
|
|
121
|
+
#
|
|
122
|
+
# @api private
|
|
123
|
+
def prepare_stubbed_script
|
|
124
|
+
base = powershell_shell? ? "bootstrap.ps1" : "bootstrap.sh"
|
|
125
|
+
config[:script] = File.join(sandbox_path, base)
|
|
126
|
+
info("#{File.basename(config[:script])} not found " \
|
|
127
|
+
"so Kitchen will run a stubbed script. Is this intended?")
|
|
128
|
+
File.open(config[:script], "wb") do |file|
|
|
129
|
+
if powershell_shell?
|
|
130
|
+
file.write(%{Write-Host "NO BOOTSTRAP SCRIPT PRESENT`n"\n})
|
|
131
|
+
else
|
|
132
|
+
file.write(%{#!/bin/sh\necho "NO BOOTSTRAP SCRIPT PRESENT"\n})
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
data/lib/kitchen/rake_tasks.rb
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2012, 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 "rake/tasklib"
|
|
20
|
-
|
|
21
|
-
require "kitchen"
|
|
22
|
-
|
|
23
|
-
module Kitchen
|
|
24
|
-
|
|
25
|
-
# Kitchen Rake task generator.
|
|
26
|
-
#
|
|
27
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
28
|
-
class RakeTasks < ::Rake::TaskLib
|
|
29
|
-
|
|
30
|
-
# Creates Kitchen Rake tasks and allows the callee to configure it.
|
|
31
|
-
#
|
|
32
|
-
# @yield [self] gives itself to the block
|
|
33
|
-
def initialize
|
|
34
|
-
@config = Kitchen::Config.new
|
|
35
|
-
Kitchen.logger = Kitchen.default_file_logger(nil, false)
|
|
36
|
-
yield self if block_given?
|
|
37
|
-
define
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
|
|
42
|
-
# @return [Config] a Kitchen::Config
|
|
43
|
-
attr_reader :config
|
|
44
|
-
|
|
45
|
-
# Generates a test Rake task for each instance and one to test all
|
|
46
|
-
# instances in serial.
|
|
47
|
-
#
|
|
48
|
-
# @api private
|
|
49
|
-
def define
|
|
50
|
-
namespace "kitchen" do
|
|
51
|
-
config.instances.each do |instance|
|
|
52
|
-
desc "Run #{instance.name} test instance"
|
|
53
|
-
task instance.name do
|
|
54
|
-
instance.test(:always)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
desc "Run all test instances"
|
|
59
|
-
task "all" => config.instances.map(&:name)
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2012, 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 "rake/tasklib"
|
|
20
|
+
|
|
21
|
+
require "kitchen"
|
|
22
|
+
|
|
23
|
+
module Kitchen
|
|
24
|
+
|
|
25
|
+
# Kitchen Rake task generator.
|
|
26
|
+
#
|
|
27
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
28
|
+
class RakeTasks < ::Rake::TaskLib
|
|
29
|
+
|
|
30
|
+
# Creates Kitchen Rake tasks and allows the callee to configure it.
|
|
31
|
+
#
|
|
32
|
+
# @yield [self] gives itself to the block
|
|
33
|
+
def initialize
|
|
34
|
+
@config = Kitchen::Config.new
|
|
35
|
+
Kitchen.logger = Kitchen.default_file_logger(nil, false)
|
|
36
|
+
yield self if block_given?
|
|
37
|
+
define
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# @return [Config] a Kitchen::Config
|
|
43
|
+
attr_reader :config
|
|
44
|
+
|
|
45
|
+
# Generates a test Rake task for each instance and one to test all
|
|
46
|
+
# instances in serial.
|
|
47
|
+
#
|
|
48
|
+
# @api private
|
|
49
|
+
def define
|
|
50
|
+
namespace "kitchen" do
|
|
51
|
+
config.instances.each do |instance|
|
|
52
|
+
desc "Run #{instance.name} test instance"
|
|
53
|
+
task instance.name do
|
|
54
|
+
instance.test(:always)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
desc "Run all test instances"
|
|
59
|
+
task "all" => config.instances.map(&:name)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|