chef-metal-vsphere 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
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
|