opennebula-cli 6.0.3 → 6.1.80.pre
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.
- 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
|