chef-provisioning-vsphere 0.5.7.dev5 → 0.5.7.dev6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71c99341e65d9084e907c86d3cc7b7bda5084a38
4
- data.tar.gz: 41a2f45c4acfa77c40d2e9581b887e2d776d62bf
3
+ metadata.gz: 9a2f55b3a6433abfdd06aa270db00b1bed0cb8ab
4
+ data.tar.gz: 74c8800daf24128394246648b0e02540ac0485e8
5
5
  SHA512:
6
- metadata.gz: cf050ba6da9b367ec9930a4202832e296529b033f23547abfe56417206909edfeb425ab352ba3f17918f5b0e20d30721a6a2b5b0e73b061fcf1ba5d3d75b9e6a
7
- data.tar.gz: 6369e85397d54ffa852486b467c324ee424ec3b84ad88e02d35c12b754c3eb64f06771732502d556aa4f36e1c4d4ac3969743dbfe260c6eadcbbd39a750b0b17
6
+ metadata.gz: 56b566ca067ed38e6d7b639d6a687468b1189be2693bcd608cd85753d98cba8361009f00e145bf2ee2f9dffc8c766898767787f6f1b9177b73271a5dbc3359ce
7
+ data.tar.gz: a01d8b591d62cd589569f868e3aa606c1f133f6a099caaab60534628848a56168014d3cd0a95a6722c86d61d8594ca743fe2ff0add2919ca5706ddb99da1cbcf
@@ -51,23 +51,30 @@ module ChefProvisioningVsphere
51
51
  end
52
52
 
53
53
  def relocate_spec_for(vm_template, options)
54
+ rspec = RbVmomi::VIM.VirtualMachineRelocateSpec
55
+ host = nil
56
+
54
57
  if options.has_key?(:host)
55
58
  host = vsphere_helper.find_host(options[:host])
56
- rspec = RbVmomi::VIM.VirtualMachineRelocateSpec(host: host)
57
- else
58
- if options[:resource_pool]
59
- pool = vsphere_helper.find_pool(options[:resource_pool])
60
- else
61
- pool = vm_template.resourcePool
62
- end
63
- rspec = RbVmomi::VIM.VirtualMachineRelocateSpec(pool: pool)
64
- raise "either :host or :resource_pool must be specified \
65
- when cloning from a VM Template" if pool.nil?
59
+ rspec.host = host
66
60
  end
67
61
 
62
+ if options[:resource_pool]
63
+ rspec.pool = vsphere_helper.find_pool(options[:resource_pool])
64
+ elsif vm_template.config.template && !host.nil?
65
+ rspec.pool = host.parent.resourcePool # assign to the "invisible" pool root
66
+ elsif vm_template.config.template
67
+ raise 'either :host or :resource_pool must be specified when cloning from a VM Template'
68
+ end
69
+
70
+
68
71
  if options[:use_linked_clone]
69
- vsphere_helper.create_delta_disk(vm_template)
70
- rspec.diskMoveType = :moveChildMostDiskBacking
72
+ if vm_template.config.template
73
+ Chef::Log.warn("Using a VM Template, ignoring use_linked_clone.")
74
+ else
75
+ vsphere_helper.create_delta_disk(vm_template)
76
+ rspec.diskMoveType = :moveChildMostDiskBacking
77
+ end
71
78
  end
72
79
 
73
80
  unless options[:datastore].to_s.empty?
@@ -495,7 +495,7 @@ module ChefProvisioningVsphere
495
495
 
496
496
  spec_builder = CloneSpecBuilder.new(vsphere_helper, action_handler)
497
497
  clone_spec = spec_builder.build(vm_template, machine_name, bootstrap_options)
498
- Chef::Log.debug("Clone spec: #{clone_spec.pretty_inspect}")
498
+ Chef::Log.debug("Clone spec: #{clone_spec.pretty_inspect}")
499
499
 
500
500
  vm_folder = vsphere_helper.find_folder(bootstrap_options[:vm_folder])
501
501
  vm_template.CloneVM_Task(
@@ -1,3 +1,3 @@
1
1
  module ChefProvisioningVsphere
2
- VERSION = '0.5.7.dev5'
2
+ VERSION = '0.5.7.dev6'
3
3
  end
@@ -3,10 +3,14 @@ require 'chef/provisioning/vsphere_driver'
3
3
  require_relative 'support/vsphere_helper_stub'
4
4
 
5
5
  describe ChefProvisioningVsphere::CloneSpecBuilder do
6
- let(:options) { { host: 'host' } }
7
- let(:vm_template) { double('template', resourcePool: 'pool') }
6
+ let(:options) { Hash.new }
7
+ let(:vm_template) { double('template') }
8
8
 
9
- before { allow(vm_template).to receive_message_chain(:config, :guestId) }
9
+ before do
10
+ allow(vm_template).to receive_message_chain(:config, :guestId)
11
+ allow(vm_template).to receive_message_chain(:config, :template)
12
+ .and_return(false)
13
+ end
10
14
 
11
15
  subject do
12
16
  builder = ChefProvisioningVsphere::CloneSpecBuilder.new(
@@ -24,11 +28,75 @@ describe ChefProvisioningVsphere::CloneSpecBuilder do
24
28
  end
25
29
  end
26
30
 
31
+ context 'using linked clone on a template source' do
32
+ before do
33
+ options[:use_linked_clone] = true
34
+ options[:host] = 'host'
35
+ allow(vm_template).to receive_message_chain(:config, :template)
36
+ .and_return(true)
37
+ end
38
+
39
+ it 'does not set the disk move type of the relocation spec' do
40
+ expect(subject.location.diskMoveType).to be nil
41
+ end
42
+ end
43
+
27
44
  context 'not using linked clones' do
28
45
  before { options[:use_linked_clone] = false }
29
46
 
30
- it 'sets the disk move type of the relocation spec' do
47
+ it 'does not set the disk move type of the relocation spec' do
31
48
  expect(subject.location.diskMoveType).to be nil
32
49
  end
33
50
  end
51
+
52
+ context 'specifying a host' do
53
+ before { options[:host] = 'host' }
54
+
55
+ it 'sets the host' do
56
+ expect(subject.location.host).to_not be nil
57
+ end
58
+ end
59
+
60
+ context 'not specifying a host' do
61
+ it 'does not set the host' do
62
+ expect(subject.location.host).to be nil
63
+ end
64
+ end
65
+
66
+ context 'specifying a pool' do
67
+ before { options[:resource_pool] = 'pool' }
68
+
69
+ it 'sets the pool' do
70
+ expect(subject.location.pool).to_not be nil
71
+ end
72
+ end
73
+
74
+ context 'not specifying a pool' do
75
+ it 'does not set the pool' do
76
+ expect(subject.location.pool).to be nil
77
+ end
78
+ end
79
+
80
+ context 'not specifying a pool but specifying a host on a template' do
81
+ before do
82
+ options[:host] = 'host'
83
+ allow(vm_template).to receive_message_chain(:config, :template)
84
+ .and_return(true)
85
+ end
86
+
87
+ it 'sets the pool to the hosts parent root pool' do
88
+ expect(subject.location.pool).to be subject.location.host.parent.resourcePool
89
+ end
90
+ end
91
+
92
+ context 'not specifying a pool or host when cloning from a template' do
93
+ before do
94
+ allow(vm_template).to receive_message_chain(:config, :template)
95
+ .and_return(true)
96
+ end
97
+
98
+ it 'raises an error' do
99
+ expect { subject.to raise_error }
100
+ end
101
+ end
34
102
  end
@@ -11,7 +11,7 @@ module ChefProvisioningVsphereStubs
11
11
  end
12
12
 
13
13
  def find_host(host_name)
14
- RbVmomi::VIM::HostSystem.new(nil, nil)
14
+ RbVmomi::VIM::HostSystem.new
15
15
  end
16
16
 
17
17
  def find_pool(pool_name)
@@ -30,3 +30,23 @@ module ChefProvisioningVsphereStubs
30
30
  end
31
31
  end
32
32
  end
33
+
34
+ module RbVmomi
35
+ class VIM::HostSystem
36
+ attr_reader :parent
37
+
38
+ def parent
39
+ @parent ||= RbVmomi::VIM::ComputeResource.new
40
+ end
41
+ end
42
+ end
43
+
44
+ module RbVmomi
45
+ class VIM::ComputeResource
46
+ attr_reader :resourcePool
47
+
48
+ def resourcePool
49
+ @resourcePool ||= RbVmomi::VIM::ResourcePool.new(nil, nil)
50
+ end
51
+ end
52
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-provisioning-vsphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7.dev5
4
+ version: 0.5.7.dev6
5
5
  platform: ruby
6
6
  authors:
7
7
  - CenturyLink Cloud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-14 00:00:00.000000000 Z
11
+ date: 2015-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbvmomi