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,45 +1,45 @@
|
|
|
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/command"
|
|
20
|
-
|
|
21
|
-
require "benchmark"
|
|
22
|
-
|
|
23
|
-
module Kitchen
|
|
24
|
-
|
|
25
|
-
module Command
|
|
26
|
-
|
|
27
|
-
# Command to run a single action one or more instances.
|
|
28
|
-
#
|
|
29
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
30
|
-
class Action < Kitchen::Command::Base
|
|
31
|
-
|
|
32
|
-
include RunAction
|
|
33
|
-
|
|
34
|
-
# Invoke the command.
|
|
35
|
-
def call
|
|
36
|
-
banner "Starting Kitchen (v#{Kitchen::VERSION})"
|
|
37
|
-
elapsed = Benchmark.measure do
|
|
38
|
-
results = parse_subcommand(args.first)
|
|
39
|
-
run_action(action, results)
|
|
40
|
-
end
|
|
41
|
-
banner "Kitchen is finished. #{Util.duration(elapsed.real)}"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
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/command"
|
|
20
|
+
|
|
21
|
+
require "benchmark"
|
|
22
|
+
|
|
23
|
+
module Kitchen
|
|
24
|
+
|
|
25
|
+
module Command
|
|
26
|
+
|
|
27
|
+
# Command to run a single action one or more instances.
|
|
28
|
+
#
|
|
29
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
30
|
+
class Action < Kitchen::Command::Base
|
|
31
|
+
|
|
32
|
+
include RunAction
|
|
33
|
+
|
|
34
|
+
# Invoke the command.
|
|
35
|
+
def call
|
|
36
|
+
banner "Starting Kitchen (v#{Kitchen::VERSION})"
|
|
37
|
+
elapsed = Benchmark.measure do
|
|
38
|
+
results = parse_subcommand(args.first)
|
|
39
|
+
run_action(action, results)
|
|
40
|
+
end
|
|
41
|
+
banner "Kitchen is finished. #{Util.duration(elapsed.real)}"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -1,58 +1,58 @@
|
|
|
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/command"
|
|
20
|
-
|
|
21
|
-
module Kitchen
|
|
22
|
-
|
|
23
|
-
module Command
|
|
24
|
-
|
|
25
|
-
# Command to launch a Pry-based Kitchen console..
|
|
26
|
-
#
|
|
27
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
28
|
-
class Console < Kitchen::Command::Base
|
|
29
|
-
|
|
30
|
-
# Invoke the command.
|
|
31
|
-
def call
|
|
32
|
-
require "pry"
|
|
33
|
-
Pry.start(@config, :prompt => [prompt(">"), prompt("*")])
|
|
34
|
-
rescue LoadError
|
|
35
|
-
warn %{Make sure you have the pry gem installed. You can install it with:}
|
|
36
|
-
warn %{`gem install pry` or including 'gem "pry"' in your Gemfile.}
|
|
37
|
-
exit 1
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
|
|
42
|
-
# Construct a custom Pry prompt proc.
|
|
43
|
-
#
|
|
44
|
-
# @param char [String] prompt character
|
|
45
|
-
# @return [proc] a prompt proc
|
|
46
|
-
# @api private
|
|
47
|
-
def prompt(char)
|
|
48
|
-
proc { |target_self, nest_level, pry|
|
|
49
|
-
[
|
|
50
|
-
"[#{pry.input_array.size}] ",
|
|
51
|
-
"kc(#{Pry.view_clip(target_self.class)})",
|
|
52
|
-
"#{":#{nest_level}" unless nest_level.zero?}#{char} "
|
|
53
|
-
].join
|
|
54
|
-
}
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
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/command"
|
|
20
|
+
|
|
21
|
+
module Kitchen
|
|
22
|
+
|
|
23
|
+
module Command
|
|
24
|
+
|
|
25
|
+
# Command to launch a Pry-based Kitchen console..
|
|
26
|
+
#
|
|
27
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
28
|
+
class Console < Kitchen::Command::Base
|
|
29
|
+
|
|
30
|
+
# Invoke the command.
|
|
31
|
+
def call
|
|
32
|
+
require "pry"
|
|
33
|
+
Pry.start(@config, :prompt => [prompt(">"), prompt("*")])
|
|
34
|
+
rescue LoadError
|
|
35
|
+
warn %{Make sure you have the pry gem installed. You can install it with:}
|
|
36
|
+
warn %{`gem install pry` or including 'gem "pry"' in your Gemfile.}
|
|
37
|
+
exit 1
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# Construct a custom Pry prompt proc.
|
|
43
|
+
#
|
|
44
|
+
# @param char [String] prompt character
|
|
45
|
+
# @return [proc] a prompt proc
|
|
46
|
+
# @api private
|
|
47
|
+
def prompt(char)
|
|
48
|
+
proc { |target_self, nest_level, pry|
|
|
49
|
+
[
|
|
50
|
+
"[#{pry.input_array.size}] ",
|
|
51
|
+
"kc(#{Pry.view_clip(target_self.class)})",
|
|
52
|
+
"#{":#{nest_level}" unless nest_level.zero?}#{char} "
|
|
53
|
+
].join
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -1,92 +1,92 @@
|
|
|
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/command"
|
|
20
|
-
require "kitchen/diagnostic"
|
|
21
|
-
|
|
22
|
-
require "yaml"
|
|
23
|
-
|
|
24
|
-
module Kitchen
|
|
25
|
-
|
|
26
|
-
module Command
|
|
27
|
-
|
|
28
|
-
# Command to log into to instance.
|
|
29
|
-
#
|
|
30
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
31
|
-
class Diagnose < Kitchen::Command::Base
|
|
32
|
-
|
|
33
|
-
# Invoke the command.
|
|
34
|
-
def call
|
|
35
|
-
instances = record_failure { load_instances }
|
|
36
|
-
|
|
37
|
-
loader = record_failure { load_loader }
|
|
38
|
-
|
|
39
|
-
puts Kitchen::Diagnostic.new(
|
|
40
|
-
:loader => loader, :instances => instances, :plugins => plugins?
|
|
41
|
-
).read.to_yaml
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def plugins?
|
|
47
|
-
options[:all] || options[:plugins]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Loads and returns instances if they are requested.
|
|
51
|
-
#
|
|
52
|
-
# @return [Array<Instance>] an array of instances or an empty array
|
|
53
|
-
# @api private
|
|
54
|
-
def load_instances
|
|
55
|
-
if options[:all] || options[:instances]
|
|
56
|
-
parse_subcommand(args.first)
|
|
57
|
-
else
|
|
58
|
-
[]
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Loads and returns loader configuration if it is requested.
|
|
63
|
-
#
|
|
64
|
-
# @return [Hash,nil] a hash or nil
|
|
65
|
-
# @api private
|
|
66
|
-
def load_loader
|
|
67
|
-
if options[:all] || options[:loader]
|
|
68
|
-
@loader
|
|
69
|
-
else
|
|
70
|
-
nil
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Returns a hash with exception detail if an exception is raised in the
|
|
75
|
-
# yielded block.
|
|
76
|
-
#
|
|
77
|
-
# @return [yield,Hash] the result of the yielded block or an error hash
|
|
78
|
-
# @api private
|
|
79
|
-
def record_failure
|
|
80
|
-
yield
|
|
81
|
-
rescue => e
|
|
82
|
-
{
|
|
83
|
-
:error => {
|
|
84
|
-
:exception => e.inspect,
|
|
85
|
-
:message => e.message,
|
|
86
|
-
:backtrace => e.backtrace
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
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/command"
|
|
20
|
+
require "kitchen/diagnostic"
|
|
21
|
+
|
|
22
|
+
require "yaml"
|
|
23
|
+
|
|
24
|
+
module Kitchen
|
|
25
|
+
|
|
26
|
+
module Command
|
|
27
|
+
|
|
28
|
+
# Command to log into to instance.
|
|
29
|
+
#
|
|
30
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
31
|
+
class Diagnose < Kitchen::Command::Base
|
|
32
|
+
|
|
33
|
+
# Invoke the command.
|
|
34
|
+
def call
|
|
35
|
+
instances = record_failure { load_instances }
|
|
36
|
+
|
|
37
|
+
loader = record_failure { load_loader }
|
|
38
|
+
|
|
39
|
+
puts Kitchen::Diagnostic.new(
|
|
40
|
+
:loader => loader, :instances => instances, :plugins => plugins?
|
|
41
|
+
).read.to_yaml
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def plugins?
|
|
47
|
+
options[:all] || options[:plugins]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Loads and returns instances if they are requested.
|
|
51
|
+
#
|
|
52
|
+
# @return [Array<Instance>] an array of instances or an empty array
|
|
53
|
+
# @api private
|
|
54
|
+
def load_instances
|
|
55
|
+
if options[:all] || options[:instances]
|
|
56
|
+
parse_subcommand(args.first)
|
|
57
|
+
else
|
|
58
|
+
[]
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Loads and returns loader configuration if it is requested.
|
|
63
|
+
#
|
|
64
|
+
# @return [Hash,nil] a hash or nil
|
|
65
|
+
# @api private
|
|
66
|
+
def load_loader
|
|
67
|
+
if options[:all] || options[:loader]
|
|
68
|
+
@loader
|
|
69
|
+
else
|
|
70
|
+
nil
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Returns a hash with exception detail if an exception is raised in the
|
|
75
|
+
# yielded block.
|
|
76
|
+
#
|
|
77
|
+
# @return [yield,Hash] the result of the yielded block or an error hash
|
|
78
|
+
# @api private
|
|
79
|
+
def record_failure
|
|
80
|
+
yield
|
|
81
|
+
rescue => e
|
|
82
|
+
{
|
|
83
|
+
:error => {
|
|
84
|
+
:exception => e.inspect,
|
|
85
|
+
:message => e.message,
|
|
86
|
+
:backtrace => e.backtrace
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -1,105 +1,105 @@
|
|
|
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/command"
|
|
20
|
-
|
|
21
|
-
require "rubygems/spec_fetcher"
|
|
22
|
-
begin
|
|
23
|
-
require "chef-config/config"
|
|
24
|
-
require "chef-config/workstation_config_loader"
|
|
25
|
-
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
|
26
|
-
# This space left intentionally blank.
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
module Kitchen
|
|
30
|
-
|
|
31
|
-
module Command
|
|
32
|
-
|
|
33
|
-
# Command to discover drivers published on RubyGems.
|
|
34
|
-
#
|
|
35
|
-
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
36
|
-
class DriverDiscover < Kitchen::Command::Base
|
|
37
|
-
|
|
38
|
-
# Invoke the command.
|
|
39
|
-
def call
|
|
40
|
-
# We are introducing the idea of using the Chef configuration as a
|
|
41
|
-
# unified config for all the ChefDK tools. The first practical
|
|
42
|
-
# implementation of this is 1 location to setup proxy configurations.
|
|
43
|
-
if defined?(ChefConfig::WorkstationConfigLoader)
|
|
44
|
-
ChefConfig::WorkstationConfigLoader.new(options[:chef_config_path]).load
|
|
45
|
-
end
|
|
46
|
-
ChefConfig::Config.export_proxies if defined?(ChefConfig::Config.export_proxies)
|
|
47
|
-
|
|
48
|
-
specs = fetch_gem_specs.sort { |x, y| x[0] <=> y[0] }
|
|
49
|
-
specs = specs[0, 49].push(["...", "..."]) if specs.size > 49
|
|
50
|
-
specs = specs.unshift(["Gem Name", "Latest Stable Release"])
|
|
51
|
-
print_table(specs, :indent => 4)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
|
|
56
|
-
# Fetches Kitchen-related RubyGems and returns an array of name/version
|
|
57
|
-
# tuples.
|
|
58
|
-
#
|
|
59
|
-
# @return [Array<Array>] an array of name/version tuples
|
|
60
|
-
# @api private
|
|
61
|
-
def fetch_gem_specs
|
|
62
|
-
req = Gem::Requirement.default
|
|
63
|
-
dep = Gem::Deprecate.skip_during do
|
|
64
|
-
Gem::Dependency.new(/kitchen-/i, req)
|
|
65
|
-
end
|
|
66
|
-
fetcher = Gem::SpecFetcher.fetcher
|
|
67
|
-
|
|
68
|
-
if fetcher.respond_to?(:find_matching)
|
|
69
|
-
fetch_gem_specs_pre_rubygems_2(fetcher, dep)
|
|
70
|
-
else
|
|
71
|
-
fetch_gem_specs_post_rubygems_2(fetcher, dep)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Fetches gem specs for RubyGems 2 and later.
|
|
76
|
-
#
|
|
77
|
-
# @param fetcher [Gem::SpecFetcher] a gemspec fetcher
|
|
78
|
-
# @param dep [Gem::Dependency] a gem dependency object
|
|
79
|
-
# @return [Array<Array>] an array of name/version tuples
|
|
80
|
-
# @api private
|
|
81
|
-
def fetch_gem_specs_post_rubygems_2(fetcher, dep)
|
|
82
|
-
specs = fetcher.spec_for_dependency(dep, false)
|
|
83
|
-
specs.first.map { |t| [t.first.name, t.first.version] }
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Fetches gem specs for pre-RubyGems 2.
|
|
87
|
-
#
|
|
88
|
-
# @param fetcher [Gem::SpecFetcher] a gemspec fetcher
|
|
89
|
-
# @param dep [Gem::Dependency] a gem dependency object
|
|
90
|
-
# @return [Array<Array>] an array of name/version tuples
|
|
91
|
-
# @api private
|
|
92
|
-
def fetch_gem_specs_pre_rubygems_2(fetcher, dep)
|
|
93
|
-
specs = fetcher.find_matching(dep, false, false, false)
|
|
94
|
-
specs.map(&:first).map { |t| t[0, 2] }
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Print out a display table.
|
|
98
|
-
#
|
|
99
|
-
# @api private
|
|
100
|
-
def print_table(*args)
|
|
101
|
-
shell.print_table(*args)
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
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/command"
|
|
20
|
+
|
|
21
|
+
require "rubygems/spec_fetcher"
|
|
22
|
+
begin
|
|
23
|
+
require "chef-config/config"
|
|
24
|
+
require "chef-config/workstation_config_loader"
|
|
25
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
|
26
|
+
# This space left intentionally blank.
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module Kitchen
|
|
30
|
+
|
|
31
|
+
module Command
|
|
32
|
+
|
|
33
|
+
# Command to discover drivers published on RubyGems.
|
|
34
|
+
#
|
|
35
|
+
# @author Fletcher Nichol <fnichol@nichol.ca>
|
|
36
|
+
class DriverDiscover < Kitchen::Command::Base
|
|
37
|
+
|
|
38
|
+
# Invoke the command.
|
|
39
|
+
def call
|
|
40
|
+
# We are introducing the idea of using the Chef configuration as a
|
|
41
|
+
# unified config for all the ChefDK tools. The first practical
|
|
42
|
+
# implementation of this is 1 location to setup proxy configurations.
|
|
43
|
+
if defined?(ChefConfig::WorkstationConfigLoader)
|
|
44
|
+
ChefConfig::WorkstationConfigLoader.new(options[:chef_config_path]).load
|
|
45
|
+
end
|
|
46
|
+
ChefConfig::Config.export_proxies if defined?(ChefConfig::Config.export_proxies)
|
|
47
|
+
|
|
48
|
+
specs = fetch_gem_specs.sort { |x, y| x[0] <=> y[0] }
|
|
49
|
+
specs = specs[0, 49].push(["...", "..."]) if specs.size > 49
|
|
50
|
+
specs = specs.unshift(["Gem Name", "Latest Stable Release"])
|
|
51
|
+
print_table(specs, :indent => 4)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
# Fetches Kitchen-related RubyGems and returns an array of name/version
|
|
57
|
+
# tuples.
|
|
58
|
+
#
|
|
59
|
+
# @return [Array<Array>] an array of name/version tuples
|
|
60
|
+
# @api private
|
|
61
|
+
def fetch_gem_specs
|
|
62
|
+
req = Gem::Requirement.default
|
|
63
|
+
dep = Gem::Deprecate.skip_during do
|
|
64
|
+
Gem::Dependency.new(/kitchen-/i, req)
|
|
65
|
+
end
|
|
66
|
+
fetcher = Gem::SpecFetcher.fetcher
|
|
67
|
+
|
|
68
|
+
if fetcher.respond_to?(:find_matching)
|
|
69
|
+
fetch_gem_specs_pre_rubygems_2(fetcher, dep)
|
|
70
|
+
else
|
|
71
|
+
fetch_gem_specs_post_rubygems_2(fetcher, dep)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Fetches gem specs for RubyGems 2 and later.
|
|
76
|
+
#
|
|
77
|
+
# @param fetcher [Gem::SpecFetcher] a gemspec fetcher
|
|
78
|
+
# @param dep [Gem::Dependency] a gem dependency object
|
|
79
|
+
# @return [Array<Array>] an array of name/version tuples
|
|
80
|
+
# @api private
|
|
81
|
+
def fetch_gem_specs_post_rubygems_2(fetcher, dep)
|
|
82
|
+
specs = fetcher.spec_for_dependency(dep, false)
|
|
83
|
+
specs.first.map { |t| [t.first.name, t.first.version] }
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Fetches gem specs for pre-RubyGems 2.
|
|
87
|
+
#
|
|
88
|
+
# @param fetcher [Gem::SpecFetcher] a gemspec fetcher
|
|
89
|
+
# @param dep [Gem::Dependency] a gem dependency object
|
|
90
|
+
# @return [Array<Array>] an array of name/version tuples
|
|
91
|
+
# @api private
|
|
92
|
+
def fetch_gem_specs_pre_rubygems_2(fetcher, dep)
|
|
93
|
+
specs = fetcher.find_matching(dep, false, false, false)
|
|
94
|
+
specs.map(&:first).map { |t| t[0, 2] }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Print out a display table.
|
|
98
|
+
#
|
|
99
|
+
# @api private
|
|
100
|
+
def print_table(*args)
|
|
101
|
+
shell.print_table(*args)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|