test-kitchen 1.0.0.alpha.7 → 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ea78b6f7069f03c81704ff35144fb2946803dea9
4
+ data.tar.gz: c22d68cbe08ce48169505a07f085da04da60abcf
5
+ SHA512:
6
+ metadata.gz: 2811c0a0243a3a73570634dac3e2180bf6f53fb561413fb6c180e7c43d5cca7a06aa91624a822121c42a30d45c3e4e758d5d86c501cb5a597cb188e1ace52e20
7
+ data.tar.gz: fd8dea90199f09311862f7f63c89e8cfa620d18fc622016b9d28f632e42ebd31615fc08fad96e4ed773b9895ab440d389479aa03636d89807de864d05a7d8ae4
@@ -18,3 +18,6 @@ matrix:
18
18
  allow_failures:
19
19
  - rvm: ruby-head
20
20
  - rvm: jruby-19mode
21
+ exclude:
22
+ - rvm: 2.0.0
23
+ env: RUBYGEMS_VERSION=1.8.25
@@ -1,3 +1,39 @@
1
+ ## 1.0.0.beta.1 / 2013-07-23
2
+
3
+ ### New features
4
+
5
+ * Pull request [#128][]: [Breaking] Introduce Provisioners to support chef-client (chef-zero), puppet-apply, and puppet-agent. ([@fnichol][])
6
+ * Pull request [#128][]: Add `chef_zero` provisioner type as an alternative to the iplicit default `chef_solo` provisioner. ([@fnichol][])
7
+ * Pull request [#171][]: Support computed default values for Driver authors (see pull request for light documentation). ([@fnichol][])
8
+ * Pull request [#161][], issue [#129][]: Allow custom paths for roles, data\_bags, and nodes by setting `roles_path`, `data_bags_path`, and `nodes_path`. ([@gondoi][])
9
+ * Pull request [#134][]: Add cross suite helpers. ([@rteabeault][])
10
+
11
+ ### Bug fixes
12
+
13
+ * Pull request [#122][]: Adding missing sudo calls to busser. ([@adamhjk][])
14
+ * Pull request [#154][], issue [#163][]: Set a more sane default PATH for installing Chef. ([@jtimberman][])
15
+ * Issue [#153][]: Assign Celluloid.logger to Kitchen.logger which won't open a file. ([@fnichol][])
16
+ * Pull request [#155][], issue [#154][]: Setting :on_black when your default terminal text color is black results in unreadable (black on black) text. Or: The NSA censors your VM names when using a terminal with a light background. ([@mconigliaro][])
17
+ * Pull request [#140][]: Make `kitchen init` generator safe to run when given an explicit `:destination_root`. ([@reset][])
18
+ * Pull request [#170][]: Add asterisk to wait_for_sshd argument. ([@saketoba][])
19
+ * Pull request [#136][]: Fixes bundler ref for 1.0. ([@patcon][])
20
+ * Pull request [#142][], issue [#137][]: Require a safe\_yaml release with correct permissions. ([@josephholsten][])
21
+
22
+ ### Improvements
23
+
24
+ * Pull request [#128][]: Add Driver and Provisioner columns to `kitchen list` output. ([@fnichol][])
25
+ * Pull request [#124][], issue [#132][]: Aggressively filter "non-cookbook" files before uploading to instances. ([@fnichol][])
26
+ * Pull request [#128][]: Suite run_list is no longer required. ([@fnichol][])
27
+ * Pull request [#123][]: Swap cookbook resolution strategy from shell outs to using Ruby APIs. ([@fnichol][])
28
+ * Pull request [#128][]: SSH and SCP commands share a single connection when transfering Chef artifacts to an instance (via the new `Kitchen::SSH` class). ([@fnichol][])
29
+ * Pull request [#128][]: Add more helpful output logging (info and debug) when creating and uploading the sandbox directory of Chef artifacts. ([@fnichol][])
30
+ * Issue [#97][]: Remove red as a candidate instance color. ([@fnichol][])
31
+ * Fix ANSI color codes for bright colors. ([@fnichol][])
32
+ * Pull request [#172][]: [Breaking] Update signature of Driver.required_config block. ([@fnichol][])
33
+ * Pull request [#152][], issue [#151][]: Update the bucket name for Opscode's Bento Boxes. ([@jtimberman][])
34
+ * Pull request [#131][]: Use ssh_args for test_ssh. ([@jonsmorrow][])
35
+
36
+
1
37
  ## 1.0.0.alpha.7 / 2013-05-23
2
38
 
3
39
  ### New features
@@ -14,7 +50,7 @@
14
50
  * Pull request [#116][]: Require the 'name' attribute is present in `metadata.rb`. ([@sethvargo][])
15
51
  * Pull request [#113][]: Handle case where YAML parses as nil. ([@smith][])
16
52
  * Pass original exception's backtrace to InstanceFailure and ActionFailed. ([@fnichol][])
17
- * Fix bug where action failures are swallowed with a nil inside an ensure. ([@fnichol][])
53
+ * Pull request [#112][]: Fix bug where action failures are swallowed with a nil inside an ensure. ([@manul][])
18
54
 
19
55
  ### Improvements
20
56
 
@@ -139,6 +175,7 @@ The initial release.
139
175
  [#84]: https://github.com/opscode/test-kitchen/issues/84
140
176
  [#90]: https://github.com/opscode/test-kitchen/issues/90
141
177
  [#92]: https://github.com/opscode/test-kitchen/issues/92
178
+ [#97]: https://github.com/opscode/test-kitchen/issues/97
142
179
  [#98]: https://github.com/opscode/test-kitchen/issues/98
143
180
  [#99]: https://github.com/opscode/test-kitchen/issues/99
144
181
  [#102]: https://github.com/opscode/test-kitchen/issues/102
@@ -146,22 +183,53 @@ The initial release.
146
183
  [#105]: https://github.com/opscode/test-kitchen/issues/105
147
184
  [#108]: https://github.com/opscode/test-kitchen/issues/108
148
185
  [#111]: https://github.com/opscode/test-kitchen/issues/111
186
+ [#112]: https://github.com/opscode/test-kitchen/issues/112
149
187
  [#113]: https://github.com/opscode/test-kitchen/issues/113
150
188
  [#114]: https://github.com/opscode/test-kitchen/issues/114
151
189
  [#116]: https://github.com/opscode/test-kitchen/issues/116
152
190
  [#119]: https://github.com/opscode/test-kitchen/issues/119
153
191
  [#120]: https://github.com/opscode/test-kitchen/issues/120
192
+ [#122]: https://github.com/opscode/test-kitchen/issues/122
193
+ [#123]: https://github.com/opscode/test-kitchen/issues/123
194
+ [#124]: https://github.com/opscode/test-kitchen/issues/124
195
+ [#128]: https://github.com/opscode/test-kitchen/issues/128
196
+ [#129]: https://github.com/opscode/test-kitchen/issues/129
197
+ [#131]: https://github.com/opscode/test-kitchen/issues/131
198
+ [#132]: https://github.com/opscode/test-kitchen/issues/132
199
+ [#134]: https://github.com/opscode/test-kitchen/issues/134
200
+ [#136]: https://github.com/opscode/test-kitchen/issues/136
201
+ [#137]: https://github.com/opscode/test-kitchen/issues/137
202
+ [#140]: https://github.com/opscode/test-kitchen/issues/140
203
+ [#142]: https://github.com/opscode/test-kitchen/issues/142
204
+ [#151]: https://github.com/opscode/test-kitchen/issues/151
205
+ [#152]: https://github.com/opscode/test-kitchen/issues/152
206
+ [#153]: https://github.com/opscode/test-kitchen/issues/153
207
+ [#154]: https://github.com/opscode/test-kitchen/issues/154
208
+ [#155]: https://github.com/opscode/test-kitchen/issues/155
209
+ [#161]: https://github.com/opscode/test-kitchen/issues/161
210
+ [#163]: https://github.com/opscode/test-kitchen/issues/163
211
+ [#170]: https://github.com/opscode/test-kitchen/issues/170
212
+ [#171]: https://github.com/opscode/test-kitchen/issues/171
213
+ [#172]: https://github.com/opscode/test-kitchen/issues/172
154
214
  [@ChrisLundquist]: https://github.com/ChrisLundquist
155
215
  [@adamhjk]: https://github.com/adamhjk
156
216
  [@arunthampi]: https://github.com/arunthampi
157
217
  [@bryanwb]: https://github.com/bryanwb
158
218
  [@calavera]: https://github.com/calavera
159
219
  [@fnichol]: https://github.com/fnichol
220
+ [@gondoi]: https://github.com/gondoi
160
221
  [@grahamc]: https://github.com/grahamc
222
+ [@jonsmorrow]: https://github.com/jonsmorrow
223
+ [@josephholsten]: https://github.com/josephholsten
161
224
  [@jtimberman]: https://github.com/jtimberman
225
+ [@manul]: https://github.com/manul
162
226
  [@mattray]: https://github.com/mattray
227
+ [@mconigliaro]: https://github.com/mconigliaro
228
+ [@patcon]: https://github.com/patcon
163
229
  [@reset]: https://github.com/reset
230
+ [@rteabeault]: https://github.com/rteabeault
231
+ [@saketoba]: https://github.com/saketoba
164
232
  [@sethvargo]: https://github.com/sethvargo
165
233
  [@smith]: https://github.com/smith
166
234
  [@stevendanna]: https://github.com/stevendanna
167
- [@thommay]: https://github.com/thommay
235
+ [@thommay]: https://github.com/thommay
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Test Kitchen
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/opscode/test-kitchen.png?branch=1.0)](https://travis-ci.org/opscode/test-kitchen)
3
+ [![Build Status](https://secure.travis-ci.org/opscode/test-kitchen.png?branch=master)](https://travis-ci.org/opscode/test-kitchen)
4
4
  [![Code Climate](https://codeclimate.com/github/opscode/test-kitchen.png)](https://codeclimate.com/github/opscode/test-kitchen)
5
5
 
6
6
  A convergence integration test harness for configuration management systems.
@@ -15,7 +15,7 @@ In your `Gemfile`, add `test-kitchen` as a
15
15
  dependency:
16
16
 
17
17
  ```ruby
18
- gem 'test-kitchen', git: 'git://github.com/opscode/test-kitchen.git', branch: '1.0'
18
+ gem 'test-kitchen', '~> 1.0.0.alpha'
19
19
  ```
20
20
 
21
21
  and run the `bundle` command to install:
data/Rakefile CHANGED
@@ -16,7 +16,13 @@ end
16
16
  desc "Run all test suites"
17
17
  task :test => [:unit, :features]
18
18
 
19
- task :default => [:test]
19
+ desc "Display LOC stats"
20
+ task :stats do
21
+ puts "\n## Production Code Stats"
22
+ sh "countloc -r lib/kitchen lib/kitchen.rb"
23
+ puts "\n## Test Code Stats"
24
+ sh "countloc -r spec features"
25
+ end
20
26
 
21
27
  unless RUBY_ENGINE == 'jruby'
22
28
  require 'cane/rake_task'
@@ -29,6 +35,7 @@ unless RUBY_ENGINE == 'jruby'
29
35
  Kitchen::ThorTasks#define
30
36
  Kitchen::CLI#pry_prompts
31
37
  Kitchen::Instance#synchronize_or_call
38
+ Kitchen::Driver::SSHBase#converge
32
39
  )
33
40
  cane.style_exclude = %w(
34
41
  lib/vendor/hash_recursive_merge.rb
@@ -58,15 +65,11 @@ unless RUBY_ENGINE == 'jruby'
58
65
  end
59
66
  end
60
67
 
61
- Rake::Task[:default].enhance [:cane, :tailor]
62
- end
63
-
64
- desc "Display LOC stats"
65
- task :stats do
66
- puts "\n## Production Code Stats"
67
- sh "countloc -r lib/kitchen lib/kitchen.rb"
68
- puts "\n## Test Code Stats"
69
- sh "countloc -r spec features"
68
+ desc "Run all quality tasks"
69
+ task :quality => [:cane, :tailor, :stats]
70
+ else
71
+ desc "Run all quality tasks"
72
+ task :quality => [:stats]
70
73
  end
71
74
 
72
- Rake::Task[:default].enhance [:stats]
75
+ task :default => [:test, :quality]
@@ -26,8 +26,9 @@ require 'kitchen/logging'
26
26
  require 'kitchen/shell_out'
27
27
  require 'kitchen/util'
28
28
 
29
+ require 'kitchen/provisioner'
30
+ require 'kitchen/provisioner/base'
29
31
  require 'kitchen/busser'
30
- require 'kitchen/chef_data_uploader'
31
32
  require 'kitchen/color'
32
33
  require 'kitchen/collection'
33
34
  require 'kitchen/config'
@@ -41,9 +42,13 @@ require 'kitchen/manager'
41
42
  require 'kitchen/metadata_chopper'
42
43
  require 'kitchen/platform'
43
44
  require 'kitchen/state_file'
45
+ require 'kitchen/ssh'
44
46
  require 'kitchen/suite'
45
47
  require 'kitchen/version'
46
48
 
49
+ # Test Kitchen base module.
50
+ #
51
+ # @author Fletcher Nichol <fnichol@nichol.ca>
47
52
  module Kitchen
48
53
 
49
54
  class << self
@@ -91,7 +96,7 @@ end
91
96
 
92
97
  # Initialize the base logger and use that for Celluloid's logger
93
98
  Kitchen.logger = Kitchen.default_logger
94
- Celluloid.logger = Kitchen.celluloid_file_logger
99
+ Celluloid.logger = Kitchen.logger
95
100
 
96
101
  # Setup a collection of instance crash exceptions for error reporting
97
102
  Kitchen.crashes = []
@@ -80,7 +80,8 @@ module Kitchen
80
80
  <<-INSTALL_CMD.gsub(/^ {10}/, '')
81
81
  bash -c '
82
82
  #{sudo}#{busser_bin} suite cleanup
83
- #{local_suite_files.map { |f| stream_file(f, remote_file(f)) }.join}'
83
+ #{local_suite_files.map { |f| stream_file(f, remote_file(f, @suite_name)) }.join}
84
+ #{helper_files.map { |f| stream_file(f, remote_file(f, "helpers")) }.join}'
84
85
  INSTALL_CMD
85
86
  end
86
87
  end
@@ -103,7 +104,14 @@ module Kitchen
103
104
  DEFAULT_TEST_ROOT = File.join(Dir.pwd, "test/integration").freeze
104
105
 
105
106
  def validate_options(suite_name)
106
- raise ClientError, "Busser#new requires a suite_name" if suite_name.nil?
107
+ if suite_name.nil?
108
+ raise ClientError, "Busser#new requires a suite_name"
109
+ end
110
+
111
+ if suite_name == 'helper'
112
+ raise UserError,
113
+ "Suite name invalid: 'helper' is a reserved directory name."
114
+ end
107
115
  end
108
116
 
109
117
  def plugins
@@ -118,9 +126,13 @@ module Kitchen
118
126
  end
119
127
  end
120
128
 
121
- def remote_file(file)
122
- local_prefix = File.join(test_root, @suite_name)
123
- "$(#{busser_bin} suite path)/".concat(file.sub(%r{^#{local_prefix}/}, ''))
129
+ def helper_files
130
+ Dir.glob(File.join(test_root, "helpers", "*/**/*"))
131
+ end
132
+
133
+ def remote_file(file, dir)
134
+ local_prefix = File.join(test_root, dir)
135
+ "$(#{sudo}#{busser_bin} suite path)/".concat(file.sub(%r{^#{local_prefix}/}, ''))
124
136
  end
125
137
 
126
138
  def stream_file(local_path, remote_path)
@@ -128,7 +140,7 @@ module Kitchen
128
140
  md5 = Digest::MD5.hexdigest(local_file)
129
141
  perms = sprintf("%o", File.stat(local_path).mode)[2, 4]
130
142
  stream_cmd = [
131
- busser_bin,
143
+ "#{sudo}#{busser_bin}",
132
144
  "deserialize",
133
145
  "--destination=#{remote_path}",
134
146
  "--md5sum=#{md5}",
@@ -137,7 +149,7 @@ module Kitchen
137
149
 
138
150
  <<-STREAMFILE.gsub(/^ {8}/, '')
139
151
  echo "Uploading #{remote_path} (mode=#{perms})"
140
- cat <<"__EOFSTREAM__" | #{sudo}#{stream_cmd}
152
+ #{sudo}cat <<"__EOFSTREAM__" | #{sudo}#{stream_cmd}
141
153
  #{Base64.encode64(local_file)}
142
154
  __EOFSTREAM__
143
155
  STREAMFILE
@@ -40,6 +40,7 @@ module Kitchen
40
40
  super
41
41
  $stdout.sync = true
42
42
  Kitchen.logger = Kitchen.default_file_logger
43
+ Celluloid.logger = Kitchen.celluloid_file_logger
43
44
  @config = Kitchen::Config.new(
44
45
  :loader => Kitchen::Loader::YAML.new(ENV['KITCHEN_YAML']),
45
46
  :log_level => ENV['KITCHEN_LOG'] && ENV['KITCHEN_LOG'].downcase.to_sym,
@@ -55,11 +56,7 @@ module Kitchen
55
56
  if options[:bare]
56
57
  say Array(result).map { |i| i.name }.join("\n")
57
58
  else
58
- table = [
59
- [set_color("Instance", :green), set_color("Last Action", :green)]
60
- ]
61
- table += Array(result).map { |i| display_instance(i) }
62
- print_table(table)
59
+ list_table(result)
63
60
  end
64
61
  end
65
62
 
@@ -318,8 +315,30 @@ module Kitchen
318
315
  end
319
316
  end
320
317
 
318
+ def list_table(result)
319
+ table = [
320
+ [set_color("Instance", :green), set_color("Driver", :green),
321
+ set_color("Provisioner", :green), set_color("Last Action", :green)]
322
+ ]
323
+ table += Array(result).map { |i| display_instance(i) }
324
+ print_table(table)
325
+ end
326
+
321
327
  def display_instance(instance)
322
- action = case instance.last_action
328
+ [
329
+ color_pad(instance.name),
330
+ color_pad(instance.driver.name),
331
+ color_pad(format_provisioner(instance.driver[:provisioner])),
332
+ format_last_action(instance.last_action)
333
+ ]
334
+ end
335
+
336
+ def color_pad(string)
337
+ string + set_color("", :white)
338
+ end
339
+
340
+ def format_last_action(last_action)
341
+ case last_action
323
342
  when 'create' then set_color("Created", :cyan)
324
343
  when 'converge' then set_color("Converged", :magenta)
325
344
  when 'setup' then set_color("Set Up", :blue)
@@ -327,7 +346,10 @@ module Kitchen
327
346
  when nil then set_color("<Not Created>", :red)
328
347
  else set_color("<Unknown>", :white)
329
348
  end
330
- [set_color(instance.name, :on_black), action]
349
+ end
350
+
351
+ def format_provisioner(name)
352
+ name.split('_').map { |word| word.capitalize }.join(' ')
331
353
  end
332
354
 
333
355
  def update_config!
@@ -28,14 +28,14 @@ module Kitchen
28
28
  ANSI = {
29
29
  :reset => 0, :black => 30, :red => 31, :green => 32, :yellow => 33,
30
30
  :blue => 34, :magenta => 35, :cyan => 36, :white => 37,
31
- :bright_black => 30, :bright_red => 31, :bright_green => 32,
32
- :bright_yellow => 33, :bright_blue => 34, :bright_magenta => 35,
33
- :bright_cyan => 36, :bright_white => 37
31
+ :bright_black => 90, :bright_red => 91, :bright_green => 92,
32
+ :bright_yellow => 93, :bright_blue => 94, :bright_magenta => 95,
33
+ :bright_cyan => 96, :bright_white => 97
34
34
  }.freeze
35
35
 
36
36
  COLORS = %w(
37
- cyan yellow green magenta red blue bright_cyan bright_yellow
38
- bright_green bright_magenta bright_red bright_blue
37
+ cyan yellow green magenta blue bright_cyan bright_yellow
38
+ bright_green bright_magenta bright_blue
39
39
  ).freeze
40
40
 
41
41
  # Returns an ansi escaped string representing a color control sequence.
@@ -37,6 +37,9 @@ module Kitchen
37
37
  # Default driver plugin to use
38
38
  DEFAULT_DRIVER_PLUGIN = "dummy".freeze
39
39
 
40
+ # Default provisioner to use
41
+ DEFAULT_PROVISIONER = "chef_solo".freeze
42
+
40
43
  # Default base path which may contain `data_bags/` directories
41
44
  DEFAULT_TEST_BASE_PATH = File.join(Dir.pwd, 'test/integration').freeze
42
45
 
@@ -94,8 +97,9 @@ module Kitchen
94
97
 
95
98
  def new_suite(hash)
96
99
  path_hash = {
97
- :data_bags_path => calculate_path("data_bags", hash[:name]),
98
- :roles_path => calculate_path("roles", hash[:name]),
100
+ :data_bags_path => calculate_path("data_bags", hash[:name], hash[:data_bags_path]),
101
+ :roles_path => calculate_path("roles", hash[:name], hash[:roles_path]),
102
+ :nodes_path => calculate_path("nodes", hash[:name], hash[:nodes_path]),
99
103
  }
100
104
 
101
105
  Suite.new(hash.rmerge(path_hash))
@@ -108,6 +112,7 @@ module Kitchen
108
112
  def new_driver(hash)
109
113
  hash[:driver_config] ||= Hash.new
110
114
  hash[:driver_config][:kitchen_root] = kitchen_root
115
+ hash[:driver_config][:provisioner] = hash[:provisioner]
111
116
 
112
117
  Driver.for_plugin(hash[:driver_plugin], hash[:driver_config])
113
118
  end
@@ -126,13 +131,38 @@ module Kitchen
126
131
  def new_instance(suite, platform, index)
127
132
  platform_hash = platform_driver_hash(platform.name)
128
133
  driver = new_driver(merge_driver_hash(platform_hash))
134
+ provisioner = driver[:provisioner]
129
135
 
130
- Instance.new(
131
- :suite => suite,
132
- :platform => platform,
136
+ instance = Instance.new(
137
+ :suite => extend_suite(suite, provisioner),
138
+ :platform => extend_platform(platform, provisioner),
133
139
  :driver => driver,
134
140
  :logger => new_instance_logger(index)
135
141
  )
142
+ extend_instance(instance, provisioner)
143
+ end
144
+
145
+ def extend_suite(suite, provisioner)
146
+ case provisioner.to_s.downcase
147
+ when /^chef_/ then suite.dup.extend(Suite::Cheflike)
148
+ when /^puppet_/ then suite.dup.extend(Suite::Puppetlike)
149
+ else suite.dup
150
+ end
151
+ end
152
+
153
+ def extend_platform(platform, provisioner)
154
+ case provisioner.to_s.downcase
155
+ when /^chef_/ then platform.dup.extend(Platform::Cheflike)
156
+ else platform.dup
157
+ end
158
+ end
159
+
160
+ def extend_instance(instance, provisioner)
161
+ case provisioner.to_s.downcase
162
+ when /^chef_/ then instance.extend(Instance::Cheflike)
163
+ when /^puppet_/ then instance.extend(Instance::Puppetlike)
164
+ else instance
165
+ end
136
166
  end
137
167
 
138
168
  def actor_registry(instance)
@@ -171,7 +201,9 @@ module Kitchen
171
201
  def platform_driver_hash(platform_name)
172
202
  h = data[:platforms].find { |p| p[:name] == platform_name } || Hash.new
173
203
 
174
- h.select { |key, value| [:driver_plugin, :driver_config].include?(key) }
204
+ h.select do |key, value|
205
+ [:driver_plugin, :driver_config, :provisioner].include?(key)
206
+ end
175
207
  end
176
208
 
177
209
  def new_instance_logger(index)
@@ -194,12 +226,15 @@ module Kitchen
194
226
  default_driver_hash.rmerge(common_driver_hash.rmerge(driver_hash))
195
227
  end
196
228
 
197
- def calculate_path(path, suite_name)
229
+ def calculate_path(path, suite_name, local_path)
230
+ custom_path = File.join(kitchen_root, local_path) if local_path
198
231
  suite_path = File.join(test_base_path, suite_name, path)
199
232
  common_path = File.join(test_base_path, path)
200
233
  top_level_path = File.join(Dir.pwd, path)
201
234
 
202
- if File.directory?(suite_path)
235
+ if custom_path and File.directory?(custom_path)
236
+ custom_path
237
+ elsif File.directory?(suite_path)
203
238
  suite_path
204
239
  elsif File.directory?(common_path)
205
240
  common_path
@@ -211,12 +246,16 @@ module Kitchen
211
246
  end
212
247
 
213
248
  def default_driver_hash
214
- { :driver_plugin => DEFAULT_DRIVER_PLUGIN, :driver_config => {} }
249
+ {
250
+ :driver_plugin => DEFAULT_DRIVER_PLUGIN,
251
+ :driver_config => {},
252
+ :provisioner => DEFAULT_PROVISIONER
253
+ }
215
254
  end
216
255
 
217
256
  def common_driver_hash
218
257
  data.select do |key, value|
219
- [:driver_plugin, :driver_config].include?(key)
258
+ [:driver_plugin, :driver_config, :provisioner].include?(key)
220
259
  end
221
260
  end
222
261
  end