vagrant-vsphere 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -3
- data/lib/vSphere/action/clone.rb +13 -4
- data/lib/vSphere/config.rb +1 -0
- data/lib/vSphere/version.rb +1 -1
- data/locales/en.yml +2 -0
- data/spec/clone_spec.rb +16 -1
- data/spec/spec_helper.rb +4 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b756fdb157919fecd29925a00eff198363f03cb
|
4
|
+
data.tar.gz: 469e8fb045b8480ea7421383b89de2bb64051eee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10a8751efe9d1c22a6cd82aa8d77d66d6fdb2d52bba06998f37ea0c38baf6572b54ab3b4a8bb4a489a46766bedefffed896d80a3f4dcda2d77405cb52b35b6be
|
7
|
+
data.tar.gz: 79ca29a2965f8cdbd1babbda23129819429c50624cf863385df6465fedc7a21903f90d50b494b01943fd52e7cee8e6f797443842a4647e73f481d8939dcfabe9
|
data/README.md
CHANGED
@@ -12,9 +12,9 @@ This provider is built on top of the [RbVmomi](https://github.com/vmware/rbvmomi
|
|
12
12
|
* libxml2, libxml2-dev, libxslt, libxslt-dev
|
13
13
|
|
14
14
|
## Current Version
|
15
|
-
**0.
|
15
|
+
**0.10.0**
|
16
16
|
|
17
|
-
vagrant-vsphere (0.
|
17
|
+
vagrant-vsphere (0.10.0) is available from [RubyGems.org](https://rubygems.org/gems/vagrant-vsphere)
|
18
18
|
|
19
19
|
## Installation
|
20
20
|
|
@@ -93,6 +93,7 @@ This provider has the following settings, all are required unless noted:
|
|
93
93
|
* `resource_pool_name` - the resource pool for the new VM. If not supplied, and cloning from a template, uses the root resource pool
|
94
94
|
* `clone_from_vm` - _Optional_ use a virtual machine instead of a template as the source for the cloning operation
|
95
95
|
* `template_name` - the VM or VM template to clone
|
96
|
+
* `vm_base_path` - _Optional_ path to folder where new VM sould be created, if not specified template's parent folder will be used
|
96
97
|
* `name` - _Optional_ name of the new VM, if missing the name will be auto generated
|
97
98
|
* `customization_spec_name` - _Optional_ customization spec for the new VM
|
98
99
|
* `data_store_name` - _Optional_ the datastore where the VM will be located
|
@@ -172,7 +173,9 @@ This is useful if running Vagrant from multiple directories or if multiple machi
|
|
172
173
|
* reuse folder sync code from Vagrant core. [#66 mkuzmin:sync-folders](https://github.com/nsidc/vagrant-vsphere/pull/66)
|
173
174
|
* 0.9.2
|
174
175
|
* Instruct vagrant to set the guest hostname according to Vagrantfile [#69 ddub:set-hostname](https://github.com/nsidc/vagrant-vsphere/pull/69)
|
175
|
-
|
176
|
+
* 0.10.0
|
177
|
+
* new optional parameter to clone into custom folder in vSphere [#73 mikola-spb:vm-base-path](https://github.com/nsidc/vagrant-vsphere/pull/73)
|
178
|
+
* follows semvar better, this adds functionality in a backwards compatible way, so bumps the minor. 0.9.0, should have been a major version.
|
176
179
|
|
177
180
|
## Versioning
|
178
181
|
|
data/lib/vSphere/action/clone.rb
CHANGED
@@ -21,8 +21,9 @@ module VagrantPlugins
|
|
21
21
|
name = get_name machine, config
|
22
22
|
dc = get_datacenter connection, machine
|
23
23
|
template = dc.find_vm config.template_name
|
24
|
-
|
25
24
|
raise Errors::VSphereError, :'missing_template' if template.nil?
|
25
|
+
vm_base_folder = get_vm_base_folder dc, template, config
|
26
|
+
raise Errors::VSphereError, :'invalid_base_path' if vm_base_folder.nil?
|
26
27
|
|
27
28
|
begin
|
28
29
|
location = get_location connection, machine, config, template
|
@@ -32,10 +33,10 @@ module VagrantPlugins
|
|
32
33
|
spec[:customization] = get_customization_spec(machine, customization_info) unless customization_info.nil?
|
33
34
|
|
34
35
|
env[:ui].info I18n.t('vsphere.creating_cloned_vm')
|
35
|
-
env[:ui].info " -- #{config.clone_from_vm ? "Source" : "Template"} VM: #{
|
36
|
-
env[:ui].info " --
|
36
|
+
env[:ui].info " -- #{config.clone_from_vm ? "Source" : "Template"} VM: #{template.pretty_path}"
|
37
|
+
env[:ui].info " -- Target VM: #{vm_base_folder.pretty_path}/#{name}"
|
37
38
|
|
38
|
-
new_vm = template.CloneVM_Task(:folder =>
|
39
|
+
new_vm = template.CloneVM_Task(:folder => vm_base_folder, :name => name, :spec => spec).wait_for_completion
|
39
40
|
rescue Errors::VSphereError => e
|
40
41
|
raise
|
41
42
|
rescue Exception => e
|
@@ -125,6 +126,14 @@ module VagrantPlugins
|
|
125
126
|
# milliseconds + random number suffix to allow for simultaneous `vagrant up` of the same box in different dirs
|
126
127
|
prefix + "_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
|
127
128
|
end
|
129
|
+
|
130
|
+
def get_vm_base_folder(dc, template, config)
|
131
|
+
if config.vm_base_path.nil?
|
132
|
+
template.parent
|
133
|
+
else
|
134
|
+
dc.vmFolder.traverse(config.vm_base_path, RbVmomi::VIM::Folder)
|
135
|
+
end
|
136
|
+
end
|
128
137
|
end
|
129
138
|
end
|
130
139
|
end
|
data/lib/vSphere/config.rb
CHANGED
data/lib/vSphere/version.rb
CHANGED
data/locales/en.yml
CHANGED
@@ -24,6 +24,8 @@ en:
|
|
24
24
|
errors:
|
25
25
|
missing_template: |-
|
26
26
|
Configured template/source VM could not be found
|
27
|
+
invalid_base_path: |-
|
28
|
+
Could not find base path for target VM, check 'vm_base_path' configuration value
|
27
29
|
missing_datacenter: |-
|
28
30
|
Configured data center not found
|
29
31
|
missing_compute_resource: |-
|
data/spec/clone_spec.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
CUSTOM_VM_FOLDER = 'custom_vm_folder'
|
4
|
+
|
3
5
|
describe VagrantPlugins::VSphere::Action::Clone do
|
4
6
|
before :each do
|
5
7
|
@env[:vSphere_connection] = @vim
|
6
8
|
end
|
7
9
|
|
8
|
-
it
|
10
|
+
it "should create a CloneVM task with template's parent" do
|
9
11
|
call
|
10
12
|
expect(@template).to have_received(:CloneVM_Task).with({
|
11
13
|
:folder => @data_center,
|
@@ -14,6 +16,19 @@ describe VagrantPlugins::VSphere::Action::Clone do
|
|
14
16
|
})
|
15
17
|
end
|
16
18
|
|
19
|
+
it 'should create a CloneVM task with custom folder when given vm base path' do
|
20
|
+
custom_base_folder = double(CUSTOM_VM_FOLDER,
|
21
|
+
:pretty_path => "#{@data_center.pretty_path}/#{CUSTOM_VM_FOLDER}")
|
22
|
+
@machine.provider_config.stub(:vm_base_path).and_return(CUSTOM_VM_FOLDER)
|
23
|
+
@data_center.vmFolder.stub(:traverse).with(CUSTOM_VM_FOLDER, RbVmomi::VIM::Folder).and_return(custom_base_folder)
|
24
|
+
call
|
25
|
+
expect(@template).to have_received(:CloneVM_Task).with({
|
26
|
+
:folder => custom_base_folder,
|
27
|
+
:name => NAME,
|
28
|
+
:spec => {:location => {:pool => @child_resource_pool} }
|
29
|
+
})
|
30
|
+
end
|
31
|
+
|
17
32
|
it 'should set the machine id to be the new UUID' do
|
18
33
|
call
|
19
34
|
expect(@machine).to have_received(:id=).with(NEW_UUID)
|
data/spec/spec_helper.rb
CHANGED
@@ -42,6 +42,7 @@ RSpec.configure do |config|
|
|
42
42
|
:data_center_name => nil,
|
43
43
|
:compute_resource_name => 'testcomputeresource',
|
44
44
|
:resource_pool_name => 'testresourcepool',
|
45
|
+
:vm_base_path => nil,
|
45
46
|
:template_name => TEMPLATE,
|
46
47
|
:name => NAME,
|
47
48
|
:insecure => true,
|
@@ -96,12 +97,14 @@ RSpec.configure do |config|
|
|
96
97
|
|
97
98
|
@data_center = double('data_center',
|
98
99
|
:vmFolder => vm_folder,
|
100
|
+
:pretty_path => "data_center/#{vm_folder}",
|
99
101
|
:find_compute_resource => double('compute resource', :resourcePool => @root_resource_pool))
|
100
102
|
|
101
103
|
@template = double('template_vm',
|
102
104
|
:parent => @data_center,
|
105
|
+
:pretty_path => "#{@data_center.pretty_path}/template_vm",
|
103
106
|
:CloneVM_Task => double('result',
|
104
|
-
|
107
|
+
:wait_for_completion => double('new_vm', :config => double('config', :uuid => NEW_UUID))))
|
105
108
|
|
106
109
|
@data_center.stub(:find_vm).with(TEMPLATE).and_return(@template)
|
107
110
|
|