chef-metal-vsphere 0.1.3 → 0.1.4
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/README.md
CHANGED
@@ -69,9 +69,14 @@ Create or obtain a unix/linux VM template. The VM template must:
|
|
69
69
|
|
70
70
|
This will clone your VM template to create two VMware Virtual Machines, "metal_1" and "metal_2", in the vSphere Folder specified by vm_folder, bootstrapped to an empty runlist. It will then stop (guest shutdown) and delete the vms.
|
71
71
|
|
72
|
+
Roadmap
|
73
|
+
-------
|
74
|
+
|
75
|
+
Check out [TODO.md](TODO.md)
|
76
|
+
|
72
77
|
Bugs and Contact
|
73
78
|
----------------
|
74
79
|
|
75
|
-
Please submit bugs at [https://github.com/RallySoftware-cookbooks/chef-metal-vsphere
|
80
|
+
Please submit bugs at [chef-metal-vpshere](https://github.com/RallySoftware-cookbooks/chef-metal-vsphere), contact Brian Dupras on Twitter at @briandupras, email at rallysoftware-cookbooks@rallydev.com.
|
76
81
|
|
77
82
|
*Warning* if you get an rbvmomi error regarding VMODL::AnyType, add `gem 'nokogiri', '1.5.5'` to your dependencies.
|
@@ -24,6 +24,21 @@ module ChefMetalVsphere
|
|
24
24
|
vm = folder.find(vm_name, RbVmomi::VIM::VirtualMachine)
|
25
25
|
end
|
26
26
|
|
27
|
+
def vm_started?(vm, wait_on_port = 22)
|
28
|
+
return false if vm.nil?
|
29
|
+
state = vm.runtime.powerState
|
30
|
+
return false unless state == 'poweredOn'
|
31
|
+
return false unless port_ready?(vm, wait_on_port)
|
32
|
+
return true
|
33
|
+
end
|
34
|
+
|
35
|
+
def vm_stopped?(vm)
|
36
|
+
return true if vm.nil?
|
37
|
+
state = vm.runtime.powerState
|
38
|
+
return false unless state == 'poweredOff'
|
39
|
+
return false
|
40
|
+
end
|
41
|
+
|
27
42
|
def start_vm(vm, wait_on_port = 22)
|
28
43
|
state = vm.runtime.powerState
|
29
44
|
unless state == 'poweredOn'
|
@@ -137,8 +137,10 @@ module ChefMetalVsphere
|
|
137
137
|
|
138
138
|
vm = vm_instance(action_handler, node)
|
139
139
|
|
140
|
-
|
141
|
-
|
140
|
+
unless vm_started?(vm, wait_on_port)
|
141
|
+
action_handler.perform_action "Start VM and wait for port #{wait_on_port}" do
|
142
|
+
start_vm(vm, wait_on_port)
|
143
|
+
end
|
142
144
|
end
|
143
145
|
|
144
146
|
machine = machine_for(node)
|
@@ -177,8 +179,12 @@ module ChefMetalVsphere
|
|
177
179
|
end
|
178
180
|
vm_name = provisioner_output['vm_name'] || node['name']
|
179
181
|
vm_folder = provisioner_output['bootstrap_options']['vm_folder']
|
180
|
-
|
181
|
-
|
182
|
+
vm = vm_for(node)
|
183
|
+
|
184
|
+
unless vm_stopped?(vm)
|
185
|
+
action_handler.perform_action "Shutdown guest OS and power off VM [#{vm_folder}/#{vm_name}]" do
|
186
|
+
stop_vm(vm)
|
187
|
+
end
|
182
188
|
end
|
183
189
|
end
|
184
190
|
|
@@ -198,7 +204,7 @@ module ChefMetalVsphere
|
|
198
204
|
vm = find_vm(datacenter, vm_folder, vm_name)
|
199
205
|
return vm unless vm.nil?
|
200
206
|
|
201
|
-
action_handler.perform_action "Clone a new VM instance
|
207
|
+
action_handler.perform_action "Clone a new VM instance from [#{bootstrap_options['template_folder']}/#{bootstrap_options['template_name']}]" do
|
202
208
|
vm = clone_vm(vm_name, bootstrap_options)
|
203
209
|
end
|
204
210
|
|
@@ -215,7 +221,9 @@ module ChefMetalVsphere
|
|
215
221
|
end
|
216
222
|
|
217
223
|
def machine_for(node)
|
218
|
-
|
224
|
+
vm = vm_for(node) or raise "VM for node #{node['name']} has not been created!"
|
225
|
+
|
226
|
+
if is_windows?(vm)
|
219
227
|
ChefMetal::Machine::WindowsMachine.new(node, transport_for(node), convergence_strategy_for(node))
|
220
228
|
else
|
221
229
|
ChefMetal::Machine::UnixMachine.new(node, transport_for(node), convergence_strategy_for(node))
|
@@ -229,9 +237,11 @@ module ChefMetalVsphere
|
|
229
237
|
vm_folder = bootstrap_options['vm_folder']
|
230
238
|
vm_name = node['normal']['provisioner_output']['vm_name']
|
231
239
|
vm = find_vm(datacenter, vm_folder, vm_name)
|
240
|
+
vm
|
232
241
|
end
|
233
242
|
|
234
243
|
def is_windows?(vm)
|
244
|
+
return false if vm.nil?
|
235
245
|
vm.guest.guestFamily == 'windowsGuest'
|
236
246
|
end
|
237
247
|
|
@@ -267,8 +277,9 @@ module ChefMetalVsphere
|
|
267
277
|
|
268
278
|
def create_ssh_transport(node)
|
269
279
|
bootstrap_options = node['normal']['provisioner_output']['bootstrap_options']
|
280
|
+
vm = vm_for(node) or raise "VM for node #{node['name']} has not been created!"
|
270
281
|
|
271
|
-
hostname =
|
282
|
+
hostname = vm.guest.ipAddress
|
272
283
|
ssh_user = bootstrap_options['ssh']['user']
|
273
284
|
ssh_options = symbolize_keys(bootstrap_options['ssh'])
|
274
285
|
transport_options = {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-metal-vsphere
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
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: 2014-05-
|
12
|
+
date: 2014-05-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -106,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
106
|
version: '0'
|
107
107
|
segments:
|
108
108
|
- 0
|
109
|
-
hash: -
|
109
|
+
hash: -1936715573261494371
|
110
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
111
|
none: false
|
112
112
|
requirements:
|
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
115
|
version: '0'
|
116
116
|
segments:
|
117
117
|
- 0
|
118
|
-
hash: -
|
118
|
+
hash: -1936715573261494371
|
119
119
|
requirements: []
|
120
120
|
rubyforge_project:
|
121
121
|
rubygems_version: 1.8.28
|