test-kitchen 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +8 -7
  3. data/.github/ISSUE_TEMPLATE.md +56 -0
  4. data/.gitignore +28 -27
  5. data/.kitchen.ci.yml +23 -0
  6. data/.kitchen.proxy.yml +27 -0
  7. data/.rubocop.yml +3 -3
  8. data/.travis.yml +70 -53
  9. data/.yardopts +3 -3
  10. data/Berksfile +3 -0
  11. data/CHANGELOG.md +1083 -1051
  12. data/CONTRIBUTING.md +14 -14
  13. data/Gemfile +19 -14
  14. data/Gemfile.proxy_tests +4 -5
  15. data/Guardfile +42 -42
  16. data/LICENSE +15 -15
  17. data/MAINTAINERS.md +23 -24
  18. data/README.md +135 -135
  19. data/Rakefile +61 -76
  20. data/appveyor.yml +44 -34
  21. data/features/kitchen_action_commands.feature +164 -164
  22. data/features/kitchen_command.feature +16 -16
  23. data/features/kitchen_console_command.feature +34 -34
  24. data/features/kitchen_defaults.feature +38 -38
  25. data/features/kitchen_diagnose_command.feature +96 -96
  26. data/features/kitchen_driver_create_command.feature +64 -64
  27. data/features/kitchen_driver_discover_command.feature +25 -25
  28. data/features/kitchen_help_command.feature +16 -16
  29. data/features/kitchen_init_command.feature +274 -274
  30. data/features/kitchen_list_command.feature +104 -104
  31. data/features/kitchen_login_command.feature +62 -62
  32. data/features/kitchen_sink_command.feature +30 -30
  33. data/features/kitchen_test_command.feature +88 -88
  34. data/features/step_definitions/gem_steps.rb +36 -36
  35. data/features/step_definitions/git_steps.rb +5 -5
  36. data/features/step_definitions/output_steps.rb +5 -5
  37. data/features/support/env.rb +75 -75
  38. data/lib/kitchen.rb +150 -150
  39. data/lib/kitchen/base64_stream.rb +55 -55
  40. data/lib/kitchen/cli.rb +419 -419
  41. data/lib/kitchen/collection.rb +55 -55
  42. data/lib/kitchen/color.rb +65 -65
  43. data/lib/kitchen/command.rb +185 -185
  44. data/lib/kitchen/command/action.rb +45 -45
  45. data/lib/kitchen/command/console.rb +58 -58
  46. data/lib/kitchen/command/diagnose.rb +92 -92
  47. data/lib/kitchen/command/driver_discover.rb +105 -105
  48. data/lib/kitchen/command/exec.rb +41 -41
  49. data/lib/kitchen/command/list.rb +119 -119
  50. data/lib/kitchen/command/login.rb +43 -43
  51. data/lib/kitchen/command/sink.rb +54 -54
  52. data/lib/kitchen/command/test.rb +51 -51
  53. data/lib/kitchen/config.rb +322 -322
  54. data/lib/kitchen/configurable.rb +529 -529
  55. data/lib/kitchen/data_munger.rb +959 -960
  56. data/lib/kitchen/diagnostic.rb +141 -141
  57. data/lib/kitchen/driver.rb +56 -56
  58. data/lib/kitchen/driver/base.rb +134 -134
  59. data/lib/kitchen/driver/dummy.rb +108 -108
  60. data/lib/kitchen/driver/proxy.rb +72 -72
  61. data/lib/kitchen/driver/ssh_base.rb +357 -357
  62. data/lib/kitchen/errors.rb +229 -229
  63. data/lib/kitchen/generator/driver_create.rb +177 -177
  64. data/lib/kitchen/generator/init.rb +296 -296
  65. data/lib/kitchen/instance.rb +662 -662
  66. data/lib/kitchen/lazy_hash.rb +142 -142
  67. data/lib/kitchen/loader/yaml.rb +349 -349
  68. data/lib/kitchen/logger.rb +423 -423
  69. data/lib/kitchen/logging.rb +56 -56
  70. data/lib/kitchen/login_command.rb +52 -52
  71. data/lib/kitchen/metadata_chopper.rb +52 -52
  72. data/lib/kitchen/platform.rb +67 -67
  73. data/lib/kitchen/provisioner.rb +54 -54
  74. data/lib/kitchen/provisioner/base.rb +236 -236
  75. data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
  76. data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
  77. data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
  78. data/lib/kitchen/provisioner/chef_apply.rb +124 -125
  79. data/lib/kitchen/provisioner/chef_base.rb +341 -294
  80. data/lib/kitchen/provisioner/chef_solo.rb +88 -89
  81. data/lib/kitchen/provisioner/chef_zero.rb +245 -245
  82. data/lib/kitchen/provisioner/dummy.rb +79 -79
  83. data/lib/kitchen/provisioner/shell.rb +138 -138
  84. data/lib/kitchen/rake_tasks.rb +63 -63
  85. data/lib/kitchen/shell_out.rb +93 -93
  86. data/lib/kitchen/ssh.rb +276 -276
  87. data/lib/kitchen/state_file.rb +120 -120
  88. data/lib/kitchen/suite.rb +51 -51
  89. data/lib/kitchen/thor_tasks.rb +66 -66
  90. data/lib/kitchen/transport.rb +54 -54
  91. data/lib/kitchen/transport/base.rb +176 -176
  92. data/lib/kitchen/transport/dummy.rb +79 -79
  93. data/lib/kitchen/transport/ssh.rb +364 -364
  94. data/lib/kitchen/transport/winrm.rb +486 -486
  95. data/lib/kitchen/util.rb +147 -147
  96. data/lib/kitchen/verifier.rb +55 -55
  97. data/lib/kitchen/verifier/base.rb +235 -235
  98. data/lib/kitchen/verifier/busser.rb +277 -277
  99. data/lib/kitchen/verifier/dummy.rb +79 -79
  100. data/lib/kitchen/verifier/shell.rb +101 -101
  101. data/lib/kitchen/version.rb +21 -21
  102. data/lib/vendor/hash_recursive_merge.rb +82 -82
  103. data/spec/kitchen/base64_stream_spec.rb +77 -77
  104. data/spec/kitchen/cli_spec.rb +56 -56
  105. data/spec/kitchen/collection_spec.rb +80 -80
  106. data/spec/kitchen/color_spec.rb +54 -54
  107. data/spec/kitchen/config_spec.rb +408 -408
  108. data/spec/kitchen/configurable_spec.rb +1095 -1062
  109. data/spec/kitchen/data_munger_spec.rb +2694 -2383
  110. data/spec/kitchen/diagnostic_spec.rb +129 -129
  111. data/spec/kitchen/driver/base_spec.rb +121 -121
  112. data/spec/kitchen/driver/dummy_spec.rb +199 -199
  113. data/spec/kitchen/driver/proxy_spec.rb +138 -138
  114. data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
  115. data/spec/kitchen/driver_spec.rb +112 -112
  116. data/spec/kitchen/errors_spec.rb +309 -309
  117. data/spec/kitchen/instance_spec.rb +1419 -1419
  118. data/spec/kitchen/lazy_hash_spec.rb +117 -117
  119. data/spec/kitchen/loader/yaml_spec.rb +774 -774
  120. data/spec/kitchen/logger_spec.rb +429 -429
  121. data/spec/kitchen/logging_spec.rb +59 -59
  122. data/spec/kitchen/login_command_spec.rb +68 -68
  123. data/spec/kitchen/metadata_chopper_spec.rb +82 -82
  124. data/spec/kitchen/platform_spec.rb +89 -89
  125. data/spec/kitchen/provisioner/base_spec.rb +386 -386
  126. data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
  127. data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1067
  128. data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
  129. data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
  130. data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
  131. data/spec/kitchen/provisioner/shell_spec.rb +566 -566
  132. data/spec/kitchen/provisioner_spec.rb +107 -107
  133. data/spec/kitchen/shell_out_spec.rb +150 -150
  134. data/spec/kitchen/ssh_spec.rb +693 -693
  135. data/spec/kitchen/state_file_spec.rb +129 -129
  136. data/spec/kitchen/suite_spec.rb +62 -62
  137. data/spec/kitchen/transport/base_spec.rb +89 -89
  138. data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
  139. data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
  140. data/spec/kitchen/transport_spec.rb +112 -112
  141. data/spec/kitchen/util_spec.rb +165 -165
  142. data/spec/kitchen/verifier/base_spec.rb +362 -362
  143. data/spec/kitchen/verifier/busser_spec.rb +610 -610
  144. data/spec/kitchen/verifier/dummy_spec.rb +99 -99
  145. data/spec/kitchen/verifier/shell_spec.rb +160 -158
  146. data/spec/kitchen/verifier_spec.rb +120 -120
  147. data/spec/kitchen_spec.rb +114 -114
  148. data/spec/spec_helper.rb +85 -85
  149. data/spec/support/powershell_max_size_spec.rb +40 -40
  150. data/support/busser_install_command.ps1 +14 -14
  151. data/support/busser_install_command.sh +14 -14
  152. data/support/chef-client-zero.rb +77 -77
  153. data/support/chef_base_init_command.ps1 +18 -18
  154. data/support/chef_base_init_command.sh +2 -2
  155. data/support/chef_base_install_command.ps1 +85 -85
  156. data/support/chef_base_install_command.sh +229 -229
  157. data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
  158. data/support/chef_zero_prepare_command_legacy.sh +10 -10
  159. data/support/download_helpers.sh +109 -109
  160. data/support/dummy-validation.pem +27 -27
  161. data/templates/driver/CHANGELOG.md.erb +3 -3
  162. data/templates/driver/Gemfile.erb +3 -3
  163. data/templates/driver/README.md.erb +64 -64
  164. data/templates/driver/Rakefile.erb +21 -21
  165. data/templates/driver/driver.rb.erb +23 -23
  166. data/templates/driver/gemspec.erb +29 -29
  167. data/templates/driver/gitignore.erb +17 -17
  168. data/templates/driver/license_apachev2.erb +15 -15
  169. data/templates/driver/license_lgplv3.erb +16 -16
  170. data/templates/driver/license_mit.erb +22 -22
  171. data/templates/driver/license_reserved.erb +5 -5
  172. data/templates/driver/tailor.erb +4 -4
  173. data/templates/driver/travis.yml.erb +11 -11
  174. data/templates/driver/version.rb.erb +12 -12
  175. data/templates/init/chefignore.erb +1 -1
  176. data/templates/init/kitchen.yml.erb +18 -18
  177. data/test-kitchen.gemspec +62 -62
  178. data/test/integration/default/default_spec.rb +3 -0
  179. data/testing_windows.md +37 -37
  180. metadata +23 -11
@@ -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