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,112 +1,112 @@
|
|
|
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
|
-
|
|
24
|
-
module Provisioner
|
|
25
|
-
|
|
26
|
-
module Chef
|
|
27
|
-
|
|
28
|
-
# Chef cookbook resolver that uses Librarian-Chef and a Cheffile to
|
|
29
|
-
# calculate dependencies.
|
|
30
|
-
#
|
|
31
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
32
|
-
class Librarian
|
|
33
|
-
|
|
34
|
-
include Logging
|
|
35
|
-
|
|
36
|
-
# Creates a new cookbook resolver.
|
|
37
|
-
#
|
|
38
|
-
# @param cheffile [String] path to a Cheffile
|
|
39
|
-
# @param path [String] path in which to vendor the resulting
|
|
40
|
-
# cookbooks
|
|
41
|
-
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
|
42
|
-
# to `Kitchen.logger`
|
|
43
|
-
def initialize(cheffile, path, logger = Kitchen.logger)
|
|
44
|
-
@cheffile = cheffile
|
|
45
|
-
@path = path
|
|
46
|
-
@logger = logger
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Loads the library code required to use the resolver.
|
|
50
|
-
#
|
|
51
|
-
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
|
52
|
-
# to `Kitchen.logger`
|
|
53
|
-
def self.load!(logger = Kitchen.logger)
|
|
54
|
-
load_librarian!(logger)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# Performs the cookbook resolution and vendors the resulting cookbooks
|
|
58
|
-
# in the desired path.
|
|
59
|
-
def resolve
|
|
60
|
-
version = ::Librarian::Chef::VERSION
|
|
61
|
-
info("Resolving cookbook dependencies with Librarian-Chef #{version}...")
|
|
62
|
-
debug("Using Cheffile from #{cheffile}")
|
|
63
|
-
|
|
64
|
-
env = ::Librarian::Chef::Environment.new(
|
|
65
|
-
:project_path => File.dirname(cheffile))
|
|
66
|
-
env.config_db.local["path"] = path
|
|
67
|
-
::Librarian::Action::Resolve.new(env).run
|
|
68
|
-
::Librarian::Action::Install.new(env).run
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
private
|
|
72
|
-
|
|
73
|
-
# @return [String] path to a Cheffile
|
|
74
|
-
# @api private
|
|
75
|
-
attr_reader :cheffile
|
|
76
|
-
|
|
77
|
-
# @return [String] path in which to vendor the resulting cookbooks
|
|
78
|
-
# @api private
|
|
79
|
-
attr_reader :path
|
|
80
|
-
|
|
81
|
-
# @return [Kitchen::Logger] a logger to use for output
|
|
82
|
-
# @api private
|
|
83
|
-
attr_reader :logger
|
|
84
|
-
|
|
85
|
-
# Load the Librarian-specific libary code.
|
|
86
|
-
#
|
|
87
|
-
# @param logger [Kitchen::Logger] the logger to use
|
|
88
|
-
# @raise [UserError] if the library couldn't be loaded
|
|
89
|
-
# @api private
|
|
90
|
-
def self.load_librarian!(logger)
|
|
91
|
-
first_load = require "librarian/chef/environment"
|
|
92
|
-
require "librarian/action/resolve"
|
|
93
|
-
require "librarian/action/install"
|
|
94
|
-
|
|
95
|
-
version = ::Librarian::Chef::VERSION
|
|
96
|
-
if first_load
|
|
97
|
-
logger.debug("Librarian-Chef #{version} library loaded")
|
|
98
|
-
else
|
|
99
|
-
logger.debug("Librarian-Chef #{version} previously loaded")
|
|
100
|
-
end
|
|
101
|
-
rescue LoadError => e
|
|
102
|
-
logger.fatal("The `librarian-chef' gem is missing and must be installed" \
|
|
103
|
-
" or cannot be properly activated. Run" \
|
|
104
|
-
" `gem install librarian-chef` or add the following to your" \
|
|
105
|
-
" Gemfile if you are using Bundler: `gem 'librarian-chef'`.")
|
|
106
|
-
raise UserError,
|
|
107
|
-
"Could not load or activate Librarian-Chef (#{e.message})"
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
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/errors"
|
|
20
|
+
require "kitchen/logging"
|
|
21
|
+
|
|
22
|
+
module Kitchen
|
|
23
|
+
|
|
24
|
+
module Provisioner
|
|
25
|
+
|
|
26
|
+
module Chef
|
|
27
|
+
|
|
28
|
+
# Chef cookbook resolver that uses Librarian-Chef and a Cheffile to
|
|
29
|
+
# calculate dependencies.
|
|
30
|
+
#
|
|
31
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
32
|
+
class Librarian
|
|
33
|
+
|
|
34
|
+
include Logging
|
|
35
|
+
|
|
36
|
+
# Creates a new cookbook resolver.
|
|
37
|
+
#
|
|
38
|
+
# @param cheffile [String] path to a Cheffile
|
|
39
|
+
# @param path [String] path in which to vendor the resulting
|
|
40
|
+
# cookbooks
|
|
41
|
+
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
|
42
|
+
# to `Kitchen.logger`
|
|
43
|
+
def initialize(cheffile, path, logger = Kitchen.logger)
|
|
44
|
+
@cheffile = cheffile
|
|
45
|
+
@path = path
|
|
46
|
+
@logger = logger
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Loads the library code required to use the resolver.
|
|
50
|
+
#
|
|
51
|
+
# @param logger [Kitchen::Logger] a logger to use for output, defaults
|
|
52
|
+
# to `Kitchen.logger`
|
|
53
|
+
def self.load!(logger = Kitchen.logger)
|
|
54
|
+
load_librarian!(logger)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Performs the cookbook resolution and vendors the resulting cookbooks
|
|
58
|
+
# in the desired path.
|
|
59
|
+
def resolve
|
|
60
|
+
version = ::Librarian::Chef::VERSION
|
|
61
|
+
info("Resolving cookbook dependencies with Librarian-Chef #{version}...")
|
|
62
|
+
debug("Using Cheffile from #{cheffile}")
|
|
63
|
+
|
|
64
|
+
env = ::Librarian::Chef::Environment.new(
|
|
65
|
+
:project_path => File.dirname(cheffile))
|
|
66
|
+
env.config_db.local["path"] = path
|
|
67
|
+
::Librarian::Action::Resolve.new(env).run
|
|
68
|
+
::Librarian::Action::Install.new(env).run
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
# @return [String] path to a Cheffile
|
|
74
|
+
# @api private
|
|
75
|
+
attr_reader :cheffile
|
|
76
|
+
|
|
77
|
+
# @return [String] path in which to vendor the resulting cookbooks
|
|
78
|
+
# @api private
|
|
79
|
+
attr_reader :path
|
|
80
|
+
|
|
81
|
+
# @return [Kitchen::Logger] a logger to use for output
|
|
82
|
+
# @api private
|
|
83
|
+
attr_reader :logger
|
|
84
|
+
|
|
85
|
+
# Load the Librarian-specific libary code.
|
|
86
|
+
#
|
|
87
|
+
# @param logger [Kitchen::Logger] the logger to use
|
|
88
|
+
# @raise [UserError] if the library couldn't be loaded
|
|
89
|
+
# @api private
|
|
90
|
+
def self.load_librarian!(logger)
|
|
91
|
+
first_load = require "librarian/chef/environment"
|
|
92
|
+
require "librarian/action/resolve"
|
|
93
|
+
require "librarian/action/install"
|
|
94
|
+
|
|
95
|
+
version = ::Librarian::Chef::VERSION
|
|
96
|
+
if first_load
|
|
97
|
+
logger.debug("Librarian-Chef #{version} library loaded")
|
|
98
|
+
else
|
|
99
|
+
logger.debug("Librarian-Chef #{version} previously loaded")
|
|
100
|
+
end
|
|
101
|
+
rescue LoadError => e
|
|
102
|
+
logger.fatal("The `librarian-chef' gem is missing and must be installed" \
|
|
103
|
+
" or cannot be properly activated. Run" \
|
|
104
|
+
" `gem install librarian-chef` or add the following to your" \
|
|
105
|
+
" Gemfile if you are using Bundler: `gem 'librarian-chef'`.")
|
|
106
|
+
raise UserError,
|
|
107
|
+
"Could not load or activate Librarian-Chef (#{e.message})"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: SAWANOBORI Yukihiko <sawanoboriyu@higanworks.com>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2015, HiganWorks LLC
|
|
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
|
-
# Usage:
|
|
20
|
-
#
|
|
21
|
-
# puts your recipes to` apply/` directory.
|
|
22
|
-
#
|
|
23
|
-
# An example of .kitchen.yml.
|
|
24
|
-
#
|
|
25
|
-
# ---
|
|
26
|
-
# driver:
|
|
27
|
-
# name: vagrant
|
|
28
|
-
#
|
|
29
|
-
# provisioner:
|
|
30
|
-
# name: chef_apply
|
|
31
|
-
#
|
|
32
|
-
# platforms:
|
|
33
|
-
# - name: ubuntu-12.04
|
|
34
|
-
# - name: centos-6.4
|
|
35
|
-
#
|
|
36
|
-
# suites:
|
|
37
|
-
# - name: default
|
|
38
|
-
# run_list:
|
|
39
|
-
# - recipe1
|
|
40
|
-
# - recipe2
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
# The chef-apply runs twice below.
|
|
44
|
-
#
|
|
45
|
-
# chef-apply apply/recipe1.rb
|
|
46
|
-
# chef-apply apply/recipe2.rb
|
|
47
|
-
|
|
48
|
-
require "kitchen/provisioner/chef_base"
|
|
49
|
-
|
|
50
|
-
module Kitchen
|
|
51
|
-
|
|
52
|
-
module Provisioner
|
|
53
|
-
|
|
54
|
-
# Chef Apply provisioner.
|
|
55
|
-
#
|
|
56
|
-
# @author SAWANOBORI Yukihiko <sawanoboriyu@higanworks.com>)
|
|
57
|
-
class ChefApply < ChefBase
|
|
58
|
-
|
|
59
|
-
kitchen_provisioner_api_version 2
|
|
60
|
-
|
|
61
|
-
plugin_version Kitchen::VERSION
|
|
62
|
-
|
|
63
|
-
default_config :chef_apply_path do |provisioner|
|
|
64
|
-
provisioner.
|
|
65
|
-
remote_path_join(%W[#{provisioner[:chef_omnibus_root]} bin chef-apply]).
|
|
66
|
-
tap { |path| path.concat(".bat") if provisioner.windows_os? }
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
default_config :apply_path do |provisioner|
|
|
70
|
-
provisioner.calculate_path("apply")
|
|
71
|
-
end
|
|
72
|
-
expand_path_for :apply_path
|
|
73
|
-
|
|
74
|
-
# (see ChefBase#create_sandbox)
|
|
75
|
-
def create_sandbox
|
|
76
|
-
@sandbox_path = Dir.mktmpdir("#{instance.name}-sandbox-")
|
|
77
|
-
File.chmod(0755, sandbox_path)
|
|
78
|
-
info("Preparing files for transfer")
|
|
79
|
-
debug("Creating local sandbox in #{sandbox_path}")
|
|
80
|
-
|
|
81
|
-
prepare_json
|
|
82
|
-
prepare(:apply)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# (see ChefBase#init_command)
|
|
86
|
-
def init_command
|
|
87
|
-
dirs = %w[
|
|
88
|
-
apply
|
|
89
|
-
].sort.map { |dir| remote_path_join(config[:root_path], dir) }
|
|
90
|
-
|
|
91
|
-
vars = if powershell_shell?
|
|
92
|
-
init_command_vars_for_powershell(dirs)
|
|
93
|
-
else
|
|
94
|
-
init_command_vars_for_bourne(dirs)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
prefix_command(shell_code_from_file(vars, "chef_base_init_command"))
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# (see ChefSolo#run_command)
|
|
101
|
-
def run_command
|
|
102
|
-
level = config[:log_level]
|
|
103
|
-
lines = []
|
|
104
|
-
config[:run_list].map do |recipe|
|
|
105
|
-
cmd = sudo(config[:chef_apply_path]).dup.
|
|
106
|
-
tap { |str| str.insert(0, "& ") if powershell_shell? }
|
|
107
|
-
args = [
|
|
108
|
-
"apply/#{recipe}.rb",
|
|
109
|
-
"--log_level #{level}",
|
|
110
|
-
"--no-color"
|
|
111
|
-
]
|
|
112
|
-
args << "--logfile #{config[:log_file]}" if config[:log_file]
|
|
113
|
-
|
|
114
|
-
lines << wrap_shell_code(
|
|
115
|
-
[cmd, *args].join(" ").
|
|
116
|
-
tap { |str| str.insert(0, reload_ps1_path) if windows_os? }
|
|
117
|
-
)
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
prefix_command(lines.join("\n"))
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Author:: SAWANOBORI Yukihiko <sawanoboriyu@higanworks.com>)
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2015, HiganWorks LLC
|
|
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
|
+
# Usage:
|
|
20
|
+
#
|
|
21
|
+
# puts your recipes to` apply/` directory.
|
|
22
|
+
#
|
|
23
|
+
# An example of .kitchen.yml.
|
|
24
|
+
#
|
|
25
|
+
# ---
|
|
26
|
+
# driver:
|
|
27
|
+
# name: vagrant
|
|
28
|
+
#
|
|
29
|
+
# provisioner:
|
|
30
|
+
# name: chef_apply
|
|
31
|
+
#
|
|
32
|
+
# platforms:
|
|
33
|
+
# - name: ubuntu-12.04
|
|
34
|
+
# - name: centos-6.4
|
|
35
|
+
#
|
|
36
|
+
# suites:
|
|
37
|
+
# - name: default
|
|
38
|
+
# run_list:
|
|
39
|
+
# - recipe1
|
|
40
|
+
# - recipe2
|
|
41
|
+
#
|
|
42
|
+
#
|
|
43
|
+
# The chef-apply runs twice below.
|
|
44
|
+
#
|
|
45
|
+
# chef-apply apply/recipe1.rb
|
|
46
|
+
# chef-apply apply/recipe2.rb
|
|
47
|
+
|
|
48
|
+
require "kitchen/provisioner/chef_base"
|
|
49
|
+
|
|
50
|
+
module Kitchen
|
|
51
|
+
|
|
52
|
+
module Provisioner
|
|
53
|
+
|
|
54
|
+
# Chef Apply provisioner.
|
|
55
|
+
#
|
|
56
|
+
# @author SAWANOBORI Yukihiko <sawanoboriyu@higanworks.com>)
|
|
57
|
+
class ChefApply < ChefBase
|
|
58
|
+
|
|
59
|
+
kitchen_provisioner_api_version 2
|
|
60
|
+
|
|
61
|
+
plugin_version Kitchen::VERSION
|
|
62
|
+
|
|
63
|
+
default_config :chef_apply_path do |provisioner|
|
|
64
|
+
provisioner.
|
|
65
|
+
remote_path_join(%W[#{provisioner[:chef_omnibus_root]} bin chef-apply]).
|
|
66
|
+
tap { |path| path.concat(".bat") if provisioner.windows_os? }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
default_config :apply_path do |provisioner|
|
|
70
|
+
provisioner.calculate_path("apply")
|
|
71
|
+
end
|
|
72
|
+
expand_path_for :apply_path
|
|
73
|
+
|
|
74
|
+
# (see ChefBase#create_sandbox)
|
|
75
|
+
def create_sandbox
|
|
76
|
+
@sandbox_path = Dir.mktmpdir("#{instance.name}-sandbox-")
|
|
77
|
+
File.chmod(0755, sandbox_path)
|
|
78
|
+
info("Preparing files for transfer")
|
|
79
|
+
debug("Creating local sandbox in #{sandbox_path}")
|
|
80
|
+
|
|
81
|
+
prepare_json
|
|
82
|
+
prepare(:apply)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# (see ChefBase#init_command)
|
|
86
|
+
def init_command
|
|
87
|
+
dirs = %w[
|
|
88
|
+
apply
|
|
89
|
+
].sort.map { |dir| remote_path_join(config[:root_path], dir) }
|
|
90
|
+
|
|
91
|
+
vars = if powershell_shell?
|
|
92
|
+
init_command_vars_for_powershell(dirs)
|
|
93
|
+
else
|
|
94
|
+
init_command_vars_for_bourne(dirs)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
prefix_command(shell_code_from_file(vars, "chef_base_init_command"))
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# (see ChefSolo#run_command)
|
|
101
|
+
def run_command
|
|
102
|
+
level = config[:log_level]
|
|
103
|
+
lines = []
|
|
104
|
+
config[:run_list].map do |recipe|
|
|
105
|
+
cmd = sudo(config[:chef_apply_path]).dup.
|
|
106
|
+
tap { |str| str.insert(0, "& ") if powershell_shell? }
|
|
107
|
+
args = [
|
|
108
|
+
"apply/#{recipe}.rb",
|
|
109
|
+
"--log_level #{level}",
|
|
110
|
+
"--no-color"
|
|
111
|
+
]
|
|
112
|
+
args << "--logfile #{config[:log_file]}" if config[:log_file]
|
|
113
|
+
|
|
114
|
+
lines << wrap_shell_code(
|
|
115
|
+
[cmd, *args].join(" ").
|
|
116
|
+
tap { |str| str.insert(0, reload_ps1_path) if windows_os? }
|
|
117
|
+
)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
prefix_command(lines.join("\n"))
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|