opennebula-cli 6.0.3 → 6.1.80.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/oneflow +4 -5
- data/bin/oneflow-template +4 -5
- data/bin/oneimage +2 -2
- data/bin/onevcenter +15 -6
- data/bin/onevm +5 -66
- data/bin/onezone +20 -0
- data/lib/one_helper/onevcenter_helper.rb +2 -2
- data/lib/one_helper/onevm_helper.rb +92 -31
- data/lib/one_helper/onezone_helper.rb +13 -1
- data/lib/one_helper.rb +106 -119
- data/share/schemas/xsd/host.xsd +21 -1
- data/share/schemas/xsd/monitoring_data.xsd +23 -11
- data/share/schemas/xsd/vm.xsd +64 -10
- data/share/schemas/xsd/vm_pool.xsd +3 -26
- data/share/schemas/xsd/vnet.xsd +4 -1
- data/share/schemas/xsd/zone.xsd +1 -0
- data/share/schemas/xsd/zone_pool.xsd +1 -0
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2306988d8afeaa179ef65f89fbb07a27746a370b
|
4
|
+
data.tar.gz: 443a4f8d1aa6fcbfb886c14c2fe3228e3d67bff8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1df610ba16fd464d6429e9ebf26fcecb1872319ff6795cca452917c6258df631b688f59fb8cd416143da7cf40e16c4bdbd73db052f4c2faa9b4da4b011fb920
|
7
|
+
data.tar.gz: 8bfc858b932ec71fdc86e6bef789957d55401190bc780f90c1630b6808651cbdd2a02dc970bf79f2bf17d406422268804ff1954be9ae46a0087bb88d28fc518d
|
data/bin/oneflow
CHANGED
@@ -82,6 +82,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
82
82
|
:description => 'Force flow necover delete'
|
83
83
|
}
|
84
84
|
|
85
|
+
FORMAT = [OpenNebulaHelper::JSON, OpenNebulaHelper::YAML]
|
86
|
+
|
85
87
|
# create helper object
|
86
88
|
helper = OneFlowHelper.new
|
87
89
|
|
@@ -122,7 +124,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
122
124
|
List the available services
|
123
125
|
EOT
|
124
126
|
|
125
|
-
command :list, list_desc, :options =>
|
127
|
+
command :list, list_desc, :options => FORMAT do
|
126
128
|
helper.list_service_pool(helper.client(options), options)
|
127
129
|
end
|
128
130
|
|
@@ -146,10 +148,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
146
148
|
Show detailed information of a given service
|
147
149
|
EOT
|
148
150
|
|
149
|
-
command :show,
|
150
|
-
show_desc,
|
151
|
-
:service_id,
|
152
|
-
:options => OpenNebulaHelper::FORMAT do
|
151
|
+
command :show, show_desc, :service_id, :options => FORMAT do
|
153
152
|
helper.format_resource(helper.client(options), args[0], options)
|
154
153
|
end
|
155
154
|
|
data/bin/oneflow-template
CHANGED
@@ -104,6 +104,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
104
104
|
'deleting service template'
|
105
105
|
}
|
106
106
|
|
107
|
+
FORMAT = [OpenNebulaHelper::JSON, OpenNebulaHelper::YAML]
|
108
|
+
|
107
109
|
usage '`oneflow-template` <command> [<args>] [<options>]'
|
108
110
|
version OpenNebulaHelper::ONE_VERSION
|
109
111
|
|
@@ -141,7 +143,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
141
143
|
List the available Service Templates
|
142
144
|
EOT
|
143
145
|
|
144
|
-
command :list, list_desc, :options =>
|
146
|
+
command :list, list_desc, :options => FORMAT do
|
145
147
|
helper.list_service_template_pool(helper.client(options), options)
|
146
148
|
end
|
147
149
|
|
@@ -169,10 +171,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
169
171
|
Show detailed information of a given Service Template
|
170
172
|
EOT
|
171
173
|
|
172
|
-
command :show,
|
173
|
-
show_desc,
|
174
|
-
:templateid,
|
175
|
-
:options => OpenNebulaHelper::FORMAT do
|
174
|
+
command :show, show_desc, :templateid, :options => FORMAT do
|
176
175
|
helper.format_resource(helper.client(options), args[0], options)
|
177
176
|
end
|
178
177
|
|
data/bin/oneimage
CHANGED
@@ -160,8 +160,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
160
160
|
|
161
161
|
oneimage create -d 1 --name ubuntu --path /tmp/ubuntu.qcow2 \\
|
162
162
|
--prefix sd --type OS --driver qcow2 \\
|
163
|
-
--description "A OS plain installation \\
|
164
|
-
--persistent
|
163
|
+
--description "A OS plain installation" \\
|
164
|
+
--persistent
|
165
165
|
|
166
166
|
- a datablock image of 400MB:
|
167
167
|
|
data/bin/onevcenter
CHANGED
@@ -165,7 +165,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
165
165
|
|
166
166
|
command :list,
|
167
167
|
list_desc,
|
168
|
-
:options => [OBJECT, HOST, DATASTORE, VCENTER, USER, PASS
|
168
|
+
:options => [OBJECT, HOST, DATASTORE, VCENTER, USER, PASS,
|
169
|
+
CLIHelper::CSV_OPT] do
|
169
170
|
begin
|
170
171
|
args = helper.parse_opts(options)
|
171
172
|
args[:filter] = true
|
@@ -178,7 +179,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
178
179
|
|
179
180
|
helper.list_object(options, list)
|
180
181
|
rescue StandardError => e
|
181
|
-
puts e.message
|
182
|
+
STDERR.puts e.message
|
183
|
+
exit 1
|
182
184
|
end
|
183
185
|
|
184
186
|
exit 0
|
@@ -209,7 +211,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
209
211
|
|
210
212
|
helper.list_object(options, list)
|
211
213
|
rescue StandardError => e
|
212
|
-
puts e.message
|
214
|
+
STDERR.puts e.message
|
215
|
+
exit 1
|
213
216
|
end
|
214
217
|
|
215
218
|
exit 0
|
@@ -256,7 +259,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
256
259
|
|
257
260
|
importer.stdout
|
258
261
|
rescue StandardError => e
|
259
|
-
puts e.message
|
262
|
+
STDERR.puts e.message
|
263
|
+
exit 1
|
260
264
|
end
|
261
265
|
|
262
266
|
exit 0
|
@@ -283,7 +287,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
283
287
|
|
284
288
|
importer.stdout
|
285
289
|
rescue StandardError => e
|
286
|
-
puts e.message
|
290
|
+
STDERR.puts e.message
|
291
|
+
exit 1
|
287
292
|
end
|
288
293
|
|
289
294
|
exit 0
|
@@ -305,7 +310,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
305
310
|
:options => [VCENTER, USER, PASS, USE_DEFAULTS, PORT] do
|
306
311
|
con_ops = helper.connection_options('Hosts', options)
|
307
312
|
|
308
|
-
|
313
|
+
begin
|
314
|
+
VCenterDriver::VcImporter.import_clusters(con_ops, options)
|
315
|
+
rescue StandardError
|
316
|
+
exit 1
|
317
|
+
end
|
309
318
|
|
310
319
|
exit 0
|
311
320
|
end
|
data/bin/onevm
CHANGED
@@ -1305,7 +1305,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1305
1305
|
CONTEXT (any value, **variable substitution will be made**)
|
1306
1306
|
EOT
|
1307
1307
|
|
1308
|
-
command :updateconf, updateconf_desc, :vmid, [:file, nil]
|
1308
|
+
command :updateconf, updateconf_desc, :vmid, [:file, nil],
|
1309
|
+
:options => OpenNebulaHelper::APPEND do
|
1309
1310
|
template = ''
|
1310
1311
|
|
1311
1312
|
begin
|
@@ -1332,7 +1333,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1332
1333
|
template = OpenNebulaHelper.editor_input(template)
|
1333
1334
|
end
|
1334
1335
|
|
1335
|
-
vm.updateconf(template)
|
1336
|
+
vm.updateconf(template, options[:append])
|
1336
1337
|
end
|
1337
1338
|
end
|
1338
1339
|
|
@@ -1411,22 +1412,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1411
1412
|
|
1412
1413
|
command :'delete-chart', delete_chart_desc, :vmid, :sched_id do
|
1413
1414
|
helper.perform_action(args[0], {}, 'Charter deleted') do |vm|
|
1414
|
-
rc = vm.
|
1415
|
-
|
1416
|
-
if OpenNebula.is_error?(rc)
|
1417
|
-
STDERR.puts "Error #{rc.message}"
|
1418
|
-
exit(-1)
|
1419
|
-
end
|
1420
|
-
|
1421
|
-
xpath = "USER_TEMPLATE/SCHED_ACTION[ID=#{args[1]}]"
|
1422
|
-
|
1423
|
-
unless vm.retrieve_elements(xpath)
|
1424
|
-
STDERR.puts "Sched action #{args[1]} not found"
|
1425
|
-
exit(-1)
|
1426
|
-
end
|
1427
|
-
|
1428
|
-
vm.delete_element(xpath)
|
1429
|
-
rc = vm.update(vm.user_template_str)
|
1415
|
+
rc = vm.sched_action_delete(args[1])
|
1430
1416
|
|
1431
1417
|
if OpenNebula.is_error?(rc)
|
1432
1418
|
STDERR.puts "Error deleting: #{rc.message}"
|
@@ -1571,54 +1557,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1571
1557
|
:vmid,
|
1572
1558
|
[:login, nil],
|
1573
1559
|
:options => [NIC_ID, CMD, SSH_OPTS] do
|
1574
|
-
helper.
|
1575
|
-
rc = vm.info
|
1576
|
-
|
1577
|
-
if OpenNebula.is_error?(rc)
|
1578
|
-
STDERR.puts rc.message
|
1579
|
-
exit(-1)
|
1580
|
-
end
|
1581
|
-
|
1582
|
-
# Get user to login
|
1583
|
-
args[1].nil? ? login = 'root' : login = args[1]
|
1584
|
-
|
1585
|
-
# Get CMD to run
|
1586
|
-
options[:cmd].nil? ? cmd = '' : cmd = options[:cmd]
|
1587
|
-
|
1588
|
-
# Get NIC to connect
|
1589
|
-
if options[:nic_id]
|
1590
|
-
nic = vm.retrieve_xmlelements(
|
1591
|
-
"//TEMPLATE/NIC[NIC_ID=\"#{options[:nic_id]}\"]"
|
1592
|
-
)[0]
|
1593
|
-
else
|
1594
|
-
nic = vm.retrieve_xmlelements('//TEMPLATE/NIC[SSH="YES"]')[0]
|
1595
|
-
end
|
1596
|
-
|
1597
|
-
nic = vm.retrieve_xmlelements('//TEMPLATE/NIC[1]')[0] if nic.nil?
|
1598
|
-
|
1599
|
-
if nic.nil?
|
1600
|
-
STDERR.puts 'No NIC found'
|
1601
|
-
exit(-1)
|
1602
|
-
end
|
1603
|
-
|
1604
|
-
# If there is node port
|
1605
|
-
if nic['EXTERNAL_PORT_RANGE']
|
1606
|
-
ip = vm.to_hash['VM']['HISTORY_RECORDS']['HISTORY']
|
1607
|
-
ip = [ip].flatten[-1]['HOSTNAME']
|
1608
|
-
port = Integer(nic['EXTERNAL_PORT_RANGE'].split(':')[0]) + 21
|
1609
|
-
else
|
1610
|
-
ip = nic['IP']
|
1611
|
-
port = 22
|
1612
|
-
end
|
1613
|
-
|
1614
|
-
options[:ssh_opts].nil? ? opts = '' : opts = options[:ssh_opts]
|
1615
|
-
|
1616
|
-
system("ssh #{opts} #{login}@#{ip} -p #{port} #{cmd}")
|
1617
|
-
end
|
1618
|
-
|
1619
|
-
# rubocop:disable Style/SpecialGlobalVars
|
1620
|
-
$?.exitstatus
|
1621
|
-
# rubocop:enable Style/SpecialGlobalVars
|
1560
|
+
helper.ssh(args, options)
|
1622
1561
|
end
|
1623
1562
|
|
1624
1563
|
port_desc = <<-EOT.unindent
|
data/bin/onezone
CHANGED
@@ -269,4 +269,24 @@ CommandParser::CmdParser.new(ARGV) do
|
|
269
269
|
|
270
270
|
0
|
271
271
|
end
|
272
|
+
|
273
|
+
enable_desc = <<-EOT.unindent
|
274
|
+
Enable zone
|
275
|
+
EOT
|
276
|
+
|
277
|
+
command :enable, enable_desc, [:range, :zoneid_list] do
|
278
|
+
helper.perform_actions(args[0], options, 'enable zone') do |o|
|
279
|
+
o.enable
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
disable_desc = <<-EOT.unindent
|
284
|
+
Disable zone, disabled zones can execute only readonly commands
|
285
|
+
EOT
|
286
|
+
|
287
|
+
command :disable, disable_desc, [:range, :zoneid_list] do
|
288
|
+
helper.perform_actions(args[0], options, 'disable zone') do |o|
|
289
|
+
o.disable
|
290
|
+
end
|
291
|
+
end
|
272
292
|
end
|
@@ -188,14 +188,14 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
|
|
188
188
|
|
189
189
|
# This method will print a list for a vcenter_resource.
|
190
190
|
#
|
191
|
-
def list_object(
|
191
|
+
def list_object(options, list)
|
192
192
|
vcenter_host = list.keys[0]
|
193
193
|
list = cli_format(list.values.first)
|
194
194
|
table = format_list
|
195
195
|
|
196
196
|
show_header(vcenter_host)
|
197
197
|
|
198
|
-
table.show(list)
|
198
|
+
table.show(list, options)
|
199
199
|
end
|
200
200
|
|
201
201
|
# handles :cli section of TABLE
|
@@ -440,21 +440,6 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
440
440
|
str_periodic << ', END_TYPE = 0'
|
441
441
|
end
|
442
442
|
|
443
|
-
rc = vm.info
|
444
|
-
|
445
|
-
if OpenNebula.is_error?(rc)
|
446
|
-
puts rc.message
|
447
|
-
exit(-1)
|
448
|
-
end
|
449
|
-
|
450
|
-
ids = vm.retrieve_elements('USER_TEMPLATE/SCHED_ACTION/ID')
|
451
|
-
|
452
|
-
id = 0
|
453
|
-
if !ids.nil? && !ids.empty?
|
454
|
-
ids.map! {|e| e.to_i }
|
455
|
-
id = ids.max + 1
|
456
|
-
end
|
457
|
-
|
458
443
|
sched = options[:schedule]
|
459
444
|
|
460
445
|
# If the action is set to be executed from VM start to an specific
|
@@ -464,16 +449,14 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
464
449
|
sched = sched.to_i
|
465
450
|
end
|
466
451
|
|
467
|
-
tmp_str =
|
468
|
-
|
469
|
-
tmp_str << "\nSCHED_ACTION = "
|
470
|
-
tmp_str << "[ID = #{id}, ACTION = #{action}, "
|
452
|
+
tmp_str = "SCHED_ACTION = ["
|
453
|
+
tmp_str << "ACTION = #{action}, "
|
471
454
|
tmp_str << "WARNING = #{warning}," if warning
|
472
455
|
tmp_str << "ARGS = \"#{options[:args]}\"," if options[:args]
|
473
456
|
tmp_str << "TIME = #{sched}"
|
474
457
|
tmp_str << str_periodic << ']'
|
475
458
|
|
476
|
-
vm.
|
459
|
+
vm.sched_action_add(tmp_str)
|
477
460
|
end
|
478
461
|
end
|
479
462
|
|
@@ -491,7 +474,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
491
474
|
exit(-1)
|
492
475
|
end
|
493
476
|
|
494
|
-
xpath = "
|
477
|
+
xpath = "TEMPLATE/SCHED_ACTION[ID=#{action_id}]"
|
495
478
|
|
496
479
|
unless vm.retrieve_elements(xpath)
|
497
480
|
STDERR.puts "Sched action #{action_id} not found"
|
@@ -509,12 +492,11 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
509
492
|
vm.delete_element(xpath)
|
510
493
|
|
511
494
|
# Add the modified sched action
|
512
|
-
tmp_str =
|
513
|
-
tmp_str << "\nSCHED_ACTION = ["
|
495
|
+
tmp_str = "\nSCHED_ACTION = ["
|
514
496
|
tmp_str << str.split("\n").join(',')
|
515
497
|
tmp_str << ']'
|
516
498
|
|
517
|
-
rc = vm.
|
499
|
+
rc = vm.sched_action_update(action_id, tmp_str)
|
518
500
|
|
519
501
|
if OpenNebula.is_error?(rc)
|
520
502
|
STDERR.puts "Error updating: #{rc.message}"
|
@@ -670,6 +652,78 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
670
652
|
YAML.load_file(self.class.table_conf)[:charters]
|
671
653
|
end
|
672
654
|
|
655
|
+
# SSH into a VM
|
656
|
+
#
|
657
|
+
# @param args [Array] CLI arguments
|
658
|
+
# @param options [Hash] CLI parameters
|
659
|
+
def ssh(args, options)
|
660
|
+
perform_action(args[0], options, 'SSH') do |vm|
|
661
|
+
rc = vm.info
|
662
|
+
|
663
|
+
if OpenNebula.is_error?(rc)
|
664
|
+
STDERR.puts rc.message
|
665
|
+
exit(-1)
|
666
|
+
end
|
667
|
+
|
668
|
+
if vm.lcm_state_str != 'RUNNING'
|
669
|
+
STDERR.puts 'VM is not RUNNING, cannot SSH to it'
|
670
|
+
exit(-1)
|
671
|
+
end
|
672
|
+
|
673
|
+
# Get user to login
|
674
|
+
username = vm.retrieve_xmlelements('//TEMPLATE/CONTEXT/USERNAME')[0]
|
675
|
+
|
676
|
+
if !username.nil?
|
677
|
+
login = username.text
|
678
|
+
elsif !args[1].nil?
|
679
|
+
login = args[1]
|
680
|
+
else
|
681
|
+
login = 'root'
|
682
|
+
end
|
683
|
+
|
684
|
+
# Get CMD to run
|
685
|
+
options[:cmd].nil? ? cmd = '' : cmd = options[:cmd]
|
686
|
+
|
687
|
+
# Get NIC to connect
|
688
|
+
if options[:nic_id]
|
689
|
+
nic = vm.retrieve_xmlelements(
|
690
|
+
"//TEMPLATE/NIC[NIC_ID=\"#{options[:nic_id]}\"]"
|
691
|
+
)[0]
|
692
|
+
else
|
693
|
+
nic = vm.retrieve_xmlelements('//TEMPLATE/NIC[SSH="YES"]')[0]
|
694
|
+
end
|
695
|
+
|
696
|
+
nic = vm.retrieve_xmlelements('//TEMPLATE/NIC[1]')[0] if nic.nil?
|
697
|
+
|
698
|
+
if nic.nil?
|
699
|
+
STDERR.puts 'No NIC found'
|
700
|
+
exit(-1)
|
701
|
+
end
|
702
|
+
|
703
|
+
# If there is node port
|
704
|
+
if nic['EXTERNAL_PORT_RANGE']
|
705
|
+
ip = vm.to_hash['VM']['HISTORY_RECORDS']['HISTORY']
|
706
|
+
ip = [ip].flatten[-1]['HOSTNAME']
|
707
|
+
port = Integer(nic['EXTERNAL_PORT_RANGE'].split(':')[0]) + 21
|
708
|
+
else
|
709
|
+
ip = nic['IP']
|
710
|
+
port = 22
|
711
|
+
end
|
712
|
+
|
713
|
+
options[:ssh_opts].nil? ? opts = '' : opts = options[:ssh_opts]
|
714
|
+
|
715
|
+
if opts.empty?
|
716
|
+
exec(*%W[ssh #{login}@#{ip} -p #{port} #{cmd}])
|
717
|
+
else
|
718
|
+
exec('ssh', *opts.split, *%W[#{login}@#{ip} -p #{port} #{cmd}])
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
# rubocop:disable Style/SpecialGlobalVars
|
723
|
+
$?.exitstatus
|
724
|
+
# rubocop:enable Style/SpecialGlobalVars
|
725
|
+
end
|
726
|
+
|
673
727
|
private
|
674
728
|
|
675
729
|
def factory(id = nil)
|
@@ -1228,7 +1282,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1228
1282
|
format_history(vm)
|
1229
1283
|
end
|
1230
1284
|
|
1231
|
-
if vm.has_elements?('/VM/
|
1285
|
+
if vm.has_elements?('/VM/TEMPLATE/SCHED_ACTION')
|
1232
1286
|
puts
|
1233
1287
|
CLIHelper.print_header(str_h1 % 'SCHEDULED ACTIONS', false)
|
1234
1288
|
|
@@ -1246,7 +1300,10 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1246
1300
|
end
|
1247
1301
|
|
1248
1302
|
column :SCHEDULED, '', :adjust => true do |d|
|
1249
|
-
|
1303
|
+
t2 = d['TIME'].to_i
|
1304
|
+
t2 += vm['STIME'].to_i unless d['TIME'] =~ /^[0-9].*/
|
1305
|
+
|
1306
|
+
OpenNebulaHelper.time_to_str(t2, false) \
|
1250
1307
|
unless d.nil?
|
1251
1308
|
end
|
1252
1309
|
|
@@ -1297,7 +1354,10 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1297
1354
|
|
1298
1355
|
column :CHARTER, '', :left, :adjust, :size => 15 do |d|
|
1299
1356
|
t1 = Time.now
|
1300
|
-
t2 =
|
1357
|
+
t2 = d['TIME'].to_i
|
1358
|
+
t2 += vm['STIME'].to_i unless d['TIME'] =~ /^[0-9].*/
|
1359
|
+
|
1360
|
+
t2 = Time.at(t2)
|
1301
1361
|
|
1302
1362
|
days = ((t2 - t1) / (24 * 3600)).round(2)
|
1303
1363
|
hours = ((t2 - t1) / 3600).round(2)
|
@@ -1305,7 +1365,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1305
1365
|
|
1306
1366
|
if days > 1
|
1307
1367
|
show = "In #{days} days"
|
1308
|
-
elsif days
|
1368
|
+
elsif days <= 1 && hours > 1
|
1309
1369
|
show = "In #{hours} hours"
|
1310
1370
|
elsif minutes > 0
|
1311
1371
|
show = "In #{minutes} minutes"
|
@@ -1313,18 +1373,19 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1313
1373
|
show = 'Already done'
|
1314
1374
|
end
|
1315
1375
|
|
1316
|
-
|
1376
|
+
wrn = d['WARNING']
|
1377
|
+
if !wrn.nil? && (t1 - vm['STIME'].to_i).to_i > wrn.to_i
|
1317
1378
|
"#{show} *"
|
1318
1379
|
else
|
1319
1380
|
show
|
1320
1381
|
end
|
1321
1382
|
end
|
1322
|
-
end.show([vm_hash['VM']['
|
1383
|
+
end.show([vm_hash['VM']['TEMPLATE']['SCHED_ACTION']].flatten,
|
1323
1384
|
{})
|
1324
1385
|
end
|
1325
1386
|
|
1326
1387
|
if !options[:all]
|
1327
|
-
vm.delete_element('/VM/
|
1388
|
+
vm.delete_element('/VM/TEMPLATE/SCHED_ACTION')
|
1328
1389
|
end
|
1329
1390
|
|
1330
1391
|
if vm.has_elements?('/VM/USER_TEMPLATE')
|
@@ -499,6 +499,13 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
|
|
499
499
|
"onezone.yaml"
|
500
500
|
end
|
501
501
|
|
502
|
+
def self.state_to_str(id)
|
503
|
+
id = id.to_i
|
504
|
+
state_str = Zone::ZONE_STATES[id]
|
505
|
+
|
506
|
+
Zone::SHORT_ZONE_STATES[state_str]
|
507
|
+
end
|
508
|
+
|
502
509
|
def format_pool(options)
|
503
510
|
config_file = self.class.table_conf
|
504
511
|
|
@@ -524,7 +531,11 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
|
|
524
531
|
helper.get_fed_index(d["TEMPLATE"]['ENDPOINT'])
|
525
532
|
end
|
526
533
|
|
527
|
-
|
534
|
+
column :STAT, 'Zone status', :left, :size => 6 do |d|
|
535
|
+
OneZoneHelper.state_to_str(d['STATE'])
|
536
|
+
end
|
537
|
+
|
538
|
+
default :CURRENT, :ID, :NAME, :ENDPOINT, :FED_INDEX, :STAT
|
528
539
|
end
|
529
540
|
|
530
541
|
table
|
@@ -591,6 +602,7 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
|
|
591
602
|
CLIHelper.print_header(str_h1 % "ZONE #{zone['ID']} INFORMATION")
|
592
603
|
puts str % ["ID", zone.id.to_s]
|
593
604
|
puts str % ["NAME", zone.name]
|
605
|
+
puts str % ["STATE",zone.state_str]
|
594
606
|
puts
|
595
607
|
|
596
608
|
zone_hash=zone.to_hash
|
data/lib/one_helper.rb
CHANGED
@@ -576,6 +576,7 @@ EOT
|
|
576
576
|
p_r, p_w = IO.pipe
|
577
577
|
|
578
578
|
Signal.trap('PIPE', 'SIG_IGN')
|
579
|
+
Signal.trap('PIPE', 'EXIT')
|
579
580
|
|
580
581
|
lpid = fork do
|
581
582
|
$stdin.reopen(p_r)
|
@@ -899,6 +900,9 @@ EOT
|
|
899
900
|
|
900
901
|
|
901
902
|
def list_pool(options, top=false, filter_flag=nil)
|
903
|
+
# Capture Broken pipe
|
904
|
+
Signal.trap('PIPE', 'EXIT')
|
905
|
+
|
902
906
|
table = format_pool(options)
|
903
907
|
|
904
908
|
if options[:describe]
|
@@ -920,15 +924,11 @@ EOT
|
|
920
924
|
elsif options[:json]
|
921
925
|
list_pool_format(pool, options, filter_flag) do |pool|
|
922
926
|
hash = check_resource_xsd(pool, pname)
|
923
|
-
hash[pname] = check_resource_xsd(hash[pname], ename)
|
924
|
-
|
925
927
|
puts ::JSON.pretty_generate(hash)
|
926
928
|
end
|
927
929
|
elsif options[:yaml]
|
928
930
|
list_pool_format(pool, options, filter_flag) do |pool|
|
929
931
|
hash = check_resource_xsd(pool, pname)
|
930
|
-
hash[pname] = check_resource_xsd(hash[pname], ename)
|
931
|
-
|
932
932
|
puts hash.to_yaml(:indent => 4)
|
933
933
|
end
|
934
934
|
else
|
@@ -936,6 +936,9 @@ EOT
|
|
936
936
|
end
|
937
937
|
|
938
938
|
return 0
|
939
|
+
rescue SystemExit, Interrupt
|
940
|
+
# Rescue ctrl + c when paginated
|
941
|
+
0
|
939
942
|
end
|
940
943
|
|
941
944
|
# Check if a resource defined by attributes is referenced in pool
|
@@ -1223,11 +1226,41 @@ EOT
|
|
1223
1226
|
|
1224
1227
|
return hash unless xsd
|
1225
1228
|
|
1226
|
-
|
1229
|
+
if xsd.keys.include?('complexType')
|
1230
|
+
xsd = xsd['complexType']['sequence']['element']
|
1231
|
+
else
|
1232
|
+
xsd = xsd['element']
|
1233
|
+
end
|
1234
|
+
|
1235
|
+
xsd = [ xsd ] unless xsd.is_a? Array
|
1236
|
+
|
1237
|
+
check_xsd(hash[ename], xsd)
|
1227
1238
|
|
1228
1239
|
hash
|
1229
1240
|
end
|
1230
1241
|
|
1242
|
+
|
1243
|
+
# Replaces refs in xsd definition
|
1244
|
+
# limited func: only traverse hashes (not arrays), but works well for pools
|
1245
|
+
#
|
1246
|
+
# @param h [Hash] XSD in hash format
|
1247
|
+
#
|
1248
|
+
# @return [Object] XSD but where ref were, there inner XSD is loaded
|
1249
|
+
def replace_refs(h)
|
1250
|
+
return h unless h.is_a? Hash
|
1251
|
+
|
1252
|
+
if h.keys.include? 'ref'
|
1253
|
+
ref_xsd = read_xsd(h['ref'])
|
1254
|
+
return ref_xsd unless ref_xsd.nil?
|
1255
|
+
return h
|
1256
|
+
else
|
1257
|
+
h.each do |k,v|
|
1258
|
+
h[k] = replace_refs(v)
|
1259
|
+
end
|
1260
|
+
end
|
1261
|
+
end
|
1262
|
+
|
1263
|
+
|
1231
1264
|
# Read XSD file and parse to XML
|
1232
1265
|
#
|
1233
1266
|
# @param ename [String] Element name to read XSD
|
@@ -1250,141 +1283,95 @@ EOT
|
|
1250
1283
|
end
|
1251
1284
|
|
1252
1285
|
hash = Hash.from_xml(Nokogiri::XML(File.read(file)).to_s)
|
1286
|
+
|
1253
1287
|
hash = hash['schema']['element']
|
1254
1288
|
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
hash['element']
|
1259
|
-
end
|
1289
|
+
hash = replace_refs(hash)
|
1290
|
+
|
1291
|
+
hash
|
1260
1292
|
end
|
1261
1293
|
|
1262
|
-
#
|
1294
|
+
# Decides if given xsd definiton should be array in xml
|
1295
|
+
# Must be hash and contain either 'maxOccurs' => unbounded'
|
1296
|
+
# or 'maxOccurs' => >1
|
1263
1297
|
#
|
1264
|
-
# @param
|
1265
|
-
#
|
1266
|
-
# @
|
1267
|
-
#
|
1268
|
-
|
1269
|
-
|
1270
|
-
return unless
|
1271
|
-
|
1272
|
-
if (hash.is_a? Hash) && !hash.empty?
|
1273
|
-
hash.map do |ki, vi|
|
1274
|
-
vi = [vi].flatten if is_array?(xsd, [ki])
|
1275
|
-
|
1276
|
-
if (vi.is_a? Hash) && !vi.empty?
|
1277
|
-
parents << ki
|
1278
|
-
|
1279
|
-
vi.map do |kj, vj|
|
1280
|
-
parents << kj
|
1281
|
-
|
1282
|
-
path = (parents + [ki, kj]).uniq
|
1283
|
-
vj = [vj].flatten if is_array?(xsd, path)
|
1284
|
-
|
1285
|
-
hash[ki][kj] = check_xsd(vj,
|
1286
|
-
[ki, kj],
|
1287
|
-
ename,
|
1288
|
-
xsd,
|
1289
|
-
parents)
|
1290
|
-
end
|
1291
|
-
|
1292
|
-
parents.clear
|
1293
|
-
elsif vi.is_a? Array
|
1294
|
-
hash[ki] = check_xsd(vi, [ki], ename, xsd, parents)
|
1295
|
-
else
|
1296
|
-
hash[ki] = check_xsd(vi, [ki], ename, xsd, parents)
|
1297
|
-
end
|
1298
|
-
end
|
1299
|
-
|
1300
|
-
hash
|
1301
|
-
elsif hash.is_a? Array
|
1302
|
-
ret = []
|
1303
|
-
|
1304
|
-
hash.each do |v|
|
1305
|
-
ret << check_xsd(v, elements, ename, xsd, parents)
|
1306
|
-
end
|
1307
|
-
|
1308
|
-
ret
|
1309
|
-
else
|
1310
|
-
check_type(hash) do
|
1311
|
-
type = get_xsd_path(xsd, elements)
|
1312
|
-
type['type'] unless type.nil?
|
1313
|
-
end
|
1314
|
-
end
|
1298
|
+
# @param e [Hash] XSD definition transfomred in hash
|
1299
|
+
#
|
1300
|
+
# @return [Boolean]
|
1301
|
+
#
|
1302
|
+
def is_array?(e)
|
1303
|
+
return false if e.nil?
|
1304
|
+
return false unless e.is_a? Hash
|
1305
|
+
e['maxOccurs'] == 'unbounded' || e['maxOccurs'].to_i > 1
|
1315
1306
|
end
|
1316
1307
|
|
1317
|
-
#
|
1308
|
+
# Decides if given xsd definiton is complex type sequence
|
1309
|
+
# Must be hash and contain nested hash
|
1310
|
+
# ['complexType']['sequence']['element']
|
1318
1311
|
#
|
1319
|
-
# @param
|
1320
|
-
# @param elements [Array] Path to get
|
1312
|
+
# @param [Hash] XSD definition transfomred in hash
|
1321
1313
|
#
|
1322
|
-
# @return [
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1328
|
-
# Return nil, because is an empty complexType
|
1329
|
-
return unless element
|
1330
|
-
|
1331
|
-
element = [xsd].flatten.find do |v|
|
1332
|
-
v['name'] == element || v['ref'] == element
|
1333
|
-
end
|
1334
|
-
|
1335
|
-
# Return nil, because element was not find in XSD
|
1336
|
-
return unless element
|
1337
|
-
|
1338
|
-
if element.keys.include?('complexType') && !elements.empty?
|
1339
|
-
if element['complexType']['all']
|
1340
|
-
element = element['complexType']['all']['element']
|
1341
|
-
else
|
1342
|
-
element = element['complexType']['sequence']['element']
|
1343
|
-
end
|
1344
|
-
|
1345
|
-
get_xsd_path(element, elements)
|
1346
|
-
else
|
1347
|
-
element
|
1348
|
-
end
|
1314
|
+
# @return [Boolean]
|
1315
|
+
#
|
1316
|
+
def xsd_complex_sequence?(x)
|
1317
|
+
x['complexType']['sequence']['element'] rescue return false
|
1318
|
+
true
|
1349
1319
|
end
|
1350
1320
|
|
1351
|
-
#
|
1321
|
+
# Decides if given xsd definiton is complex type all
|
1322
|
+
# Must be hash and contain nested hash
|
1323
|
+
# ['complexType']['all']['element']
|
1352
1324
|
#
|
1353
|
-
# @param
|
1354
|
-
# @param elements [Array] Path to check
|
1325
|
+
# @param [Hash] XSD definition transfomred in hash
|
1355
1326
|
#
|
1356
|
-
# @return [Boolean]
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
max == 'unbounded' || max.to_i > 1
|
1327
|
+
# @return [Boolean]
|
1328
|
+
#
|
1329
|
+
def xsd_complex_all?(x)
|
1330
|
+
x['complexType']['all']['element'] rescue return false
|
1331
|
+
true
|
1362
1332
|
end
|
1363
1333
|
|
1364
|
-
#
|
1334
|
+
# Recursively traverse the OpenNebula resource (in Hash) and it's XSD
|
1335
|
+
# Where array is required in XSD, there encapsulate the entry into [ ]
|
1336
|
+
# Typically usefull for single disk, snapshots etc.
|
1365
1337
|
#
|
1366
|
-
# @param
|
1338
|
+
# @param hash [Hash] Resource information in hash format
|
1339
|
+
# @param xsd [Hash] XSD of the resource, transformed into hash
|
1367
1340
|
#
|
1368
|
-
|
1369
|
-
|
1370
|
-
type = yield if block_given?
|
1341
|
+
def check_xsd(hash, xsd)
|
1342
|
+
return unless hash or hash.empty?
|
1371
1343
|
|
1372
|
-
|
1373
|
-
return value unless type
|
1344
|
+
hash.each do |k, v|
|
1374
1345
|
|
1375
|
-
|
1376
|
-
|
1346
|
+
# find the elem definition in xsd array
|
1347
|
+
xsd_elem = xsd.select { |e| e['name'] == k }.first unless xsd.nil?
|
1377
1348
|
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1349
|
+
if xsd_complex_sequence?(xsd_elem) || xsd_complex_all?(xsd_elem)
|
1350
|
+
|
1351
|
+
# go deeper in xsd, xsd is ehter complex sequence or all
|
1352
|
+
begin
|
1353
|
+
inner_xsd = xsd_elem['complexType']['sequence']['element']
|
1354
|
+
rescue
|
1355
|
+
inner_xsd = xsd_elem['complexType']['all']['element']
|
1356
|
+
end
|
1357
|
+
|
1358
|
+
# recursively traverse resource - hash
|
1359
|
+
if v.is_a? Hash
|
1360
|
+
hash[k] = check_xsd(v, inner_xsd)
|
1361
|
+
|
1362
|
+
# recursively traverse resource - array
|
1363
|
+
elsif v.is_a? Array
|
1364
|
+
hash[k] = []
|
1365
|
+
v.each do |e|
|
1366
|
+
hash[k] << check_xsd(e, inner_xsd)
|
1367
|
+
end
|
1368
|
+
end
|
1369
|
+
end
|
1370
|
+
|
1371
|
+
# if XSD requires array, do so in resource if missing
|
1372
|
+
if is_array?(xsd_elem) && (! v.is_a? Array)
|
1373
|
+
hash[k] = [ v ]
|
1385
1374
|
end
|
1386
|
-
else
|
1387
|
-
value
|
1388
1375
|
end
|
1389
1376
|
end
|
1390
1377
|
end
|
data/share/schemas/xsd/host.xsd
CHANGED
@@ -53,7 +53,27 @@
|
|
53
53
|
<xs:element name="PCI_DEVICES">
|
54
54
|
<xs:complexType>
|
55
55
|
<xs:sequence>
|
56
|
-
<xs:element name="PCI"
|
56
|
+
<xs:element name="PCI" minOccurs="0" maxOccurs="unbounded">
|
57
|
+
<xs:complexType>
|
58
|
+
<xs:sequence>
|
59
|
+
<xs:element name="ADDRESS" type="xs:string"/>
|
60
|
+
<xs:element name="BUS" type="xs:string"/>
|
61
|
+
<xs:element name="CLASS" type="xs:string"/>
|
62
|
+
<xs:element name="CLASS_NAME" type="xs:string"/>
|
63
|
+
<xs:element name="DEVICE" type="xs:string"/>
|
64
|
+
<xs:element name="DEVICE_NAME" type="xs:string"/>
|
65
|
+
<xs:element name="DOMAIN" type="xs:string"/>
|
66
|
+
<xs:element name="FUNCTION" type="xs:string"/>
|
67
|
+
<xs:element name="NUMA_NODE" type="xs:string"/>
|
68
|
+
<xs:element name="SHORT_ADDRESS" type="xs:string"/>
|
69
|
+
<xs:element name="SLOT" type="xs:string"/>
|
70
|
+
<xs:element name="TYPE" type="xs:string"/>
|
71
|
+
<xs:element name="VENDOR" type="xs:string"/>
|
72
|
+
<xs:element name="VENDOR_NAME" type="xs:string"/>
|
73
|
+
<xs:element name="VMID" type="xs:integer"/>
|
74
|
+
</xs:sequence>
|
75
|
+
</xs:complexType>
|
76
|
+
</xs:element>
|
57
77
|
</xs:sequence>
|
58
78
|
</xs:complexType>
|
59
79
|
</xs:element>
|
@@ -6,17 +6,37 @@
|
|
6
6
|
<xs:sequence>
|
7
7
|
<xs:element name="MONITORING" minOccurs="0" maxOccurs="unbounded">
|
8
8
|
<xs:complexType>
|
9
|
-
<xs:
|
9
|
+
<xs:sequence>
|
10
|
+
<!-- Percentage of 1 CPU consumed (two fully consumed cpu is 2.0) -->
|
10
11
|
<xs:element name="CPU" type="xs:decimal" minOccurs="0" maxOccurs="1"/>
|
12
|
+
<!-- Amount of bytes read from disk-->
|
11
13
|
<xs:element name="DISKRDBYTES" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
14
|
+
<!-- Number of IO read operations -->
|
12
15
|
<xs:element name="DISKRDIOPS" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
16
|
+
<!-- Amount of bytes written to disk -->
|
13
17
|
<xs:element name="DISKWRBYTES" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
18
|
+
<!-- Number of IO write operations -->
|
14
19
|
<xs:element name="DISKWRIOPS" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
20
|
+
<!-- Disk size details -->
|
21
|
+
<xs:element name="DISK_SIZE" minOccurs="0" maxOccurs="unbounded">
|
22
|
+
<xs:complexType>
|
23
|
+
<xs:sequence>
|
24
|
+
<xs:element name="ID" type="xs:integer"/>
|
25
|
+
<xs:element name="SIZE" type="xs:integer"/>
|
26
|
+
</xs:sequence>
|
27
|
+
</xs:complexType>
|
28
|
+
</xs:element>
|
29
|
+
<!-- ID of the VM -->
|
15
30
|
<xs:element name="ID" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
31
|
+
<!-- Consumption in kilobytes -->
|
16
32
|
<xs:element name="MEMORY" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
17
|
-
|
33
|
+
<!-- Received bytes from the network -->
|
18
34
|
<xs:element name="NETRX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
35
|
+
<!-- Sent bytes to the network -->
|
36
|
+
<xs:element name="NETTX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
37
|
+
<!-- Exact time when monitoring info were retieved -->
|
19
38
|
<xs:element name="TIMESTAMP" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
39
|
+
<!-- vCetner information -->
|
20
40
|
<xs:element name="VCENTER_ESX_HOST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
21
41
|
<xs:element name="VCENTER_GUEST_STATE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
22
42
|
<xs:element name="VCENTER_RP_NAME" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
@@ -24,15 +44,7 @@
|
|
24
44
|
<xs:element name="VCENTER_VMWARETOOLS_VERSION" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
25
45
|
<xs:element name="VCENTER_VMWARETOOLS_VERSION_STATUS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
26
46
|
<xs:element name="VCENTER_VM_NAME" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
27
|
-
|
28
|
-
<xs:complexType>
|
29
|
-
<xs:sequence>
|
30
|
-
<xs:element name="ID" type="xs:integer"/>
|
31
|
-
<xs:element name="SIZE" type="xs:integer"/>
|
32
|
-
</xs:sequence>
|
33
|
-
</xs:complexType>
|
34
|
-
</xs:element>
|
35
|
-
</xs:all>
|
47
|
+
</xs:sequence>
|
36
48
|
</xs:complexType>
|
37
49
|
</xs:element>
|
38
50
|
</xs:sequence>
|
data/share/schemas/xsd/vm.xsd
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
</xs:element>
|
51
51
|
<xs:element name="MONITORING">
|
52
52
|
<xs:complexType>
|
53
|
-
<xs:
|
53
|
+
<xs:sequence>
|
54
54
|
<!-- Percentage of 1 CPU consumed (two fully consumed cpu is 2.0) -->
|
55
55
|
<xs:element name="CPU" type="xs:decimal" minOccurs="0" maxOccurs="1"/>
|
56
56
|
<!-- Amount of bytes read from disk-->
|
@@ -61,14 +61,23 @@
|
|
61
61
|
<xs:element name="DISKWRBYTES" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
62
62
|
<!-- Number of IO write operations -->
|
63
63
|
<xs:element name="DISKWRIOPS" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
64
|
+
<!-- Disk size details -->
|
65
|
+
<xs:element name="DISK_SIZE" minOccurs="0" maxOccurs="unbounded">
|
66
|
+
<xs:complexType>
|
67
|
+
<xs:sequence>
|
68
|
+
<xs:element name="ID" type="xs:integer"/>
|
69
|
+
<xs:element name="SIZE" type="xs:integer"/>
|
70
|
+
</xs:sequence>
|
71
|
+
</xs:complexType>
|
72
|
+
</xs:element>
|
64
73
|
<!-- ID of the VM -->
|
65
74
|
<xs:element name="ID" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
66
75
|
<!-- Consumption in kilobytes -->
|
67
76
|
<xs:element name="MEMORY" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
68
|
-
<!-- Sent bytes to the network -->
|
69
|
-
<xs:element name="NETTX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
70
77
|
<!-- Received bytes from the network -->
|
71
78
|
<xs:element name="NETRX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
79
|
+
<!-- Sent bytes to the network -->
|
80
|
+
<xs:element name="NETTX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
72
81
|
<!-- Exact time when monitoring info were retieved -->
|
73
82
|
<xs:element name="TIMESTAMP" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
74
83
|
<!-- vCetner information -->
|
@@ -79,13 +88,19 @@
|
|
79
88
|
<xs:element name="VCENTER_VMWARETOOLS_VERSION" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
80
89
|
<xs:element name="VCENTER_VMWARETOOLS_VERSION_STATUS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
81
90
|
<xs:element name="VCENTER_VM_NAME" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
82
|
-
</xs:
|
91
|
+
</xs:sequence>
|
83
92
|
</xs:complexType>
|
84
93
|
</xs:element>
|
85
94
|
<xs:element name="TEMPLATE">
|
86
95
|
<xs:complexType>
|
87
96
|
<xs:sequence>
|
88
|
-
<xs:
|
97
|
+
<xs:element name="AUTOMATIC_DS_REQUIREMENTS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
98
|
+
<xs:element name="AUTOMATIC_NIC_REQUIREMENTS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
99
|
+
<xs:element name="AUTOMATIC_REQUIREMENTS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
100
|
+
<xs:element name="CLONING_TEMPLATE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
101
|
+
<xs:element name="CONTEXT" minOccurs="0" maxOccurs="1"/>
|
102
|
+
<xs:element name="CPU" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
103
|
+
<xs:element name="CPU_COST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
89
104
|
<xs:element name="DISK" minOccurs="0" maxOccurs="unbounded">
|
90
105
|
<xs:complexType>
|
91
106
|
<xs:sequence>
|
@@ -96,12 +111,20 @@
|
|
96
111
|
</xs:sequence>
|
97
112
|
</xs:complexType>
|
98
113
|
</xs:element>
|
99
|
-
<xs:
|
114
|
+
<xs:element name="DISK_COST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
115
|
+
<xs:element name="EMULATOR" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
116
|
+
<xs:element name="FEATURES" minOccurs="0" maxOccurs="1"/>
|
117
|
+
<xs:element name="HYPERV_OPTIONS" minOccurs="0" maxOccurs="1"/>
|
118
|
+
<xs:element name="GRAPHICS" minOccurs="0" maxOccurs="1"/>
|
119
|
+
<xs:element name="IMPORTED" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
120
|
+
<xs:element name="INPUT" minOccurs="0" maxOccurs="1"/>
|
121
|
+
<xs:element name="MEMORY" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
122
|
+
<xs:element name="MEMORY_COST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
123
|
+
<xs:element name="MEMORY_MAX" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
124
|
+
<xs:element name="MEMORY_SLOTS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
100
125
|
<xs:element name="NIC" minOccurs="0" maxOccurs="unbounded">
|
101
126
|
<xs:complexType>
|
102
127
|
<xs:sequence>
|
103
|
-
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
|
104
|
-
<xs:element name="BRIDGE_TYPE" type="xs:string"/>
|
105
128
|
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
|
106
129
|
<xs:element name="VCENTER_INSTANCE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
107
130
|
<xs:element name="VCENTER_NET_REF" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
@@ -109,7 +132,6 @@
|
|
109
132
|
</xs:sequence>
|
110
133
|
</xs:complexType>
|
111
134
|
</xs:element>
|
112
|
-
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
|
113
135
|
<xs:element name="NIC_ALIAS" minOccurs="0" maxOccurs="unbounded">
|
114
136
|
<xs:complexType>
|
115
137
|
<xs:sequence>
|
@@ -124,7 +146,39 @@
|
|
124
146
|
</xs:sequence>
|
125
147
|
</xs:complexType>
|
126
148
|
</xs:element>
|
127
|
-
<xs:
|
149
|
+
<xs:element name="NIC_DEFAULT" minOccurs="0" maxOccurs="1"/>
|
150
|
+
<xs:element name="NUMA_NODE" minOccurs="0" maxOccurs="1"/>
|
151
|
+
<xs:element name="OS" minOccurs="0" maxOccurs="1"/>
|
152
|
+
<xs:element name="PCI" minOccurs="0" maxOccurs="1"/>
|
153
|
+
<xs:element name="RAW" minOccurs="0" maxOccurs="1"/>
|
154
|
+
<xs:element name="SCHED_ACTION" minOccurs="0" maxOccurs="unbounded">
|
155
|
+
<xs:complexType>
|
156
|
+
<xs:sequence>
|
157
|
+
<xs:element name="ACTION" type="xs:string"/>
|
158
|
+
<xs:element name="ARGS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
159
|
+
<xs:element name="DAYS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
160
|
+
<xs:element name="END_TYPE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
161
|
+
<xs:element name="END_VALUE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
162
|
+
<xs:element name="ID" type="xs:string"/>
|
163
|
+
<xs:element name="REPEAT" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
164
|
+
<xs:element name="TIME" type="xs:string"/>
|
165
|
+
<xs:element name="WARNING" type="xs:string"/>
|
166
|
+
</xs:sequence>
|
167
|
+
</xs:complexType>
|
168
|
+
</xs:element>
|
169
|
+
<xs:element name="SECURITY_GROUP_RULE" minOccurs="0" maxOccurs="unbounded"/>
|
170
|
+
<xs:element name="SPICE_OPTIONS" minOccurs="0" maxOccurs="1"/>
|
171
|
+
<xs:element name="SUBMIT_ON_HOLD" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
172
|
+
<xs:element name="TEMPLATE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
173
|
+
<xs:element name="TM_MAD_SYSTEM" type="xs:string"/>
|
174
|
+
<xs:element name="TOPOLOGY" minOccurs="0" maxOccurs="1"/>
|
175
|
+
<xs:element name="VCPU" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
176
|
+
<xs:element name="VCPU_MAX" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
177
|
+
<xs:element name="VMGROUP" minOccurs="0" maxOccurs="unbounded"/>
|
178
|
+
<xs:element name="VMID" type="xs:string"/>
|
179
|
+
<xs:element name="VROUTER_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
180
|
+
<xs:element name="VROUTER_KEEPALIVED_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
181
|
+
<xs:element name="VROUTER_KEEPALIVED_PASSWORD" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
128
182
|
</xs:sequence>
|
129
183
|
</xs:complexType>
|
130
184
|
</xs:element>
|
@@ -23,7 +23,8 @@
|
|
23
23
|
<xs:element name="TEMPLATE">
|
24
24
|
<xs:complexType>
|
25
25
|
<xs:sequence>
|
26
|
-
<xs:
|
26
|
+
<xs:element name="CPU" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
27
|
+
<xs:element name="MEMORY" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
27
28
|
<xs:element name="DISK" minOccurs="0" maxOccurs="unbounded">
|
28
29
|
<xs:complexType>
|
29
30
|
<xs:sequence>
|
@@ -34,7 +35,6 @@
|
|
34
35
|
</xs:sequence>
|
35
36
|
</xs:complexType>
|
36
37
|
</xs:element>
|
37
|
-
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
|
38
38
|
<xs:element name="NIC" minOccurs="0" maxOccurs="unbounded">
|
39
39
|
<xs:complexType>
|
40
40
|
<xs:sequence>
|
@@ -45,7 +45,7 @@
|
|
45
45
|
</xs:sequence>
|
46
46
|
</xs:complexType>
|
47
47
|
</xs:element>
|
48
|
-
<xs:
|
48
|
+
<xs:element name="GRAPHICS" minOccurs="0" maxOccurs="1"/>
|
49
49
|
</xs:sequence>
|
50
50
|
</xs:complexType>
|
51
51
|
</xs:element>
|
@@ -82,29 +82,6 @@
|
|
82
82
|
</xs:sequence>
|
83
83
|
</xs:complexType>
|
84
84
|
</xs:element>
|
85
|
-
<xs:element name="SNAPSHOTS" minOccurs="0" maxOccurs="unbounded">
|
86
|
-
<xs:complexType>
|
87
|
-
<xs:sequence>
|
88
|
-
<xs:element name="ALLOW_ORPHANS" type="xs:string"/>
|
89
|
-
<xs:element name="CURRENT_BASE" type="xs:integer"/>
|
90
|
-
<xs:element name="DISK_ID" type="xs:integer"/>
|
91
|
-
<xs:element name="NEXT_SNAPSHOT" type="xs:integer"/>
|
92
|
-
<xs:element name="SNAPSHOT" minOccurs="0" maxOccurs="unbounded">
|
93
|
-
<xs:complexType>
|
94
|
-
<xs:sequence>
|
95
|
-
<xs:element name="ACTIVE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
96
|
-
<xs:element name="CHILDREN" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
97
|
-
<xs:element name="DATE" type="xs:integer"/>
|
98
|
-
<xs:element name="ID" type="xs:integer"/>
|
99
|
-
<xs:element name="NAME" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
100
|
-
<xs:element name="PARENT" type="xs:integer"/>
|
101
|
-
<xs:element name="SIZE" type="xs:integer"/>
|
102
|
-
</xs:sequence>
|
103
|
-
</xs:complexType>
|
104
|
-
</xs:element>
|
105
|
-
</xs:sequence>
|
106
|
-
</xs:complexType>
|
107
|
-
</xs:element>
|
108
85
|
</xs:sequence>
|
109
86
|
</xs:complexType>
|
110
87
|
</xs:element>
|
data/share/schemas/xsd/vnet.xsd
CHANGED
@@ -63,11 +63,14 @@
|
|
63
63
|
<xs:complexType>
|
64
64
|
<xs:sequence>
|
65
65
|
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
|
66
|
-
<xs:element name="CONTEXT_FORCE_IPV4" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
67
66
|
<xs:element name="DNS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
68
67
|
<xs:element name="GATEWAY" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
69
68
|
<xs:element name="GATEWAY6" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
70
69
|
<xs:element name="GUEST_MTU" type="xs:int" minOccurs="0" maxOccurs="1"/>
|
70
|
+
<xs:element name="IP6_METHOD" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
71
|
+
<xs:element name="IP6_METRIC" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
72
|
+
<xs:element name="METHOD" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
73
|
+
<xs:element name="METRIC" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
71
74
|
<xs:element name="NETWORK_ADDRESS" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
72
75
|
<xs:element name="NETWORK_MASK" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
73
76
|
<xs:element name="SEARCH_DOMAIN" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
data/share/schemas/xsd/zone.xsd
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opennebula-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.1.80.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenNebula
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opennebula
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 6.
|
19
|
+
version: 6.1.80.pre
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 6.
|
26
|
+
version: 6.1.80.pre
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,11 +59,11 @@ executables:
|
|
59
59
|
- oneuser
|
60
60
|
- onevcenter
|
61
61
|
- onevdc
|
62
|
+
- onevm
|
62
63
|
- onevmgroup
|
63
64
|
- onevnet
|
64
65
|
- onevntemplate
|
65
66
|
- onevrouter
|
66
|
-
- onevm
|
67
67
|
- onezone
|
68
68
|
extensions: []
|
69
69
|
extra_rdoc_files: []
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- share/schemas/xsd/marketplace_pool.xsd
|
94
94
|
- share/schemas/xsd/marketplaceapp.xsd
|
95
95
|
- share/schemas/xsd/marketplaceapp_pool.xsd
|
96
|
+
- share/schemas/xsd/monitoring_data.xsd
|
96
97
|
- share/schemas/xsd/opennebula_configuration.xsd
|
97
98
|
- share/schemas/xsd/raftstatus.xsd
|
98
99
|
- share/schemas/xsd/security_group.xsd
|
@@ -102,8 +103,10 @@ files:
|
|
102
103
|
- share/schemas/xsd/user_pool.xsd
|
103
104
|
- share/schemas/xsd/vdc.xsd
|
104
105
|
- share/schemas/xsd/vdc_pool.xsd
|
106
|
+
- share/schemas/xsd/vm.xsd
|
105
107
|
- share/schemas/xsd/vm_group.xsd
|
106
108
|
- share/schemas/xsd/vm_group_pool.xsd
|
109
|
+
- share/schemas/xsd/vm_pool.xsd
|
107
110
|
- share/schemas/xsd/vmtemplate.xsd
|
108
111
|
- share/schemas/xsd/vmtemplate_pool.xsd
|
109
112
|
- share/schemas/xsd/vnet.xsd
|
@@ -112,9 +115,6 @@ files:
|
|
112
115
|
- share/schemas/xsd/vntemplate_pool.xsd
|
113
116
|
- share/schemas/xsd/vrouter.xsd
|
114
117
|
- share/schemas/xsd/vrouter_pool.xsd
|
115
|
-
- share/schemas/xsd/monitoring_data.xsd
|
116
|
-
- share/schemas/xsd/vm.xsd
|
117
|
-
- share/schemas/xsd/vm_pool.xsd
|
118
118
|
- share/schemas/xsd/zone.xsd
|
119
119
|
- share/schemas/xsd/zone_pool.xsd
|
120
120
|
- bin/oneacct
|
@@ -135,11 +135,11 @@ files:
|
|
135
135
|
- bin/oneuser
|
136
136
|
- bin/onevcenter
|
137
137
|
- bin/onevdc
|
138
|
+
- bin/onevm
|
138
139
|
- bin/onevmgroup
|
139
140
|
- bin/onevnet
|
140
141
|
- bin/onevntemplate
|
141
142
|
- bin/onevrouter
|
142
|
-
- bin/onevm
|
143
143
|
- bin/onezone
|
144
144
|
- lib/cli_helper.rb
|
145
145
|
- lib/command_parser.rb
|
@@ -162,11 +162,11 @@ files:
|
|
162
162
|
- lib/one_helper/oneuser_helper.rb
|
163
163
|
- lib/one_helper/onevcenter_helper.rb
|
164
164
|
- lib/one_helper/onevdc_helper.rb
|
165
|
+
- lib/one_helper/onevm_helper.rb
|
165
166
|
- lib/one_helper/onevmgroup_helper.rb
|
166
167
|
- lib/one_helper/onevnet_helper.rb
|
167
168
|
- lib/one_helper/onevntemplate_helper.rb
|
168
169
|
- lib/one_helper/onevrouter_helper.rb
|
169
|
-
- lib/one_helper/onevm_helper.rb
|
170
170
|
- lib/one_helper/onezone_helper.rb
|
171
171
|
- NOTICE
|
172
172
|
- LICENSE
|
@@ -185,9 +185,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
185
185
|
version: '0'
|
186
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
187
|
requirements:
|
188
|
-
- - '
|
188
|
+
- - '>'
|
189
189
|
- !ruby/object:Gem::Version
|
190
|
-
version:
|
190
|
+
version: 1.3.1
|
191
191
|
requirements: []
|
192
192
|
rubyforge_project:
|
193
193
|
rubygems_version: 2.0.14.1
|