opennebula-cli 3.9.0.beta → 3.9.80.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/NOTICE +1 -2
- data/bin/oneacct +5 -4
- data/bin/oneacl +1 -1
- data/bin/onecluster +3 -2
- data/bin/onedatastore +5 -3
- data/bin/onegroup +5 -4
- data/bin/onehost +3 -2
- data/bin/oneimage +3 -2
- data/bin/onetemplate +37 -9
- data/bin/oneuser +36 -2
- data/bin/onevm +301 -122
- data/bin/onevnet +1 -1
- data/lib/cli_helper.rb +4 -1
- data/lib/command_parser.rb +34 -4
- data/lib/one_helper.rb +32 -15
- data/lib/one_helper/oneacct_helper.rb +5 -4
- data/lib/one_helper/oneacl_helper.rb +1 -1
- data/lib/one_helper/onecluster_helper.rb +4 -3
- data/lib/one_helper/onedatastore_helper.rb +3 -2
- data/lib/one_helper/onegroup_helper.rb +15 -17
- data/lib/one_helper/onehost_helper.rb +2 -2
- data/lib/one_helper/oneimage_helper.rb +23 -6
- data/lib/one_helper/onequota_helper.rb +1 -1
- data/lib/one_helper/onetemplate_helper.rb +3 -3
- data/lib/one_helper/oneuser_helper.rb +17 -18
- data/lib/one_helper/onevm_helper.rb +319 -8
- data/lib/one_helper/onevnet_helper.rb +21 -4
- metadata +35 -56
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -23,7 +23,7 @@ class OneTemplateHelper < OpenNebulaHelper::OneHelper
|
|
23
23
|
:format => String,
|
24
24
|
:description => <<-EOT.strip
|
25
25
|
Name of the new VM or TEMPLATE. When instantiating
|
26
|
-
multiple VMs you can use the\"%i\" wildcard to produce
|
26
|
+
multiple VMs you can use the \"%i\" wildcard to produce
|
27
27
|
different names such as vm-0, vm-1...
|
28
28
|
EOT
|
29
29
|
}
|
@@ -91,7 +91,7 @@ EOT
|
|
91
91
|
OpenNebula::TemplatePool.new(@client, user_flag)
|
92
92
|
end
|
93
93
|
|
94
|
-
def format_resource(template)
|
94
|
+
def format_resource(template, options = {})
|
95
95
|
str="%-15s: %-20s"
|
96
96
|
str_h1="%-80s"
|
97
97
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -42,7 +42,8 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
42
42
|
end
|
43
43
|
|
44
44
|
if options[:driver] == OpenNebula::User::X509_AUTH
|
45
|
-
|
45
|
+
require 'opennebula/x509_auth'
|
46
|
+
password = OpenNebula::X509Auth.escape_dn(password)
|
46
47
|
end
|
47
48
|
|
48
49
|
if options[:sha1] || options[:driver] == OpenNebula::User::CIPHER_AUTH
|
@@ -147,12 +148,8 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
147
148
|
def format_pool(options)
|
148
149
|
config_file = self.class.table_conf
|
149
150
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
if OpenNebula::is_error?(default_quotas)
|
154
|
-
raise "Error retrieving the default user quotas: #{default_quotas.message}"
|
155
|
-
end
|
151
|
+
prefix = '/USER_POOL/DEFAULT_USER_QUOTAS/'
|
152
|
+
user_pool = @user_pool
|
156
153
|
|
157
154
|
table = CLIHelper::ShowTable.new(config_file, self) do
|
158
155
|
column :ID, "ONE identifier for the User", :size=>4 do |d|
|
@@ -176,7 +173,7 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
176
173
|
limit = d['VM_QUOTA']['VM']["VMS"]
|
177
174
|
|
178
175
|
if limit == "-1"
|
179
|
-
limit =
|
176
|
+
limit = user_pool["#{prefix}VM_QUOTA/VM/VMS"]
|
180
177
|
limit = "0" if limit.nil? || limit == ""
|
181
178
|
end
|
182
179
|
|
@@ -191,7 +188,7 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
191
188
|
limit = d['VM_QUOTA']['VM']["MEMORY"]
|
192
189
|
|
193
190
|
if limit == "-1"
|
194
|
-
limit =
|
191
|
+
limit = user_pool["#{prefix}VM_QUOTA/VM/MEMORY"]
|
195
192
|
limit = "0" if limit.nil? || limit == ""
|
196
193
|
end
|
197
194
|
|
@@ -208,7 +205,7 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
208
205
|
limit = d['VM_QUOTA']['VM']["CPU"]
|
209
206
|
|
210
207
|
if limit == "-1"
|
211
|
-
limit =
|
208
|
+
limit = user_pool["#{prefix}VM_QUOTA/VM/CPU"]
|
212
209
|
limit = "0" if limit.nil? || limit == ""
|
213
210
|
end
|
214
211
|
|
@@ -241,16 +238,12 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
241
238
|
|
242
239
|
def factory_pool(user_flag=-2)
|
243
240
|
#TBD OpenNebula::UserPool.new(@client, user_flag)
|
244
|
-
OpenNebula::UserPool.new(@client)
|
241
|
+
@user_pool = OpenNebula::UserPool.new(@client)
|
242
|
+
return @user_pool
|
245
243
|
end
|
246
244
|
|
247
|
-
def format_resource(user)
|
245
|
+
def format_resource(user, options = {})
|
248
246
|
system = System.new(@client)
|
249
|
-
default_quotas = system.get_user_quotas()
|
250
|
-
|
251
|
-
if OpenNebula::is_error?(default_quotas)
|
252
|
-
raise "Error retrieving the default user quotas: #{default_quotas.message}"
|
253
|
-
end
|
254
247
|
|
255
248
|
str="%-15s: %-20s"
|
256
249
|
str_h1="%-80s"
|
@@ -272,6 +265,12 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
272
265
|
|
273
266
|
user_hash = user.to_hash
|
274
267
|
|
268
|
+
default_quotas = nil
|
269
|
+
|
270
|
+
user.each('/USER/DEFAULT_USER_QUOTAS') { |elem|
|
271
|
+
default_quotas = elem
|
272
|
+
}
|
273
|
+
|
275
274
|
helper = OneQuotaHelper.new
|
276
275
|
helper.format_quota(user_hash['USER'], default_quotas)
|
277
276
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
2
|
-
# Copyright 2002-
|
2
|
+
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs #
|
3
3
|
# #
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
@@ -15,6 +15,7 @@
|
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
17
|
require 'one_helper'
|
18
|
+
require 'optparse/time'
|
18
19
|
|
19
20
|
class OneVMHelper < OpenNebulaHelper::OneHelper
|
20
21
|
MULTIPLE={
|
@@ -36,6 +37,17 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
36
37
|
}
|
37
38
|
}
|
38
39
|
|
40
|
+
NETWORK = {
|
41
|
+
:name => "network",
|
42
|
+
:short => "-n id|name",
|
43
|
+
:large => "--network id|name" ,
|
44
|
+
:description => "Selects the virtual network",
|
45
|
+
:format => String,
|
46
|
+
:proc => lambda { |o, options|
|
47
|
+
OpenNebulaHelper.rname_to_id(o, "VNET")
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
39
51
|
FILE = {
|
40
52
|
:name => "file",
|
41
53
|
:short => "-f file",
|
@@ -51,6 +63,44 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
51
63
|
}
|
52
64
|
}
|
53
65
|
|
66
|
+
HOLD = {
|
67
|
+
:name => "hold",
|
68
|
+
:large => "--hold",
|
69
|
+
:description => "Creates the new VM on hold state instead of pending"
|
70
|
+
}
|
71
|
+
|
72
|
+
SCHEDULE = {
|
73
|
+
:name => "schedule",
|
74
|
+
:large => "--schedule TIME",
|
75
|
+
:description => "Schedules this action to be executed after" \
|
76
|
+
"the given time. For example: onevm resume 0 --schedule \"09/23 14:15\"",
|
77
|
+
:format => Time
|
78
|
+
}
|
79
|
+
|
80
|
+
ALL_TEMPLATE = {
|
81
|
+
:name => "all",
|
82
|
+
:large => "--all",
|
83
|
+
:description => "Show all template data"
|
84
|
+
}
|
85
|
+
|
86
|
+
LIVE = {
|
87
|
+
:name => "live",
|
88
|
+
:large => "--live",
|
89
|
+
:description => "Do the action with the VM running"
|
90
|
+
}
|
91
|
+
|
92
|
+
HARD = {
|
93
|
+
:name => "hard",
|
94
|
+
:large => "--hard",
|
95
|
+
:description=> "Does not communicate with the guest OS"
|
96
|
+
}
|
97
|
+
|
98
|
+
RECREATE = {
|
99
|
+
:name => "recreate",
|
100
|
+
:large => "--recreate",
|
101
|
+
:description=> "Resubmits a fresh VM"
|
102
|
+
}
|
103
|
+
|
54
104
|
def self.rname
|
55
105
|
"VM"
|
56
106
|
end
|
@@ -115,7 +165,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
115
165
|
column :HOST, "Host where the VM is running", :left, :size=>10 do |d|
|
116
166
|
if d['HISTORY_RECORDS'] && d['HISTORY_RECORDS']['HISTORY']
|
117
167
|
state_str = VirtualMachine::VM_STATE[d['STATE'].to_i]
|
118
|
-
if %w{ACTIVE SUSPENDED}.include? state_str
|
168
|
+
if %w{ACTIVE SUSPENDED POWEROFF}.include? state_str
|
119
169
|
d['HISTORY_RECORDS']['HISTORY']['HOSTNAME']
|
120
170
|
end
|
121
171
|
end
|
@@ -135,6 +185,38 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
135
185
|
table
|
136
186
|
end
|
137
187
|
|
188
|
+
|
189
|
+
def schedule_actions(ids,options,action)
|
190
|
+
# Verbose by default
|
191
|
+
options[:verbose] = true
|
192
|
+
|
193
|
+
perform_actions(
|
194
|
+
ids, options,
|
195
|
+
"#{action} scheduled at #{options[:schedule]}") do |vm|
|
196
|
+
|
197
|
+
rc = vm.info
|
198
|
+
|
199
|
+
if OpenNebula.is_error?(rc)
|
200
|
+
puts rc.message
|
201
|
+
exit -1
|
202
|
+
end
|
203
|
+
|
204
|
+
ids = vm.retrieve_elements('USER_TEMPLATE/SCHED_ACTION/ID')
|
205
|
+
|
206
|
+
id = 0
|
207
|
+
if (!ids.nil? && !ids.empty?)
|
208
|
+
ids.map! {|e| e.to_i }
|
209
|
+
id = ids.max + 1
|
210
|
+
end
|
211
|
+
|
212
|
+
tmp_str = vm.user_template_str
|
213
|
+
|
214
|
+
tmp_str << "\nSCHED_ACTION = [ID = #{id}, ACTION = #{action}, TIME = #{options[:schedule].to_i}]"
|
215
|
+
|
216
|
+
vm.update(tmp_str)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
138
220
|
private
|
139
221
|
|
140
222
|
def factory(id=nil)
|
@@ -150,7 +232,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
150
232
|
OpenNebula::VirtualMachinePool.new(@client, user_flag)
|
151
233
|
end
|
152
234
|
|
153
|
-
def format_resource(vm)
|
235
|
+
def format_resource(vm, options = {})
|
154
236
|
str_h1="%-80s"
|
155
237
|
str="%-20s: %-20s"
|
156
238
|
|
@@ -204,18 +286,247 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
204
286
|
|
205
287
|
puts str % [e, mask]
|
206
288
|
}
|
207
|
-
puts
|
208
289
|
|
209
|
-
|
210
|
-
|
290
|
+
if vm.has_elements?("/VM/TEMPLATE/DISK")
|
291
|
+
puts
|
292
|
+
CLIHelper.print_header(str_h1 % "VM DISKS",false)
|
293
|
+
CLIHelper::ShowTable.new(nil, self) do
|
294
|
+
column :ID, "", :size=>3 do |d|
|
295
|
+
d["DISK_ID"]
|
296
|
+
end
|
211
297
|
|
212
|
-
|
298
|
+
column :DATASTORE, "", :left, :size=>10 do |d|
|
299
|
+
d["DATASTORE"]
|
300
|
+
end
|
301
|
+
|
302
|
+
column :TARGET, "", :left, :size=>6 do |d|
|
303
|
+
d["TARGET"]
|
304
|
+
end
|
305
|
+
|
306
|
+
column :IMAGE, "", :left, :size=>35 do |d|
|
307
|
+
if d["IMAGE"]
|
308
|
+
d["IMAGE"]
|
309
|
+
else
|
310
|
+
case d["TYPE"].upcase
|
311
|
+
when "FS"
|
312
|
+
"#{d["FORMAT"]} - "<<
|
313
|
+
OpenNebulaHelper.unit_to_str(d["SIZE"].to_i,
|
314
|
+
{}, "M")
|
315
|
+
when "SWAP"
|
316
|
+
OpenNebulaHelper.unit_to_str(d["SIZE"].to_i,
|
317
|
+
{}, "M")
|
318
|
+
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
column :TYPE, "", :left, :size=>4 do |d|
|
324
|
+
d["TYPE"].downcase
|
325
|
+
end
|
326
|
+
|
327
|
+
column :"R/O", "", :size=>3 do |d|
|
328
|
+
d["READONLY"]
|
329
|
+
end
|
330
|
+
|
331
|
+
column :"SAVE", "", :size=>4 do |d|
|
332
|
+
d["SAVE"] || "NO"
|
333
|
+
end
|
334
|
+
|
335
|
+
column :"CLONE", "", :size=>5 do |d|
|
336
|
+
d["CLONE"]
|
337
|
+
end
|
338
|
+
|
339
|
+
column :"SAVE_AS", "", :size=>7 do |d|
|
340
|
+
d["SAVE_AS"] || "-"
|
341
|
+
end
|
342
|
+
|
343
|
+
|
344
|
+
default :ID, :TARGET, :IMAGE, :TYPE,
|
345
|
+
:SAVE, :SAVE_AS
|
346
|
+
end.show([vm.to_hash['VM']['TEMPLATE']['DISK']].flatten, {})
|
347
|
+
|
348
|
+
while vm.has_elements?("/VM/TEMPLATE/DISK")
|
349
|
+
vm.delete_element("/VM/TEMPLATE/DISK")
|
350
|
+
end if !options[:all]
|
351
|
+
end
|
352
|
+
|
353
|
+
if vm.has_elements?("/VM/TEMPLATE/NIC")
|
354
|
+
puts
|
355
|
+
CLIHelper.print_header(str_h1 % "VM NICS",false)
|
356
|
+
|
357
|
+
vm_nics = [vm.to_hash['VM']['TEMPLATE']['NIC']].flatten
|
358
|
+
|
359
|
+
nic_default = {"NETWORK" => "-",
|
360
|
+
"IP" => "-",
|
361
|
+
"MAC"=> "-",
|
362
|
+
"VLAN"=>"no",
|
363
|
+
"BRIDGE"=>"-"}
|
364
|
+
|
365
|
+
array_id = 0
|
366
|
+
|
367
|
+
vm_nics.each {|nic|
|
368
|
+
|
369
|
+
next if nic.has_key?("CLI_DONE")
|
370
|
+
|
371
|
+
if nic.has_key?("IP6_LINK")
|
372
|
+
ip6_link = {"IP" => nic.delete("IP6_LINK"),
|
373
|
+
"CLI_DONE" => true,
|
374
|
+
"DOUBLE_ENTRY" => true}
|
375
|
+
vm_nics.insert(array_id+1,ip6_link)
|
376
|
+
|
377
|
+
array_id += 1
|
378
|
+
end
|
379
|
+
|
380
|
+
if nic.has_key?("IP6_SITE")
|
381
|
+
ip6_link = {"IP" => nic.delete("IP6_SITE"),
|
382
|
+
"CLI_DONE" => true,
|
383
|
+
"DOUBLE_ENTRY" => true}
|
384
|
+
vm_nics.insert(array_id+1,ip6_link)
|
385
|
+
|
386
|
+
array_id += 1
|
387
|
+
end
|
388
|
+
|
389
|
+
if nic.has_key?("IP6_GLOBAL")
|
390
|
+
ip6_link = {"IP" => nic.delete("IP6_GLOBAL"),
|
391
|
+
"CLI_DONE" => true,
|
392
|
+
"DOUBLE_ENTRY" => true}
|
393
|
+
vm_nics.insert(array_id+1,ip6_link)
|
394
|
+
|
395
|
+
array_id += 1
|
396
|
+
end
|
397
|
+
|
398
|
+
nic.merge!(nic_default) {|k,v1,v2| v1}
|
399
|
+
array_id += 1
|
400
|
+
}
|
401
|
+
|
402
|
+
CLIHelper::ShowTable.new(nil, self) do
|
403
|
+
column :ID, "", :size=>3 do |d|
|
404
|
+
if d["DOUBLE_ENTRY"]
|
405
|
+
""
|
406
|
+
else
|
407
|
+
d["NIC_ID"]
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
column :NETWORK, "", :left, :size=>20 do |d|
|
412
|
+
if d["DOUBLE_ENTRY"]
|
413
|
+
""
|
414
|
+
else
|
415
|
+
d["NETWORK"]
|
416
|
+
end
|
417
|
+
end
|
418
|
+
|
419
|
+
column :VLAN, "", :size=>4 do |d|
|
420
|
+
if d["DOUBLE_ENTRY"]
|
421
|
+
""
|
422
|
+
else
|
423
|
+
d["VLAN"].downcase
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
column :BRIDGE, "", :left, :size=>12 do |d|
|
428
|
+
if d["DOUBLE_ENTRY"]
|
429
|
+
""
|
430
|
+
else
|
431
|
+
d["BRIDGE"]
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
column :IP, "",:left, :donottruncate, :size=>15 do |d|
|
436
|
+
d["IP"]
|
437
|
+
end
|
438
|
+
|
439
|
+
column :MAC, "", :left, :size=>17 do |d|
|
440
|
+
if d["DOUBLE_ENTRY"]
|
441
|
+
""
|
442
|
+
else
|
443
|
+
d["MAC"]
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
end.show(vm_nics,{})
|
448
|
+
|
449
|
+
while vm.has_elements?("/VM/TEMPLATE/NIC")
|
450
|
+
vm.delete_element("/VM/TEMPLATE/NIC")
|
451
|
+
end if !options[:all]
|
452
|
+
end
|
453
|
+
|
454
|
+
if vm.has_elements?("/VM/TEMPLATE/SNAPSHOT")
|
213
455
|
puts
|
456
|
+
CLIHelper.print_header(str_h1 % "SNAPSHOTS",false)
|
457
|
+
|
458
|
+
CLIHelper::ShowTable.new(nil, self) do
|
214
459
|
|
460
|
+
column :"ID", "", :size=>4 do |d|
|
461
|
+
d["SNAPSHOT_ID"] if !d.nil?
|
462
|
+
end
|
463
|
+
|
464
|
+
column :"TIME", "", :size=>12 do |d|
|
465
|
+
OpenNebulaHelper.time_to_str(d["TIME"], false) if !d.nil?
|
466
|
+
end
|
467
|
+
|
468
|
+
column :"NAME", "", :left, :size=>46 do |d|
|
469
|
+
d["NAME"] if !d.nil?
|
470
|
+
end
|
471
|
+
|
472
|
+
column :"HYPERVISOR_ID", "", :left, :size=>15 do |d|
|
473
|
+
d["HYPERVISOR_ID"] if !d.nil?
|
474
|
+
end
|
475
|
+
|
476
|
+
end.show([vm.to_hash['VM']['TEMPLATE']['SNAPSHOT']].flatten, {})
|
477
|
+
|
478
|
+
vm.delete_element("/VM/TEMPLATE/SNAPSHOT")
|
479
|
+
end
|
480
|
+
|
481
|
+
if vm.has_elements?("/VM/HISTORY_RECORDS")
|
482
|
+
puts
|
215
483
|
|
216
484
|
CLIHelper.print_header(str_h1 % "VIRTUAL MACHINE HISTORY",false)
|
217
485
|
format_history(vm)
|
218
486
|
end
|
487
|
+
|
488
|
+
if vm.has_elements?("/VM/USER_TEMPLATE/SCHED_ACTION")
|
489
|
+
puts
|
490
|
+
CLIHelper.print_header(str_h1 % "SCHEDULED ACTIONS",false)
|
491
|
+
|
492
|
+
CLIHelper::ShowTable.new(nil, self) do
|
493
|
+
|
494
|
+
column :"ID", "", :size=>2 do |d|
|
495
|
+
d["ID"] if !d.nil?
|
496
|
+
end
|
497
|
+
|
498
|
+
column :"ACTION", "", :left, :size=>15 do |d|
|
499
|
+
d["ACTION"] if !d.nil?
|
500
|
+
end
|
501
|
+
|
502
|
+
column :"SCHEDULED", "", :size=>12 do |d|
|
503
|
+
OpenNebulaHelper.time_to_str(d["TIME"], false) if !d.nil?
|
504
|
+
end
|
505
|
+
|
506
|
+
column :"DONE", "", :size=>12 do |d|
|
507
|
+
OpenNebulaHelper.time_to_str(d["DONE"], false) if !d.nil?
|
508
|
+
end
|
509
|
+
|
510
|
+
column :"MESSAGE", "", :left, :donottruncate, :size=>35 do |d|
|
511
|
+
d["MESSAGE"] if !d.nil?
|
512
|
+
end
|
513
|
+
end.show([vm.to_hash['VM']['USER_TEMPLATE']['SCHED_ACTION']].flatten, {})
|
514
|
+
end
|
515
|
+
|
516
|
+
if vm.has_elements?("/VM/USER_TEMPLATE")
|
517
|
+
puts
|
518
|
+
|
519
|
+
if !options[:all]
|
520
|
+
vm.delete_element("/VM/USER_TEMPLATE/SCHED_ACTION")
|
521
|
+
end
|
522
|
+
|
523
|
+
CLIHelper.print_header(str_h1 % "USER TEMPLATE",false)
|
524
|
+
puts vm.template_like_str('USER_TEMPLATE')
|
525
|
+
end
|
526
|
+
|
527
|
+
puts
|
528
|
+
CLIHelper.print_header(str_h1 % "VIRTUAL MACHINE TEMPLATE",false)
|
529
|
+
puts vm.template_str
|
219
530
|
end
|
220
531
|
|
221
532
|
def format_history(vm)
|
@@ -224,7 +535,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
224
535
|
d["SEQ"]
|
225
536
|
end
|
226
537
|
|
227
|
-
column :HOST, "Host name of the VM container", :left, :size=>
|
538
|
+
column :HOST, "Host name of the VM container", :left, :size=>20 do |d|
|
228
539
|
d["HOSTNAME"]
|
229
540
|
end
|
230
541
|
|