vagrant-vsphere 0.17.0 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.bumpversion.cfg +1 -1
- data/README.md +100 -13
- data/lib/vSphere/action.rb +11 -3
- data/lib/vSphere/action/clone.rb +29 -11
- data/lib/vSphere/config.rb +1 -0
- data/lib/vSphere/version.rb +1 -1
- data/spec/action_spec.rb +11 -6
- data/spec/spec_helper.rb +7 -4
- data/vsphere_screenshot.png +0 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca7707beee33ab9618da472c660a46a05e2ca8f4
|
4
|
+
data.tar.gz: bd28c6055786c007862865c0768f053d8309498c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a83daf3b86d22e1346e463b82d5f54536663cca554d7b4dcd554fdb5cd85bfd114bb02e0a15b126b4f9c6cb5a5e0eba7304484bd050c2cf62ddc7900043e172
|
7
|
+
data.tar.gz: e5457be35238ac4eed9e1c95329ec9f699711d90c80432265dbce8a37cf288adaeb858c8edcbb8d21e1340fb2607f2b66f8fc804c7af0b51e323812f46732096
|
data/.bumpversion.cfg
CHANGED
data/README.md
CHANGED
@@ -9,21 +9,21 @@ This provider is built on top of the [RbVmomi](https://github.com/vmware/rbvmomi
|
|
9
9
|
|
10
10
|
## Requirements
|
11
11
|
* Vagrant 1.6.3+
|
12
|
-
* VMware
|
12
|
+
* VMware with vSphere API
|
13
13
|
* Ruby 1.9+
|
14
14
|
* libxml2, libxml2-dev, libxslt, libxslt-dev
|
15
15
|
|
16
16
|
## Current Version
|
17
|
-
**version: 0.
|
17
|
+
**version: 0.18.0**
|
18
18
|
|
19
|
-
vagrant-vsphere (**version: 0.
|
19
|
+
vagrant-vsphere (**version: 0.18.0**) is available from [RubyGems.org](https://rubygems.org/gems/vagrant-vsphere)
|
20
20
|
|
21
21
|
## Installation
|
22
22
|
|
23
23
|
Install using standard Vagrant plugin method:
|
24
24
|
|
25
|
-
```
|
26
|
-
|
25
|
+
```bash
|
26
|
+
vagrant plugin install vagrant-vsphere
|
27
27
|
```
|
28
28
|
|
29
29
|
This will install the plugin from RubyGems.org.
|
@@ -31,9 +31,9 @@ This will install the plugin from RubyGems.org.
|
|
31
31
|
Alternatively, you can clone this repository and build the source with `gem build vSphere.gemspec`.
|
32
32
|
After the gem is built, run the plugin install command from the build directory.
|
33
33
|
|
34
|
-
### Potential
|
34
|
+
### Potential Installation Problems
|
35
35
|
|
36
|
-
The requirements for [Nokogiri](http://nokogiri.org/) must be installed before the plugin can be installed. See Nokogiri
|
36
|
+
The requirements for [Nokogiri](http://nokogiri.org/) must be installed before the plugin can be installed. See the [Nokogiri tutorial](http://nokogiri.org/tutorials/installing_nokogiri.html) for
|
37
37
|
detailed instructions.
|
38
38
|
|
39
39
|
The plugin forces use of Nokogiri ~> 1.5 to prevent conflicts with older versions of system libraries, specifically zlib.
|
@@ -43,8 +43,8 @@ The plugin forces use of Nokogiri ~> 1.5 to prevent conflicts with older version
|
|
43
43
|
After installing the plugin, you must create a vSphere box. The example_box directory contains a metadata.json file
|
44
44
|
that can be used to create a dummy box with the command:
|
45
45
|
|
46
|
-
```
|
47
|
-
|
46
|
+
```bash
|
47
|
+
tar cvzf dummy.box ./metadata.json
|
48
48
|
```
|
49
49
|
|
50
50
|
This can be installed using the standard Vagrant methods or specified in the Vagrantfile.
|
@@ -77,7 +77,8 @@ and the Vagrant [AWS provider](https://github.com/mitchellh/vagrant-aws/tree/mas
|
|
77
77
|
|
78
78
|
### Supported Commands
|
79
79
|
|
80
|
-
Currently the only implemented actions are `up`, `halt`, `
|
80
|
+
Currently the only implemented actions are `up`, `halt`, `reload`, `destroy`,
|
81
|
+
and `ssh`.
|
81
82
|
|
82
83
|
`up` supports provisioning of the new VM with the standard Vagrant provisioners.
|
83
84
|
|
@@ -97,7 +98,7 @@ This provider has the following settings, all are required unless noted:
|
|
97
98
|
* `resource_pool_name` - the resource pool for the new VM. If not supplied, and cloning from a template, uses the root resource pool
|
98
99
|
* `clone_from_vm` - _Optional_ use a virtual machine instead of a template as the source for the cloning operation
|
99
100
|
* `template_name` - the VM or VM template to clone
|
100
|
-
* `vm_base_path` - _Optional_ path to folder where new VM
|
101
|
+
* `vm_base_path` - _Optional_ path to folder where new VM should be created, if not specified template's parent folder will be used
|
101
102
|
* `name` - _Optional_ name of the new VM, if missing the name will be auto generated
|
102
103
|
* `customization_spec_name` - _Optional_ customization spec for the new VM
|
103
104
|
* `data_store_name` - _Optional_ the datastore where the VM will be located
|
@@ -107,11 +108,34 @@ This provider has the following settings, all are required unless noted:
|
|
107
108
|
* `vlan` - _Optional_ vlan to connect the first NIC to
|
108
109
|
* `memory_mb` - _Optional_ Configure the amount of memory (in MB) for the new VM
|
109
110
|
* `cpu_count` - _Optional_ Configure the number of CPUs for the new VM
|
111
|
+
* `mac` - _Optional_ Used to set the mac address of the new VM
|
110
112
|
|
111
113
|
### Cloning from a VM rather than a template
|
112
114
|
|
113
115
|
To clone from an existing VM rather than a template, set `clone_from_vm` to true. If this value is set, `compute_resource_name` and `resource_pool_name` are not required.
|
114
116
|
|
117
|
+
### Template_Name
|
118
|
+
|
119
|
+
* The template name includes the actual template name and the directory path containing the template.
|
120
|
+
* **For example:** if the template is a directory called **vagrant-templates** and the template is called **ubuntu-lucid-template** the `template_name` setting would be:
|
121
|
+
```
|
122
|
+
vsphere.template_name = "vagrant-templates/ubuntu-lucid-template"
|
123
|
+
```
|
124
|
+
![Vagrant Vsphere Screenshot](https://raw.githubusercontent.com/nsidc/vagrant-vsphere/master/vsphere_screenshot.png)
|
125
|
+
|
126
|
+
|
127
|
+
### VM_Base_Path
|
128
|
+
|
129
|
+
* The new vagrant VM will be created in the same directory as the template it originated from.
|
130
|
+
* To create the VM in a directory other than the one where the template was located, include the **vm_base_path** setting.
|
131
|
+
* **For example:** if the machines will be stored in a directory called **vagrant-machines** the `vm_base_path` would be:
|
132
|
+
```
|
133
|
+
vsphere.vm_base_path = "vagrant-machines"
|
134
|
+
```
|
135
|
+
|
136
|
+
![Vagrant Vsphere Screenshot](https://raw.githubusercontent.com/nsidc/vagrant-vsphere/master/vsphere_screenshot.png)
|
137
|
+
|
138
|
+
|
115
139
|
### Setting a static IP address
|
116
140
|
|
117
141
|
To set a static IP, add a private network to your vagrant file:
|
@@ -128,12 +152,67 @@ The name for the new VM will be automagically generated from the Vagrant machine
|
|
128
152
|
|
129
153
|
This is useful if running Vagrant from multiple directories or if multiple machines are defined in the Vagrantfile.
|
130
154
|
|
155
|
+
### Setting the MAC address
|
156
|
+
|
157
|
+
To set a static MAC address, add a `vsphere.mac` to your `Vagrantfile`:
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
vsphere.mac = '00:50:56:XX:YY:ZZ'
|
161
|
+
```
|
162
|
+
|
163
|
+
Take care to avoid using invalid or duplicate VMware MAC addresses, as this can
|
164
|
+
easily break networking.
|
165
|
+
|
166
|
+
## Example Usage
|
167
|
+
|
168
|
+
### FILE: Vagrantfile
|
169
|
+
```ruby
|
170
|
+
VAGRANT_INSTANCE_NAME = "vagrant-vsphere"
|
171
|
+
|
172
|
+
Vagrant.configure("2") do |config|
|
173
|
+
config.vm.box = 'vsphere'
|
174
|
+
config.vm.box_url = 'https://vagrantcloud.com/ssx/boxes/vsphere-dummy/versions/0.0.1/providers/vsphere.box'
|
175
|
+
|
176
|
+
config.vm.hostname = VAGRANT_INSTANCE_NAME
|
177
|
+
config.vm.define VAGRANT_INSTANCE_NAME do |d|
|
178
|
+
end
|
179
|
+
|
180
|
+
config.vm.provider :vsphere do |vsphere|
|
181
|
+
vsphere.host = 'vsphere.local'
|
182
|
+
vsphere.name = VAGRANT_INSTANCE_NAME
|
183
|
+
vsphere.compute_resource_name = 'vagrant01.vsphere.local'
|
184
|
+
vsphere.resource_pool_name = 'vagrant'
|
185
|
+
vsphere.template_name = 'vagrant-templates/ubuntu14041'
|
186
|
+
vsphere.vm_base_path = "vagrant-machines"
|
187
|
+
|
188
|
+
vsphere.user = 'vagrant-user@vsphere'
|
189
|
+
vsphere.password = '***************'
|
190
|
+
vsphere.insecure = true
|
191
|
+
end
|
192
|
+
end
|
193
|
+
```
|
194
|
+
|
195
|
+
### Vagrant Up
|
196
|
+
```bash
|
197
|
+
vagrant up --provider=vsphere
|
198
|
+
```
|
199
|
+
|
200
|
+
### Vagrant SSH
|
201
|
+
```bash
|
202
|
+
vagrant ssh
|
203
|
+
```
|
204
|
+
|
205
|
+
### Vagrant Destroy
|
206
|
+
```bash
|
207
|
+
vagrant destroy
|
208
|
+
```
|
209
|
+
|
131
210
|
## Version History
|
132
211
|
* 0.0.1
|
133
212
|
* Initial release
|
134
213
|
* 0.1.0
|
135
214
|
* Add folder syncing with guest OS
|
136
|
-
* Add
|
215
|
+
* Add provisioning
|
137
216
|
* 0.2.0
|
138
217
|
* Merge halt action from [catharsis](https://github.com/catharsis)
|
139
218
|
* 0.3.0
|
@@ -182,7 +261,9 @@ This is useful if running Vagrant from multiple directories or if multiple machi
|
|
182
261
|
* Instruct vagrant to set the guest hostname according to Vagrantfile [#69 ddub:set-hostname](https://github.com/nsidc/vagrant-vsphere/pull/69)
|
183
262
|
* 0.10.0
|
184
263
|
* new optional parameter to clone into custom folder in vSphere [#73 mikola-spb:vm-base-path](https://github.com/nsidc/vagrant-vsphere/pull/73)
|
185
|
-
* follows
|
264
|
+
* follows [semver](http://semver.org/) better, this adds functionality in a
|
265
|
+
backwards compatible way, so bumps the minor. 0.9.0, should have been a
|
266
|
+
major version.
|
186
267
|
* 0.11.0
|
187
268
|
* Create the VM target folder if it doesn't exist #76 marnovdm:feature/create_vm_folder.
|
188
269
|
* 0.12.0
|
@@ -210,6 +291,12 @@ This is useful if running Vagrant from multiple directories or if multiple machi
|
|
210
291
|
* Fix compatibility with Vagrant 1.7 to use vSphere connection info from a base
|
211
292
|
box
|
212
293
|
[#111 mkuzmin:get-state](https://github.com/nsidc/vagrant-vsphere/pull/111).
|
294
|
+
* 0.18.0
|
295
|
+
* Gracefully power off the VM with `vagrant halt`, and shutdown before
|
296
|
+
deleting the VM with `vagrant destroy`
|
297
|
+
[#104 clintoncwolfe:shutdown-guest-on-halt](https://github.com/nsidc/vagrant-vsphere/pull/104).
|
298
|
+
* Add configuration option `mac` to specify a MAC address for the VM
|
299
|
+
[#108 dataplayer:master](https://github.com/nsidc/vagrant-vsphere/pull/108).
|
213
300
|
|
214
301
|
## Versioning
|
215
302
|
|
data/lib/vSphere/action.rb
CHANGED
@@ -11,10 +11,14 @@ module VagrantPlugins
|
|
11
11
|
Vagrant::Action::Builder.new.tap do |b|
|
12
12
|
b.use ConfigValidate
|
13
13
|
b.use ConnectVSphere
|
14
|
+
|
14
15
|
b.use Call, IsRunning do |env, b2|
|
15
16
|
if [:result]
|
16
|
-
|
17
|
-
|
17
|
+
b2.use Call, GracefulHalt, :poweroff, :running do |env, b3|
|
18
|
+
if !env[:result]
|
19
|
+
b3.use PowerOff
|
20
|
+
end
|
21
|
+
end
|
18
22
|
end
|
19
23
|
end
|
20
24
|
b.use Destroy
|
@@ -126,7 +130,11 @@ module VagrantPlugins
|
|
126
130
|
next
|
127
131
|
end
|
128
132
|
|
129
|
-
b3.use
|
133
|
+
b3.use Call, GracefulHalt, :poweroff, :running do |env, b4|
|
134
|
+
if !env[:result]
|
135
|
+
b4.use PowerOff
|
136
|
+
end
|
137
|
+
end
|
130
138
|
end
|
131
139
|
end
|
132
140
|
b.use CloseVSphere
|
data/lib/vSphere/action/clone.rb
CHANGED
@@ -32,6 +32,7 @@ module VagrantPlugins
|
|
32
32
|
customization_info = get_customization_spec_info_by_name connection, machine
|
33
33
|
|
34
34
|
spec[:customization] = get_customization_spec(machine, customization_info) unless customization_info.nil?
|
35
|
+
add_custom_mac(template, spec, config.mac) unless config.mac.nil?
|
35
36
|
add_custom_vlan(template, dc, spec, config.vlan) unless config.vlan.nil?
|
36
37
|
add_custom_memory(spec, config.memory_mb) unless config.memory_mb.nil?
|
37
38
|
add_custom_cpu(spec, config.cpu_count) unless config.cpu_count.nil?
|
@@ -139,20 +140,37 @@ module VagrantPlugins
|
|
139
140
|
end
|
140
141
|
end
|
141
142
|
|
143
|
+
def modify_network_card(template, spec)
|
144
|
+
spec[:config][:deviceChange] ||= []
|
145
|
+
@card ||= template.config.hardware.device.grep(RbVmomi::VIM::VirtualEthernetCard).first
|
146
|
+
|
147
|
+
fail Errors::VSphereError, :missing_network_card if @card.nil?
|
148
|
+
|
149
|
+
yield(@card)
|
150
|
+
|
151
|
+
dev_spec = RbVmomi::VIM.VirtualDeviceConfigSpec(:device => @card, :operation => "edit")
|
152
|
+
spec[:config][:deviceChange].push dev_spec
|
153
|
+
spec[:config][:deviceChange].uniq!
|
154
|
+
end
|
155
|
+
|
156
|
+
def add_custom_mac(template, spec, mac)
|
157
|
+
modify_network_card(template, spec) do |card|
|
158
|
+
card.macAddress = mac
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
142
162
|
def add_custom_vlan(template, dc, spec, vlan)
|
143
|
-
spec[:config][:deviceChange] = []
|
144
163
|
network = get_network_by_name(dc, vlan)
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
164
|
+
|
165
|
+
modify_network_card(template, spec) do |card|
|
166
|
+
begin
|
167
|
+
switch_port = RbVmomi::VIM.DistributedVirtualSwitchPortConnection(:switchUuid => network.config.distributedVirtualSwitch.uuid, :portgroupKey => network.key)
|
168
|
+
card.backing.port = switch_port
|
169
|
+
rescue
|
170
|
+
# not connected to a distibuted switch?
|
171
|
+
card.backing = RbVmomi::VIM::VirtualEthernetCardNetworkBackingInfo(:network => network, :deviceName => network.name)
|
172
|
+
end
|
153
173
|
end
|
154
|
-
dev_spec = RbVmomi::VIM.VirtualDeviceConfigSpec(:device => card, :operation => "edit")
|
155
|
-
spec[:config][:deviceChange].push dev_spec
|
156
174
|
end
|
157
175
|
|
158
176
|
def add_custom_memory(spec, memory_mb)
|
data/lib/vSphere/config.rb
CHANGED
data/lib/vSphere/version.rb
CHANGED
data/spec/action_spec.rb
CHANGED
@@ -69,12 +69,17 @@ describe VagrantPlugins::VSphere::Action do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
describe 'halt' do
|
72
|
-
|
73
|
-
|
72
|
+
after :each do
|
73
|
+
run :halt
|
74
|
+
end
|
74
75
|
|
75
|
-
|
76
|
+
it 'should connect to vSphere' do
|
77
|
+
VagrantPlugins::VSphere::Action::ConnectVSphere.any_instance.should_receive(:call)
|
78
|
+
end
|
76
79
|
|
77
|
-
|
80
|
+
it 'should gracefully power off the VM' do
|
81
|
+
@machine.state.stub(:id).and_return(:running)
|
82
|
+
VagrantPlugins::VSphere::Action::GracefulHalt.any_instance.should_receive(:call)
|
78
83
|
end
|
79
84
|
end
|
80
85
|
|
@@ -125,10 +130,10 @@ describe VagrantPlugins::VSphere::Action do
|
|
125
130
|
run :reload
|
126
131
|
end
|
127
132
|
|
128
|
-
it 'should power off the VM' do
|
133
|
+
it 'should gracefully power off the VM' do
|
129
134
|
@machine.state.stub(:id).and_return(:running)
|
130
135
|
|
131
|
-
VagrantPlugins::VSphere::Action::
|
136
|
+
VagrantPlugins::VSphere::Action::GracefulHalt.any_instance.should_receive(:call)
|
132
137
|
end
|
133
138
|
|
134
139
|
it 'should connect to vSphere' do
|
data/spec/spec_helper.rb
CHANGED
@@ -55,7 +55,8 @@ RSpec.configure do |config|
|
|
55
55
|
:proxy_port => nil,
|
56
56
|
:vlan => nil,
|
57
57
|
:memory_mb => nil,
|
58
|
-
:cpu_count => nil
|
58
|
+
:cpu_count => nil,
|
59
|
+
:mac => nil)
|
59
60
|
vm_config = double(
|
60
61
|
:vm => double('config_vm',
|
61
62
|
:box => nil,
|
@@ -63,7 +64,8 @@ RSpec.configure do |config|
|
|
63
64
|
:provisioners => [],
|
64
65
|
:hostname => nil,
|
65
66
|
:communicator => nil,
|
66
|
-
:networks => [[:private_network, {:ip => '0.0.0.0'}]]
|
67
|
+
:networks => [[:private_network, {:ip => '0.0.0.0'}]],
|
68
|
+
:graceful_halt_timeout => 0.1),
|
67
69
|
:validate => []
|
68
70
|
)
|
69
71
|
@app = double 'app', :call => true
|
@@ -75,12 +77,13 @@ RSpec.configure do |config|
|
|
75
77
|
:ssh_info => {},
|
76
78
|
:data_dir => Pathname.new(''),
|
77
79
|
:id => nil,
|
78
|
-
:id= => nil
|
80
|
+
:id= => nil,
|
81
|
+
:guest => double('guest', :capability => nil)
|
79
82
|
|
80
83
|
|
81
84
|
@env = {
|
82
85
|
:machine => @machine,
|
83
|
-
:ui => double('ui', :info => nil)
|
86
|
+
:ui => double('ui', :info => nil, :output => nil)
|
84
87
|
}
|
85
88
|
|
86
89
|
@vm = double('vm',
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-vsphere
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Grauch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- spec/power_off_spec.rb
|
158
158
|
- spec/spec_helper.rb
|
159
159
|
- vSphere.gemspec
|
160
|
+
- vsphere_screenshot.png
|
160
161
|
homepage: ''
|
161
162
|
licenses:
|
162
163
|
- MIT
|