knife-xapi 0.1.1 → 0.1.2
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/lib/chef/knife/xapi_base.rb +41 -10
- data/lib/chef/knife/xapi_guest_create.rb +13 -6
- data/lib/knife-xapi/version.rb +1 -1
- metadata +2 -2
data/lib/chef/knife/xapi_base.rb
CHANGED
@@ -19,7 +19,10 @@
|
|
19
19
|
# See the License for the specific language governing permissions and
|
20
20
|
# limitations under the License.
|
21
21
|
|
22
|
-
|
22
|
+
# ruby 1.8.7 doesn't like ||= with Constants
|
23
|
+
unless defined?(XAPI_TEMP_REGEX)
|
24
|
+
XAPI_TEMP_REGEX = /^CentOS 5.*\(64-bit\)/
|
25
|
+
end
|
23
26
|
|
24
27
|
require 'chef/knife'
|
25
28
|
require 'units/standard'
|
@@ -27,9 +30,7 @@ require 'units/standard'
|
|
27
30
|
class Chef::Knife
|
28
31
|
module XapiBase
|
29
32
|
|
30
|
-
|
31
33
|
def self.included(includer)
|
32
|
-
|
33
34
|
includer.class_eval do
|
34
35
|
deps do
|
35
36
|
require 'xenapi'
|
@@ -183,6 +184,7 @@ class Chef::Knife
|
|
183
184
|
end
|
184
185
|
|
185
186
|
# convert 1g/1m/1t to bytes
|
187
|
+
# rounds to whole numbers
|
186
188
|
def input_to_bytes(size)
|
187
189
|
case size
|
188
190
|
when /g|gb/i
|
@@ -208,12 +210,41 @@ class Chef::Knife
|
|
208
210
|
"read_only" => false,
|
209
211
|
"other_config" => {},
|
210
212
|
}
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
213
|
+
|
214
|
+
# Async create the VDI
|
215
|
+
task = xapi.Async.VDI.create(vdi_record)
|
216
|
+
ui.msg "waiting for VDI Create"
|
217
|
+
vdi_ref = get_task_ref(task)
|
215
218
|
end
|
216
219
|
|
220
|
+
|
221
|
+
# sit and wait for taks to exit pending state
|
222
|
+
def wait_on_task(task)
|
223
|
+
while xapi.task.get_status(task) == "pending"
|
224
|
+
progress = xapi.task.get_progress(task)
|
225
|
+
sleep 1
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
# return the opaque ref of the task that was run by a task record if it succeded.
|
230
|
+
# else it returns nil
|
231
|
+
def get_task_ref(task)
|
232
|
+
wait_on_task(task)
|
233
|
+
case xapi.task.get_status(task)
|
234
|
+
when "success"
|
235
|
+
# xapi task record returns result as <value>OpaqueRef:....</value>
|
236
|
+
# we want the ref. this way it will work if they fix it to return jsut the ref
|
237
|
+
ref = xapi.task.get_result(task).match(/OpaqueRef:[^<]+/).to_s
|
238
|
+
#cleanup our task
|
239
|
+
xapi.task.destroy(task)
|
240
|
+
return ref
|
241
|
+
else
|
242
|
+
ui.msg( "#{h.color 'ERROR:', :red } Task returned: #{xapi.task.get_result(task)}" )
|
243
|
+
return nil
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
|
217
248
|
# create vbd and return a ref
|
218
249
|
def create_vbd(vm_ref, vdi_ref, position)
|
219
250
|
vbd_record = {
|
@@ -230,9 +261,9 @@ class Chef::Knife
|
|
230
261
|
"type" => "Disk"
|
231
262
|
}
|
232
263
|
|
233
|
-
|
234
|
-
ui.msg "
|
235
|
-
vbd_ref
|
264
|
+
task = xapi.Async.VBD.create(vbd_record)
|
265
|
+
ui.msg "Waiting for VBD create"
|
266
|
+
vbd_ref = get_task_ref(task)
|
236
267
|
end
|
237
268
|
|
238
269
|
end
|
@@ -105,9 +105,8 @@ class Chef
|
|
105
105
|
xapi.VM.set_other_config(vm_ref, { "install-repository" => repo } )
|
106
106
|
|
107
107
|
cpus = Chef::Config[:knife][:xapi_cpus] || 2
|
108
|
-
|
109
|
-
xapi.VM.
|
110
|
-
xapi.VM.set_VCPUs_at_startup( vm_ref, cpus.to_s )
|
108
|
+
xapi.VM.set_VCPUs_max( vm_ref, cpus )
|
109
|
+
xapi.VM.set_VCPUs_at_startup( vm_ref, cpus )
|
111
110
|
|
112
111
|
memory_size = input_to_bytes( Chef::Config[:knife][:xapi_mem] || "1g" ).to_s
|
113
112
|
ui.msg "Mem size: #{ h.color( memory_size, :cyan)}"
|
@@ -144,19 +143,27 @@ class Chef
|
|
144
143
|
# Create the VDI
|
145
144
|
disk_size = Chef::Config[:knife][:xapi_disk_size] || "8g"
|
146
145
|
vdi_ref = create_vdi("#{server_name}-root", sr_ref, disk_size )
|
146
|
+
# if vdi_ref is nill we need to bail/cleanup
|
147
|
+
cleanup(vm_ref) unless vdi_ref
|
148
|
+
ui.msg( "#{ h.color "OK", :green}" )
|
147
149
|
|
148
150
|
# Attach the VDI to the VM
|
149
151
|
vbd_ref = create_vbd(vm_ref, vdi_ref, 0)
|
150
|
-
|
152
|
+
cleanup(vm_ref) unless vbd_ref
|
153
|
+
ui.msg( "#{ h.color "OK", :green}" )
|
154
|
+
|
151
155
|
ui.msg "Provisioning new Guest: #{h.color(vm_ref, :bold, :cyan )}"
|
152
156
|
provisioned = xapi.VM.provision(vm_ref)
|
153
157
|
|
154
158
|
ui.msg "Starting new Guest: #{h.color( provisioned, :cyan)} "
|
155
|
-
|
159
|
+
|
160
|
+
task = xapi.Async.VM.start(vm_ref, false, true)
|
161
|
+
wait_on_task(task)
|
162
|
+
ui.msg( "#{ h.color "Done!", :green}" )
|
156
163
|
|
157
164
|
rescue Exception => e
|
158
165
|
ui.msg "#{h.color 'ERROR:'} #{h.color( e.message, :red )}"
|
159
|
-
ui.
|
166
|
+
ui.msg "#{h.color( e.backtrace, :yellow)}"
|
160
167
|
|
161
168
|
cleanup(vm_ref)
|
162
169
|
end
|
data/lib/knife-xapi/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-xapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
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: 2012-04-
|
12
|
+
date: 2012-04-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|