kitchen-vagrant 0.9.0 → 0.10.0
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.
- data/CHANGELOG.md +17 -5
- data/README.md +70 -12
- data/kitchen-vagrant.gemspec +1 -1
- data/lib/kitchen/driver/vagrant.rb +12 -3
- data/lib/kitchen/driver/vagrant_version.rb +1 -1
- data/lib/kitchen/vagrant/vagrantfile_creator.rb +54 -6
- metadata +6 -6
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## 0.10.0 / 2013-05-08
|
|
2
|
+
|
|
3
|
+
### New features
|
|
4
|
+
|
|
5
|
+
* Pull request #12: Use SSHBase functionality (using ChefDataUploader) to manage Chef provisioning in the converge action and make Vagrant's built in provisioning an optional mode by setting `use_vagrant_provision: true` in the `driver_config` section of the .kitchen.yml. As a consequence, the vagrant-berkshelf middleware is now also optional and off by default (can be re-enabled by setting `use_vagrant_berkshelf_plugin: true`). (@fujin)
|
|
6
|
+
* Pull request #18: Add VMware Fusion/Workstation support. (@TheDude05)
|
|
7
|
+
|
|
8
|
+
### Improvements
|
|
9
|
+
|
|
10
|
+
* Issue #19: Recommend the vagrant-wrapper gem in README. (@fnichol)
|
|
11
|
+
|
|
12
|
+
|
|
1
13
|
## 0.9.0 / 2013-04-19
|
|
2
14
|
|
|
3
15
|
### Upstream changes
|
|
@@ -54,11 +66,11 @@
|
|
|
54
66
|
The initial release.
|
|
55
67
|
|
|
56
68
|
<!--- The following link definition list is generated by PimpMyChangelog --->
|
|
57
|
-
[#7]: https://github.com/opscode/kitchen/issues/7
|
|
58
|
-
[#8]: https://github.com/opscode/kitchen/issues/8
|
|
59
|
-
[#15]: https://github.com/opscode/kitchen/issues/15
|
|
60
|
-
[#16]: https://github.com/opscode/kitchen/issues/16
|
|
69
|
+
[#7]: https://github.com/opscode/kitchen-vagrant/issues/7
|
|
70
|
+
[#8]: https://github.com/opscode/kitchen-vagrant/issues/8
|
|
71
|
+
[#15]: https://github.com/opscode/kitchen-vagrant/issues/15
|
|
72
|
+
[#16]: https://github.com/opscode/kitchen-vagrant/issues/16
|
|
61
73
|
[@fnichol]: https://github.com/fnichol
|
|
62
74
|
[@martinisoft]: https://github.com/martinisoft
|
|
63
75
|
[@petejkim]: https://github.com/petejkim
|
|
64
|
-
[@sandfish8]: https://github.com/sandfish8
|
|
76
|
+
[@sandfish8]: https://github.com/sandfish8
|
data/README.md
CHANGED
|
@@ -22,12 +22,27 @@ Test Kitchen.
|
|
|
22
22
|
to 1.1.0), this version may be resolved first in your `PATH`. If you receive an
|
|
23
23
|
error message that Vagrant is too old despite having installed Vagrant as a
|
|
24
24
|
package, you may be required to uninstall the gem version or modify your `PATH`
|
|
25
|
-
environment.
|
|
25
|
+
environment. If you require the vagrant gem for older projects you should
|
|
26
|
+
consider the [vagrant-wrapper][vagrant_wrapper] gem which helps manage both
|
|
27
|
+
styles of Vagrant installations
|
|
28
|
+
([background details][vagrant_wrapper_background]).
|
|
26
29
|
|
|
27
|
-
### <a name="dependencies-
|
|
30
|
+
### <a name="dependencies-virtualization"></a> Virtualbox and/or VMware Fusion/Workstation
|
|
31
|
+
|
|
32
|
+
Currently this driver supports VirtualBox and VMware Fusion/Workstation.
|
|
33
|
+
Virtualbox is free and is the default provider for Vagrant.
|
|
34
|
+
|
|
35
|
+
[VirtualBox package][virtualbox_dl]
|
|
36
|
+
|
|
37
|
+
If you would like to use VMware Fusion/Workstation you must purchase the
|
|
38
|
+
software from VMware and then must also purchase the Vagrant VMware plugin.
|
|
39
|
+
|
|
40
|
+
[Vagrant VMware Plugin][vmware_plugin]
|
|
41
|
+
|
|
42
|
+
[VMware Fusion][fusion_dl]
|
|
43
|
+
|
|
44
|
+
[VMware Workstation][workstation_dl]
|
|
28
45
|
|
|
29
|
-
Currently this driver only supports the VirtualBox provisioner which requires
|
|
30
|
-
the [VirtualBox package][virtualbox_dl] to be installed.
|
|
31
46
|
|
|
32
47
|
### <a name="dependencies-berkshelf"></a> Vagrant Berkshelf Plugin
|
|
33
48
|
|
|
@@ -49,7 +64,7 @@ Please read the [Driver usage][driver_usage] page for more details.
|
|
|
49
64
|
|
|
50
65
|
### <a name="config-box"></a> box
|
|
51
66
|
|
|
52
|
-
|
|
67
|
+
**Required** This determines which Vagrant box will be used. For more
|
|
53
68
|
details, please read the Vagrant [machine settings][vagrant_machine_settings]
|
|
54
69
|
page.
|
|
55
70
|
|
|
@@ -63,11 +78,21 @@ started.
|
|
|
63
78
|
|
|
64
79
|
There is **no** default value set.
|
|
65
80
|
|
|
81
|
+
### <a name="config-provider"></a> provider
|
|
82
|
+
|
|
83
|
+
This determines which Vagrant provider to use when testing and should match
|
|
84
|
+
the provider name in Vagrant. For example, to use VMware Fusion the provider
|
|
85
|
+
should be `vmware_fusion`. Please see the docs on [providers][vagrant_providers]
|
|
86
|
+
for further details.
|
|
87
|
+
|
|
88
|
+
By default the value is unset, or `nil`. In this case the driver will use the
|
|
89
|
+
Vagrant default provider which at this current time is **virtualbox**
|
|
90
|
+
|
|
66
91
|
### <a name="config-customize"></a> customize
|
|
67
92
|
|
|
68
|
-
A **Hash** of customizations to a Vagrant virtual machine
|
|
69
|
-
|
|
70
|
-
|
|
93
|
+
A **Hash** of customizations to a Vagrant virtual machine. Each key/value
|
|
94
|
+
pair will be passed to your providers customization block. For example, with
|
|
95
|
+
the default `virtualbox` provider:
|
|
71
96
|
|
|
72
97
|
```ruby
|
|
73
98
|
driver_config:
|
|
@@ -89,7 +114,7 @@ Vagrant.configure("2") do |config|
|
|
|
89
114
|
end
|
|
90
115
|
```
|
|
91
116
|
|
|
92
|
-
Please read the
|
|
117
|
+
Please read the [Vagrantfile configuration][vagrantfile] page for
|
|
93
118
|
more details.
|
|
94
119
|
|
|
95
120
|
By default, each Vagrant virtual machine is configured with 256 MB of RAM. In
|
|
@@ -97,8 +122,8 @@ other words the default value for `customize` is `{:memory => '256'}`.
|
|
|
97
122
|
|
|
98
123
|
### <a name="config-dry-run"></a> dry\_run
|
|
99
124
|
|
|
100
|
-
Useful when debugging Vagrant CLI commands. If set to `true`, all Vagrant CLI
|
|
101
|
-
will be displayed rather than executed.
|
|
125
|
+
Useful when debugging Vagrant CLI commands. If set to `true`, all Vagrant CLI
|
|
126
|
+
commands will be displayed rather than executed.
|
|
102
127
|
|
|
103
128
|
The default is unset, or `nil`.
|
|
104
129
|
|
|
@@ -131,6 +156,33 @@ more details.
|
|
|
131
156
|
|
|
132
157
|
There is **no** default value set.
|
|
133
158
|
|
|
159
|
+
### <a name="config-use-vagrant-provision"></a> use_vagrant_provision
|
|
160
|
+
|
|
161
|
+
Determines whether or not this driver will use a `vagrant provision` shell out
|
|
162
|
+
in the **converge** action. If this value is falsey (`nil`, `false`) the
|
|
163
|
+
behavior from `Kitchen::Driver::SSHBase` will be used, bypassing the Vagrant
|
|
164
|
+
Chef solo provisioner. If this value is truthy, a `vagrant provision` will
|
|
165
|
+
be used.
|
|
166
|
+
|
|
167
|
+
The default is unset, or `nil`.
|
|
168
|
+
|
|
169
|
+
### <a name="config-use-vagrant-berkshelf-plugin"></a> use_vagrant_berkshelf_plugin
|
|
170
|
+
|
|
171
|
+
Determines whether or not this driver will use the vagrant-berkself Vagrant
|
|
172
|
+
plugin to assemble cookbook dependencies. If this value if falsey (`nil`,
|
|
173
|
+
`false`) then the driver will skip the vagrant-berkshelf dependency check
|
|
174
|
+
and not activate the plugin in the rendered Vagrantfile. If this value is
|
|
175
|
+
truthy the opposite behvior will be used.
|
|
176
|
+
|
|
177
|
+
The default is unset, or `nil`.
|
|
178
|
+
|
|
179
|
+
### <a name="config-synced-folders"></a> synced_folders
|
|
180
|
+
|
|
181
|
+
Allow the user to specify a collection of synced folders for on each Vagrant
|
|
182
|
+
instance.
|
|
183
|
+
|
|
184
|
+
The default is an empty Hash, or `{}`.
|
|
185
|
+
|
|
134
186
|
### <a name="config-require-chef-omnibus"></a> require\_chef\_omnibus
|
|
135
187
|
|
|
136
188
|
Determines whether or not a Chef [Omnibus package][chef_omnibus_dl] will be
|
|
@@ -182,5 +234,11 @@ Apache 2.0 (see [LICENSE][license])
|
|
|
182
234
|
[vagrant_dl]: http://downloads.vagrantup.com/
|
|
183
235
|
[vagrant_machine_settings]: http://docs.vagrantup.com/v2/vagrantfile/machine_settings.html
|
|
184
236
|
[vagrant_networking]: http://docs.vagrantup.com/v2/networking/basic_usage.html
|
|
185
|
-
[vagrant_virtualbox]: http://docs.vagrantup.com/v2/virtualbox/configuration.html
|
|
186
237
|
[virtualbox_dl]: https://www.virtualbox.org/wiki/Downloads
|
|
238
|
+
[vagrantfile]: http://docs.vagrantup.com/v2/vagrantfile/index.html
|
|
239
|
+
[vagrant_providers]: http://docs.vagrantup.com/v2/providers/index.html
|
|
240
|
+
[vagrant_wrapper]: https://github.com/org-binbab/gem-vagrant-wrapper
|
|
241
|
+
[vagrant_wrapper_background]: https://github.com/org-binbab/gem-vagrant-wrapper#background---aka-the-vagrant-gem-enigma
|
|
242
|
+
[vmware_plugin]: http://www.vagrantup.com/vmware
|
|
243
|
+
[fusion_dl]: http://www.vmware.com/products/fusion/overview.html
|
|
244
|
+
[workstation_dl]: http://www.vmware.com/products/workstation/
|
data/kitchen-vagrant.gemspec
CHANGED
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
18
18
|
gem.require_paths = ["lib"]
|
|
19
19
|
|
|
20
|
-
gem.add_dependency 'test-kitchen', '~> 1.0.0.alpha.
|
|
20
|
+
gem.add_dependency 'test-kitchen', '~> 1.0.0.alpha.6'
|
|
21
21
|
|
|
22
22
|
gem.add_development_dependency 'cane'
|
|
23
23
|
gem.add_development_dependency 'tailor'
|
|
@@ -35,6 +35,7 @@ module Kitchen
|
|
|
35
35
|
class Vagrant < Kitchen::Driver::SSHBase
|
|
36
36
|
|
|
37
37
|
default_config :customize, {:memory => '256'}
|
|
38
|
+
default_config :synced_folders, {}
|
|
38
39
|
|
|
39
40
|
required_config :box
|
|
40
41
|
|
|
@@ -42,7 +43,9 @@ module Kitchen
|
|
|
42
43
|
|
|
43
44
|
def create(state)
|
|
44
45
|
create_vagrantfile
|
|
45
|
-
|
|
46
|
+
cmd = "vagrant up --no-provision"
|
|
47
|
+
cmd += " --provider=#{@config[:provider]}" if @config[:provider]
|
|
48
|
+
run cmd
|
|
46
49
|
set_ssh_state(state)
|
|
47
50
|
info("Vagrant instance #{instance.to_str} created.")
|
|
48
51
|
end
|
|
@@ -51,7 +54,13 @@ module Kitchen
|
|
|
51
54
|
create_vagrantfile
|
|
52
55
|
ssh_args = build_ssh_args(state)
|
|
53
56
|
install_omnibus(ssh_args) if config[:require_chef_omnibus]
|
|
54
|
-
|
|
57
|
+
if config[:use_vagrant_provision]
|
|
58
|
+
run "vagrant provision"
|
|
59
|
+
else
|
|
60
|
+
prepare_chef_home(ssh_args)
|
|
61
|
+
upload_chef_data(ssh_args)
|
|
62
|
+
run_chef_solo(ssh_args)
|
|
63
|
+
end
|
|
55
64
|
end
|
|
56
65
|
|
|
57
66
|
def setup(state)
|
|
@@ -77,7 +86,7 @@ module Kitchen
|
|
|
77
86
|
|
|
78
87
|
def verify_dependencies
|
|
79
88
|
check_vagrant_version
|
|
80
|
-
check_berkshelf_plugin
|
|
89
|
+
check_berkshelf_plugin if config[:use_vagrant_berkshelf_plugin]
|
|
81
90
|
end
|
|
82
91
|
|
|
83
92
|
protected
|
|
@@ -36,8 +36,9 @@ module Kitchen
|
|
|
36
36
|
common_block(arr)
|
|
37
37
|
network_block(arr)
|
|
38
38
|
provider_block(arr)
|
|
39
|
-
chef_block(arr)
|
|
40
|
-
berkshelf_block(arr)
|
|
39
|
+
chef_block(arr) if config[:use_vagrant_provision]
|
|
40
|
+
berkshelf_block(arr) if config[:use_vagrant_berkshelf_plugin]
|
|
41
|
+
synced_folders_block(arr)
|
|
41
42
|
arr << %{end}
|
|
42
43
|
arr.join("\n")
|
|
43
44
|
end
|
|
@@ -61,10 +62,15 @@ module Kitchen
|
|
|
61
62
|
end
|
|
62
63
|
|
|
63
64
|
def provider_block(arr)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
provider = config[:provider] || 'virtualbox'
|
|
66
|
+
|
|
67
|
+
arr << %{ c.vm.provider :#{provider} do |p|}
|
|
68
|
+
case provider
|
|
69
|
+
when 'virtualbox'
|
|
70
|
+
virtualbox_customize(arr)
|
|
71
|
+
when 'vmware_fusion', 'vmware_workstation'
|
|
72
|
+
vmware_customize(arr)
|
|
73
|
+
end
|
|
68
74
|
arr << %{ end}
|
|
69
75
|
end
|
|
70
76
|
|
|
@@ -76,6 +82,9 @@ module Kitchen
|
|
|
76
82
|
if instance.suite.data_bags_path
|
|
77
83
|
arr << %{ chef.data_bags_path = "#{instance.suite.data_bags_path}"}
|
|
78
84
|
end
|
|
85
|
+
if key_path
|
|
86
|
+
arr << %{ chef.encrypted_data_bag_secret_key_path = "#{key_path}"}
|
|
87
|
+
end
|
|
79
88
|
if instance.suite.roles_path
|
|
80
89
|
arr << %{ chef.roles_path = "#{instance.suite.roles_path}"}
|
|
81
90
|
end
|
|
@@ -91,6 +100,12 @@ module Kitchen
|
|
|
91
100
|
end
|
|
92
101
|
end
|
|
93
102
|
|
|
103
|
+
def synced_folders_block(arr)
|
|
104
|
+
config[:synced_folders].each do |source, destination|
|
|
105
|
+
arr << %{ c.vm.synced_folder "#{source}", "#{destination}" }
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
94
109
|
def vagrant_logger_level
|
|
95
110
|
if instance.logger.debug?
|
|
96
111
|
":debug"
|
|
@@ -108,6 +123,39 @@ module Kitchen
|
|
|
108
123
|
def berksfile
|
|
109
124
|
File.join(config[:kitchen_root], "Berksfile")
|
|
110
125
|
end
|
|
126
|
+
|
|
127
|
+
def virtualbox_customize(arr)
|
|
128
|
+
config[:customize].each do |key, value|
|
|
129
|
+
arr << %{ p.customize ["modifyvm", :id, "--#{key}", #{value}]}
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def vmware_customize(arr)
|
|
134
|
+
config[:customize].each do |key, value|
|
|
135
|
+
if key == :memory
|
|
136
|
+
# XXX: This is kind of a hack to address the fact that
|
|
137
|
+
# "memory" is a default attribute in our Vagrant driver.
|
|
138
|
+
#
|
|
139
|
+
# The VMware VMX format expects to see "memsize" instead of
|
|
140
|
+
# just "memory" like Virtualbox would. So if "memsize" has
|
|
141
|
+
# been specified we simply ignore the "memory" option.
|
|
142
|
+
unless config[:customize].include?(:memsize)
|
|
143
|
+
arr << %{ p.vmx["memsize"] = "#{value}"}
|
|
144
|
+
end
|
|
145
|
+
else
|
|
146
|
+
arr << %{ p.vmx["#{key}"] = "#{value}"}
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def key_path
|
|
152
|
+
return nil if instance.suite.encrypted_data_bag_secret_key_path.nil?
|
|
153
|
+
|
|
154
|
+
File.join(
|
|
155
|
+
config[:kitchen_root],
|
|
156
|
+
instance.suite.encrypted_data_bag_secret_key_path
|
|
157
|
+
)
|
|
158
|
+
end
|
|
111
159
|
end
|
|
112
160
|
end
|
|
113
161
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kitchen-vagrant
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
12
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: test-kitchen
|
|
@@ -18,7 +18,7 @@ dependencies:
|
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 1.0.0.alpha.
|
|
21
|
+
version: 1.0.0.alpha.6
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -26,7 +26,7 @@ dependencies:
|
|
|
26
26
|
requirements:
|
|
27
27
|
- - ~>
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 1.0.0.alpha.
|
|
29
|
+
version: 1.0.0.alpha.6
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: cane
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -107,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
107
107
|
version: '0'
|
|
108
108
|
segments:
|
|
109
109
|
- 0
|
|
110
|
-
hash:
|
|
110
|
+
hash: 4281053971058593237
|
|
111
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
112
|
none: false
|
|
113
113
|
requirements:
|
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
116
116
|
version: '0'
|
|
117
117
|
segments:
|
|
118
118
|
- 0
|
|
119
|
-
hash:
|
|
119
|
+
hash: 4281053971058593237
|
|
120
120
|
requirements: []
|
|
121
121
|
rubyforge_project:
|
|
122
122
|
rubygems_version: 1.8.24
|