test-kitchen 1.14.1 → 1.14.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/Berksfile +1 -1
  3. data/CHANGELOG.md +7 -0
  4. data/Gemfile +1 -1
  5. data/Guardfile +5 -5
  6. data/Rakefile +5 -5
  7. data/bin/kitchen +1 -1
  8. data/features/step_definitions/gem_steps.rb +6 -6
  9. data/features/support/env.rb +6 -7
  10. data/lib/kitchen.rb +5 -7
  11. data/lib/kitchen/base64_stream.rb +2 -8
  12. data/lib/kitchen/cli.rb +76 -80
  13. data/lib/kitchen/collection.rb +0 -2
  14. data/lib/kitchen/color.rb +7 -9
  15. data/lib/kitchen/command.rb +0 -4
  16. data/lib/kitchen/command/action.rb +0 -3
  17. data/lib/kitchen/command/console.rb +4 -7
  18. data/lib/kitchen/command/diagnose.rb +7 -14
  19. data/lib/kitchen/command/driver_discover.rb +1 -4
  20. data/lib/kitchen/command/exec.rb +0 -3
  21. data/lib/kitchen/command/list.rb +9 -12
  22. data/lib/kitchen/command/login.rb +0 -3
  23. data/lib/kitchen/command/package.rb +0 -3
  24. data/lib/kitchen/command/sink.rb +6 -9
  25. data/lib/kitchen/command/test.rb +1 -4
  26. data/lib/kitchen/config.rb +25 -27
  27. data/lib/kitchen/configurable.rb +26 -31
  28. data/lib/kitchen/data_munger.rb +34 -36
  29. data/lib/kitchen/diagnostic.rb +5 -7
  30. data/lib/kitchen/driver.rb +3 -5
  31. data/lib/kitchen/driver/base.rb +0 -3
  32. data/lib/kitchen/driver/dummy.rb +0 -3
  33. data/lib/kitchen/driver/proxy.rb +0 -3
  34. data/lib/kitchen/driver/ssh_base.rb +13 -16
  35. data/lib/kitchen/errors.rb +11 -16
  36. data/lib/kitchen/generator/driver_create.rb +18 -21
  37. data/lib/kitchen/generator/init.rb +21 -26
  38. data/lib/kitchen/instance.rb +19 -23
  39. data/lib/kitchen/lazy_hash.rb +1 -2
  40. data/lib/kitchen/loader/yaml.rb +22 -25
  41. data/lib/kitchen/logger.rb +9 -14
  42. data/lib/kitchen/logging.rb +0 -3
  43. data/lib/kitchen/login_command.rb +0 -2
  44. data/lib/kitchen/metadata_chopper.rb +0 -2
  45. data/lib/kitchen/platform.rb +1 -3
  46. data/lib/kitchen/provisioner.rb +3 -5
  47. data/lib/kitchen/provisioner/base.rb +2 -5
  48. data/lib/kitchen/provisioner/chef/berkshelf.rb +1 -5
  49. data/lib/kitchen/provisioner/chef/common_sandbox.rb +24 -29
  50. data/lib/kitchen/provisioner/chef/librarian.rb +2 -6
  51. data/lib/kitchen/provisioner/chef/policyfile.rb +4 -8
  52. data/lib/kitchen/provisioner/chef_apply.rb +14 -17
  53. data/lib/kitchen/provisioner/chef_base.rb +43 -46
  54. data/lib/kitchen/provisioner/chef_solo.rb +10 -13
  55. data/lib/kitchen/provisioner/chef_zero.rb +22 -29
  56. data/lib/kitchen/provisioner/dummy.rb +0 -3
  57. data/lib/kitchen/provisioner/shell.rb +6 -9
  58. data/lib/kitchen/rake_tasks.rb +4 -6
  59. data/lib/kitchen/shell_out.rb +3 -5
  60. data/lib/kitchen/ssh.rb +16 -22
  61. data/lib/kitchen/state_file.rb +3 -5
  62. data/lib/kitchen/suite.rb +0 -2
  63. data/lib/kitchen/thor_tasks.rb +2 -4
  64. data/lib/kitchen/transport.rb +3 -5
  65. data/lib/kitchen/transport/base.rb +1 -7
  66. data/lib/kitchen/transport/dummy.rb +0 -4
  67. data/lib/kitchen/transport/ssh.rb +41 -47
  68. data/lib/kitchen/transport/winrm.rb +41 -40
  69. data/lib/kitchen/util.rb +1 -3
  70. data/lib/kitchen/verifier.rb +3 -5
  71. data/lib/kitchen/verifier/base.rb +2 -5
  72. data/lib/kitchen/verifier/busser.rb +24 -24
  73. data/lib/kitchen/verifier/dummy.rb +0 -3
  74. data/lib/kitchen/verifier/shell.rb +1 -3
  75. data/lib/kitchen/version.rb +1 -1
  76. data/lib/vendor/hash_recursive_merge.rb +0 -2
  77. data/spec/kitchen/base64_stream_spec.rb +3 -6
  78. data/spec/kitchen/cli_spec.rb +0 -2
  79. data/spec/kitchen/collection_spec.rb +4 -8
  80. data/spec/kitchen/color_spec.rb +0 -3
  81. data/spec/kitchen/config_spec.rb +91 -106
  82. data/spec/kitchen/configurable_spec.rb +44 -76
  83. data/spec/kitchen/data_munger_spec.rb +1178 -1247
  84. data/spec/kitchen/diagnostic_spec.rb +37 -38
  85. data/spec/kitchen/driver/base_spec.rb +7 -14
  86. data/spec/kitchen/driver/dummy_spec.rb +1 -7
  87. data/spec/kitchen/driver/proxy_spec.rb +2 -7
  88. data/spec/kitchen/driver/ssh_base_spec.rb +128 -149
  89. data/spec/kitchen/driver_spec.rb +7 -13
  90. data/spec/kitchen/errors_spec.rb +50 -60
  91. data/spec/kitchen/instance_spec.rb +217 -294
  92. data/spec/kitchen/lazy_hash_spec.rb +14 -18
  93. data/spec/kitchen/loader/yaml_spec.rb +201 -227
  94. data/spec/kitchen/logger_spec.rb +7 -15
  95. data/spec/kitchen/logging_spec.rb +1 -4
  96. data/spec/kitchen/login_command_spec.rb +3 -4
  97. data/spec/kitchen/metadata_chopper_spec.rb +0 -3
  98. data/spec/kitchen/platform_spec.rb +31 -32
  99. data/spec/kitchen/provisioner/base_spec.rb +22 -41
  100. data/spec/kitchen/provisioner/chef/policyfile_spec.rb +15 -15
  101. data/spec/kitchen/provisioner/chef_apply_spec.rb +8 -13
  102. data/spec/kitchen/provisioner/chef_base_spec.rb +150 -182
  103. data/spec/kitchen/provisioner/chef_solo_spec.rb +58 -72
  104. data/spec/kitchen/provisioner/chef_zero_spec.rb +99 -125
  105. data/spec/kitchen/provisioner/dummy_spec.rb +8 -11
  106. data/spec/kitchen/provisioner/shell_spec.rb +86 -103
  107. data/spec/kitchen/provisioner_spec.rb +5 -11
  108. data/spec/kitchen/shell_out_spec.rb +15 -19
  109. data/spec/kitchen/ssh_spec.rb +16 -35
  110. data/spec/kitchen/state_file_spec.rb +6 -11
  111. data/spec/kitchen/suite_spec.rb +5 -6
  112. data/spec/kitchen/transport/base_spec.rb +6 -14
  113. data/spec/kitchen/transport/ssh_spec.rb +39 -64
  114. data/spec/kitchen/transport/winrm_spec.rb +99 -127
  115. data/spec/kitchen/transport_spec.rb +7 -13
  116. data/spec/kitchen/util_spec.rb +17 -26
  117. data/spec/kitchen/verifier/base_spec.rb +24 -40
  118. data/spec/kitchen/verifier/busser_spec.rb +38 -68
  119. data/spec/kitchen/verifier/dummy_spec.rb +8 -11
  120. data/spec/kitchen/verifier/shell_spec.rb +14 -17
  121. data/spec/kitchen/verifier_spec.rb +7 -13
  122. data/spec/kitchen_spec.rb +4 -6
  123. data/spec/spec_helper.rb +1 -1
  124. data/spec/support/powershell_max_size_spec.rb +1 -2
  125. data/support/chef-client-zero.rb +3 -4
  126. data/test-kitchen.gemspec +4 -6
  127. metadata +9 -9
@@ -19,14 +19,11 @@
19
19
  require "kitchen/lazy_hash"
20
20
 
21
21
  module Kitchen
22
-
23
22
  module Driver
24
-
25
23
  # Base class for a driver.
26
24
  #
27
25
  # @author Fletcher Nichol <fnichol@nichol.ca>
28
26
  class Base
29
-
30
27
  include Configurable
31
28
  include Logging
32
29
 
@@ -19,9 +19,7 @@
19
19
  require "kitchen"
20
20
 
21
21
  module Kitchen
22
-
23
22
  module Driver
24
-
25
23
  # Dummy driver for Kitchen. This driver does nothing but report what would
26
24
  # happen if this driver did anything of consequence. As a result it may
27
25
  # be a useful driver to use when debugging or developing new features or
@@ -29,7 +27,6 @@ module Kitchen
29
27
  #
30
28
  # @author Fletcher Nichol <fnichol@nichol.ca>
31
29
  class Dummy < Kitchen::Driver::Base
32
-
33
30
  kitchen_driver_api_version 2
34
31
 
35
32
  plugin_version Kitchen::VERSION
@@ -22,9 +22,7 @@ require "kitchen"
22
22
  require "kitchen/version"
23
23
 
24
24
  module Kitchen
25
-
26
25
  module Driver
27
-
28
26
  # Simple driver that proxies commands through to a test instance whose
29
27
  # lifecycle is not managed by Test Kitchen. This driver is useful for long-
30
28
  # lived non-ephemeral test instances that are simply "reset" between test
@@ -33,7 +31,6 @@ module Kitchen
33
31
  #
34
32
  # @author Seth Chisamore <schisamo@opscode.com>
35
33
  class Proxy < Kitchen::Driver::SSHBase
36
-
37
34
  plugin_version Kitchen::VERSION
38
35
 
39
36
  required_config :host
@@ -22,9 +22,7 @@ require "kitchen/lazy_hash"
22
22
  require "benchmark"
23
23
 
24
24
  module Kitchen
25
-
26
25
  module Driver
27
-
28
26
  # Legacy base class for a driver that uses SSH to communication with an
29
27
  # instance. This class has been updated to use the Instance's Transport to
30
28
  # issue commands and transfer files and no longer uses the `Kitchen:SSH`
@@ -46,7 +44,6 @@ module Kitchen
46
44
  # Drivers. When legacy Driver::SSHBase support is removed, this class
47
45
  # will no longer be available.
48
46
  class SSHBase
49
-
50
47
  include ShellOut
51
48
  include Configurable
52
49
  include Logging
@@ -138,8 +135,8 @@ module Kitchen
138
135
 
139
136
  # (see Base#login_command)
140
137
  def login_command(state)
141
- instance.transport.connection(backcompat_merged_state(state)).
142
- login_command
138
+ instance.transport.connection(backcompat_merged_state(state))
139
+ .login_command
143
140
  end
144
141
 
145
142
  # Executes an arbitrary command on an instance over an SSH connection.
@@ -160,7 +157,7 @@ module Kitchen
160
157
  # @deprecated This method should no longer be called directly and exists
161
158
  # to support very old drivers. This will be removed in the future.
162
159
  def ssh(ssh_args, command)
163
- pseudo_state = { :hostname => ssh_args[0], :username => ssh_args[1] }
160
+ pseudo_state = { hostname: ssh_args[0], username: ssh_args[1] }
164
161
  pseudo_state.merge!(ssh_args[2])
165
162
  connection_state = backcompat_merged_state(pseudo_state)
166
163
 
@@ -226,9 +223,9 @@ module Kitchen
226
223
  private
227
224
 
228
225
  def backcompat_merged_state(state)
229
- driver_ssh_keys = %w[
226
+ driver_ssh_keys = %w{
230
227
  forward_agent hostname password port ssh_key username
231
- ].map(&:to_sym)
228
+ }.map(&:to_sym)
232
229
  config.select { |key, _| driver_ssh_keys.include?(key) }.rmerge(state)
233
230
  end
234
231
 
@@ -240,7 +237,7 @@ module Kitchen
240
237
  def build_ssh_args(state)
241
238
  combined = config.to_hash.merge(state)
242
239
 
243
- opts = Hash.new
240
+ opts = {}
244
241
  opts[:user_known_hosts_file] = "/dev/null"
245
242
  opts[:paranoid] = false
246
243
  opts[:keys_only] = true if combined[:ssh_key]
@@ -272,8 +269,8 @@ module Kitchen
272
269
  no_proxy = if (!config[:http_proxy] && http_proxy) ||
273
270
  (!config[:https_proxy] && https_proxy) ||
274
271
  (!config[:ftp_proxy] && ftp_proxy)
275
- ENV["no_proxy"] || ENV["NO_PROXY"]
276
- end
272
+ ENV["no_proxy"] || ENV["NO_PROXY"]
273
+ end
277
274
  env << " http_proxy=#{http_proxy}" if http_proxy
278
275
  env << " https_proxy=#{https_proxy}" if https_proxy
279
276
  env << " ftp_proxy=#{ftp_proxy}" if ftp_proxy
@@ -335,12 +332,12 @@ module Kitchen
335
332
  # @param options [Hash] configuration hash (default: `{}`)
336
333
  # @api private
337
334
  def wait_for_sshd(hostname, username = nil, options = {})
338
- pseudo_state = { :hostname => hostname }
335
+ pseudo_state = { hostname: hostname }
339
336
  pseudo_state[:username] = username if username
340
337
  pseudo_state.merge!(options)
341
338
 
342
- instance.transport.connection(backcompat_merged_state(pseudo_state)).
343
- wait_until_ready
339
+ instance.transport.connection(backcompat_merged_state(pseudo_state))
340
+ .wait_until_ready
344
341
  end
345
342
 
346
343
  # Intercepts any bare #puts calls in subclasses and issues an INFO log
@@ -370,8 +367,8 @@ module Kitchen
370
367
  # @see ShellOut#run_command
371
368
  def run_command(cmd, options = {})
372
369
  base_options = {
373
- :use_sudo => config[:use_sudo],
374
- :log_subject => Thor::Util.snake_case(self.class.to_s)
370
+ use_sudo: config[:use_sudo],
371
+ log_subject: Thor::Util.snake_case(self.class.to_s),
375
372
  }.merge(options)
376
373
  super(cmd, base_options)
377
374
  end
@@ -19,12 +19,10 @@
19
19
  require "English"
20
20
 
21
21
  module Kitchen
22
-
23
22
  # All Kitchen errors and exceptions.
24
23
  #
25
24
  # @author Fletcher Nichol <fnichol@nichol.ca>
26
25
  module Error
27
-
28
26
  # Creates an array of strings, representing a formatted exception,
29
27
  # containing backtrace and nested exception info as necessary, that can
30
28
  # be viewed by a human.
@@ -49,15 +47,15 @@ module Kitchen
49
47
 
50
48
  if exception.respond_to?(:original) && exception.original
51
49
  arr += if exception.original.is_a? Array
52
- exception.original.map do |composite_exception|
53
- formatted_trace(composite_exception, "Composite Exception").flatten
54
- end
55
- else
56
- [
57
- formatted_exception(exception.original, "Nested Exception"),
58
- formatted_backtrace(exception)
59
- ].flatten
60
- end
50
+ exception.original.map do |composite_exception|
51
+ formatted_trace(composite_exception, "Composite Exception").flatten
52
+ end
53
+ else
54
+ [
55
+ formatted_exception(exception.original, "Nested Exception"),
56
+ formatted_backtrace(exception),
57
+ ].flatten
58
+ end
61
59
  end
62
60
  arr.flatten
63
61
  end
@@ -69,7 +67,7 @@ module Kitchen
69
67
  [
70
68
  "Backtrace".center(22, "-"),
71
69
  exception.backtrace,
72
- "End Backtrace".center(22, "-")
70
+ "End Backtrace".center(22, "-"),
73
71
  ]
74
72
  end
75
73
  end
@@ -94,7 +92,7 @@ module Kitchen
94
92
  title.center(22, "-"),
95
93
  "Class: #{exception.class}",
96
94
  "Message: #{exception.message}",
97
- "".center(22, "-")
95
+ "".center(22, "-"),
98
96
  ]
99
97
  end
100
98
  end
@@ -102,7 +100,6 @@ module Kitchen
102
100
  # Base exception class from which all Kitchen exceptions derive. This class
103
101
  # nests an exception when this class is re-raised from a rescue block.
104
102
  class StandardError < ::StandardError
105
-
106
103
  include Error
107
104
 
108
105
  # @return [::StandardError] the original (wrapped) exception
@@ -184,8 +181,6 @@ module Kitchen
184
181
  exit 20
185
182
  end
186
183
 
187
- private
188
-
189
184
  # Writes an array of lines to the common Kitchen logger's file device at the
190
185
  # given severity level. If the Kitchen logger is set to debug severity, then
191
186
  # the array of lines will also be written to the console output.
@@ -20,22 +20,19 @@ require "thor/group"
20
20
  require "thor/util"
21
21
 
22
22
  module Kitchen
23
-
24
23
  module Generator
25
-
26
24
  # A generator to create a new Kitchen Driver gem project.
27
25
  #
28
26
  # @author Fletcher Nichol <fnichol@nichol.ca>
29
27
  class DriverCreate < Thor::Group
30
-
31
28
  include Thor::Actions
32
29
 
33
- argument :name, :type => :string
30
+ argument :name, type: :string
34
31
 
35
32
  class_option :license,
36
- :aliases => "-l",
37
- :default => "apachev2",
38
- :desc => "License type for gem (apachev2, mit, lgplv3, reserved)"
33
+ aliases: "-l",
34
+ default: "apachev2",
35
+ desc: "License type for gem (apachev2, mit, lgplv3, reserved)"
39
36
 
40
37
  # Invoke the command.
41
38
  def create
@@ -87,8 +84,8 @@ module Kitchen
87
84
  # @api private
88
85
  def initialize_git
89
86
  inside(target_dir) do
90
- run("git init", :capture => true)
91
- run("git add .", :capture => true)
87
+ run("git init", capture: true)
88
+ run("git add .", capture: true)
92
89
  end
93
90
  end
94
91
 
@@ -112,16 +109,16 @@ module Kitchen
112
109
  # @api private
113
110
  def config
114
111
  @config ||= {
115
- :name => name,
116
- :gem_name => "kitchen-#{name}",
117
- :gemspec => "kitchen-#{name}.gemspec",
118
- :klass_name => ::Thor::Util.camel_case(name),
119
- :constant_name => ::Thor::Util.snake_case(name).upcase,
120
- :author => author,
121
- :email => email,
122
- :license => options[:license],
123
- :license_string => license_string,
124
- :year => Time.now.year
112
+ name: name,
113
+ gem_name: "kitchen-#{name}",
114
+ gemspec: "kitchen-#{name}.gemspec",
115
+ klass_name: ::Thor::Util.camel_case(name),
116
+ constant_name: ::Thor::Util.snake_case(name).upcase,
117
+ author: author,
118
+ email: email,
119
+ license: options[:license],
120
+ license_string: license_string,
121
+ year: Time.now.year,
125
122
  }
126
123
  end
127
124
 
@@ -169,8 +166,8 @@ module Kitchen
169
166
  # @return [String] the license comment/preamble
170
167
  # @api private
171
168
  def license_comment
172
- @license_comment ||= IO.read(File.join(target_dir, license_filename)).
173
- gsub(/^/, "# ").gsub(/\s+$/, "")
169
+ @license_comment ||= IO.read(File.join(target_dir, license_filename))
170
+ .gsub(/^/, "# ").gsub(/\s+$/, "")
174
171
  end
175
172
  end
176
173
  end
@@ -20,38 +20,35 @@ require "rubygems/gem_runner"
20
20
  require "thor/group"
21
21
 
22
22
  module Kitchen
23
-
24
23
  module Generator
25
-
26
24
  # A project initialization generator, to help prepare a cookbook project
27
25
  # for testing with Kitchen.
28
26
  #
29
27
  # @author Fletcher Nichol <fnichol@nichol.ca>
30
28
  class Init < Thor::Group
31
-
32
29
  include Thor::Actions
33
30
 
34
31
  class_option :driver,
35
- :type => :array,
36
- :aliases => "-D",
37
- :default => %w[kitchen-vagrant],
38
- :desc => <<-D.gsub(/^\s+/, "").gsub(/\n/, " ")
32
+ type: :array,
33
+ aliases: "-D",
34
+ default: %w{kitchen-vagrant},
35
+ desc: <<-D.gsub(/^\s+/, "").tr("\n", " ")
39
36
  One or more Kitchen Driver gems to be installed or added to a
40
37
  Gemfile
41
38
  D
42
39
 
43
40
  class_option :provisioner,
44
- :type => :string,
45
- :aliases => "-P",
46
- :default => "chef_solo",
47
- :desc => <<-D.gsub(/^\s+/, "").gsub(/\n/, " ")
41
+ type: :string,
42
+ aliases: "-P",
43
+ default: "chef_solo",
44
+ desc: <<-D.gsub(/^\s+/, "").tr("\n", " ")
48
45
  The default Kitchen Provisioner to use
49
46
  D
50
47
 
51
48
  class_option :create_gemfile,
52
- :type => :boolean,
53
- :default => false,
54
- :desc => <<-D.gsub(/^\s+/, "").gsub(/\n/, " ")
49
+ type: :boolean,
50
+ default: false,
51
+ desc: <<-D.gsub(/^\s+/, "").tr("\n", " ")
55
52
  Whether or not to create a Gemfile if one does not exist.
56
53
  Default: false
57
54
  D
@@ -78,18 +75,16 @@ module Kitchen
78
75
  # @api private
79
76
  def create_kitchen_yaml
80
77
  cookbook_name = if File.exist?(File.expand_path("metadata.rb"))
81
- MetadataChopper.extract("metadata.rb").first
82
- else
83
- nil
84
- end
78
+ MetadataChopper.extract("metadata.rb").first
79
+ end
85
80
  run_list = cookbook_name ? "recipe[#{cookbook_name}::default]" : nil
86
81
  driver_plugin = Array(options[:driver]).first || "dummy"
87
82
 
88
83
  template("kitchen.yml.erb", ".kitchen.yml",
89
- :driver_plugin => driver_plugin.sub(/^kitchen-/, ""),
90
- :provisioner => options[:provisioner],
91
- :run_list => Array(run_list)
92
- )
84
+ driver_plugin: driver_plugin.sub(/^kitchen-/, ""),
85
+ provisioner: options[:provisioner],
86
+ run_list: Array(run_list)
87
+ )
93
88
  end
94
89
 
95
90
  # Creates the `chefignore` file.
@@ -193,7 +188,7 @@ module Kitchen
193
188
  def append_to_gitignore(line)
194
189
  create_file(".gitignore") unless File.exist?(File.join(destination_root, ".gitignore"))
195
190
 
196
- if IO.readlines(File.join(destination_root, ".gitignore")).grep(%r{^#{line}}).empty?
191
+ if IO.readlines(File.join(destination_root, ".gitignore")).grep(/^#{line}/).empty?
197
192
  append_to_file(".gitignore", "#{line}\n")
198
193
  end
199
194
  end
@@ -221,7 +216,7 @@ module Kitchen
221
216
  #
222
217
  # @api private
223
218
  def add_gem_to_gemfile
224
- if not_in_file?("Gemfile", %r{gem ('|")test-kitchen('|")})
219
+ if not_in_file?("Gemfile", /gem ('|")test-kitchen('|")/)
225
220
  append_to_file("Gemfile", %{gem "test-kitchen"\n})
226
221
  @display_bundle_msg = true
227
222
  end
@@ -246,7 +241,7 @@ module Kitchen
246
241
  #
247
242
  # @api private
248
243
  def add_driver_to_gemfile(driver_gem)
249
- if not_in_file?("Gemfile", %r{gem ('|")#{driver_gem}('|")})
244
+ if not_in_file?("Gemfile", /gem ('|")#{driver_gem}('|")/)
250
245
  append_to_file("Gemfile", %{gem "#{driver_gem}"\n})
251
246
  @display_bundle_msg = true
252
247
  end
@@ -285,7 +280,7 @@ module Kitchen
285
280
  #
286
281
  # @api private
287
282
  def unbundlerize
288
- keys = ENV.keys.select { |key| key =~ /^BUNDLER?_/ } + %w[RUBYOPT]
283
+ keys = ENV.keys.select { |key| key =~ /^BUNDLER?_/ } + %w{RUBYOPT}
289
284
 
290
285
  keys.each { |key| ENV["__#{key}"] = ENV[key]; ENV.delete(key) }
291
286
  yield
@@ -20,18 +20,15 @@ require "benchmark"
20
20
  require "fileutils"
21
21
 
22
22
  module Kitchen
23
-
24
23
  # An instance of a suite running on a platform. A created instance may be a
25
24
  # local virtual machine, cloud instance, container, or even a bare metal
26
25
  # server, which is determined by the platform's driver.
27
26
  #
28
27
  # @author Fletcher Nichol <fnichol@nichol.ca>
29
28
  class Instance
30
-
31
29
  include Logging
32
30
 
33
31
  class << self
34
-
35
32
  # @return [Hash] a hash of mutxes, arranged by Driver class names
36
33
  # @api private
37
34
  attr_accessor :mutexes
@@ -42,7 +39,7 @@ module Kitchen
42
39
  # @param platform [Platform,#name] a Platform
43
40
  # @return [String] a normalized, consistent name for an instance
44
41
  def name_for(suite, platform)
45
- "#{suite.name}-#{platform.name}".gsub(%r{[_,/]}, "-").gsub(/\./, "")
42
+ "#{suite.name}-#{platform.name}".gsub(%r{[_,/]}, "-").delete(".")
46
43
  end
47
44
  end
48
45
 
@@ -210,12 +207,12 @@ module Kitchen
210
207
  end
211
208
 
212
209
  lc = if legacy_ssh_base_driver?
213
- legacy_ssh_base_login(state)
214
- else
215
- transport.connection(state).login_command
216
- end
210
+ legacy_ssh_base_login(state)
211
+ else
212
+ transport.connection(state).login_command
213
+ end
217
214
 
218
- debug(%{Login command: #{lc.command} #{lc.arguments.join(" ")} } \
215
+ debug(%{Login command: #{lc.command} #{lc.arguments.join(' ')} } \
219
216
  "(Options: #{lc.options})")
220
217
  Kernel.exec(*lc.exec_args)
221
218
  end
@@ -240,7 +237,7 @@ module Kitchen
240
237
  #
241
238
  # @return [Hash] a diagnostic hash
242
239
  def diagnose
243
- result = Hash.new
240
+ result = {}
244
241
  [
245
242
  :platform, :state_file, :driver, :provisioner, :transport, :verifier
246
243
  ].each do |sym|
@@ -255,14 +252,14 @@ module Kitchen
255
252
  #
256
253
  # @return [Hash] a diagnostic hash
257
254
  def diagnose_plugins
258
- result = Hash.new
255
+ result = {}
259
256
  [:driver, :provisioner, :verifier, :transport].each do |sym|
260
257
  obj = send(sym)
261
258
  result[sym] = if obj.respond_to?(:diagnose_plugin)
262
- obj.diagnose_plugin
263
- else
264
- :unknown
265
- end
259
+ obj.diagnose_plugin
260
+ else
261
+ :unknown
262
+ end
266
263
  end
267
264
  result
268
265
  end
@@ -321,7 +318,7 @@ module Kitchen
321
318
 
322
319
  if driver.class.serial_actions
323
320
  Kitchen.mutex.synchronize do
324
- self.class.mutexes ||= Hash.new
321
+ self.class.mutexes ||= {}
325
322
  self.class.mutexes[driver.class] = Mutex.new
326
323
  end
327
324
  end
@@ -499,12 +496,12 @@ module Kitchen
499
496
  state[:last_error] = e.class.name
500
497
  raise(InstanceFailure, failure_message(what) +
501
498
  " Please see .kitchen/logs/#{name}.log for more details",
502
- e.backtrace)
499
+ e.backtrace)
503
500
  rescue Exception => e # rubocop:disable Lint/RescueException
504
501
  log_failure(what, e)
505
502
  state[:last_error] = e.class.name
506
503
  raise ActionFailed,
507
- "Failed to complete ##{what} action: [#{e.message}]", e.backtrace
504
+ "Failed to complete ##{what} action: [#{e.message}]", e.backtrace
508
505
  ensure
509
506
  state_file.write(state)
510
507
  end
@@ -519,15 +516,15 @@ module Kitchen
519
516
  # @param state [Hash] a mutable state hash for this instance
520
517
  # @param block [Proc] a block to be called
521
518
  # @api private
522
- def synchronize_or_call(what, state, &block)
519
+ def synchronize_or_call(what, state)
523
520
  if Array(driver.class.serial_actions).include?(what)
524
521
  debug("#{to_str} is synchronizing on #{driver.class}##{what}")
525
522
  self.class.mutexes[driver.class].synchronize do
526
523
  debug("#{to_str} is messaging #{driver.class}##{what}")
527
- block.call(state)
524
+ yield(state)
528
525
  end
529
526
  else
530
- block.call(state)
527
+ yield(state)
531
528
  end
532
529
  end
533
530
 
@@ -639,7 +636,6 @@ module Kitchen
639
636
  # @api private
640
637
  # @author Fletcher Nichol <fnichol@nichol.ca>
641
638
  class FSM
642
-
643
639
  # Returns an Array of all transitions to bring an Instance from its last
644
640
  # reported transistioned state into the desired transitioned state.
645
641
  #
@@ -660,7 +656,7 @@ module Kitchen
660
656
  end
661
657
  end
662
658
 
663
- TRANSITIONS = [:destroy, :create, :converge, :setup, :verify]
659
+ TRANSITIONS = [:destroy, :create, :converge, :setup, :verify].freeze
664
660
 
665
661
  # Determines the index of a state in the state lifecycle vector. Woah.
666
662
  #