opennebula-cli 6.4.3 → 6.5.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/oneacct +1 -1
- data/bin/oneacl +1 -1
- data/bin/onecluster +1 -1
- data/bin/onedatastore +1 -1
- data/bin/oneflow +1 -1
- data/bin/oneflow-template +1 -1
- data/bin/onegroup +1 -1
- data/bin/onehook +1 -1
- data/bin/onehost +1 -1
- data/bin/oneimage +52 -3
- data/bin/oneirb +1 -1
- data/bin/onelog +1 -1
- data/bin/onemarket +1 -1
- data/bin/onemarketapp +1 -1
- data/bin/onesecgroup +1 -1
- data/bin/oneshowback +1 -1
- data/bin/onetemplate +1 -1
- data/bin/oneuser +2 -2
- data/bin/onevcenter +1 -1
- data/bin/onevdc +1 -1
- data/bin/onevm +137 -147
- data/bin/onevmgroup +1 -1
- data/bin/onevnet +16 -4
- data/bin/onevntemplate +1 -1
- data/bin/onevrouter +1 -1
- data/bin/onezone +1 -1
- data/lib/cli_helper.rb +1 -1
- data/lib/command_parser.rb +1 -1
- data/lib/one_helper/oneacct_helper.rb +1 -1
- data/lib/one_helper/oneacl_helper.rb +1 -1
- data/lib/one_helper/onecluster_helper.rb +1 -1
- data/lib/one_helper/onedatastore_helper.rb +1 -1
- data/lib/one_helper/oneflow_helper.rb +1 -1
- data/lib/one_helper/oneflowtemplate_helper.rb +1 -1
- data/lib/one_helper/onegroup_helper.rb +1 -1
- data/lib/one_helper/onehook_helper.rb +1 -1
- data/lib/one_helper/onehost_helper.rb +13 -56
- data/lib/one_helper/oneimage_helper.rb +70 -9
- data/lib/one_helper/onemarket_helper.rb +1 -1
- data/lib/one_helper/onemarketapp_helper.rb +1 -1
- data/lib/one_helper/onequota_helper.rb +1 -1
- data/lib/one_helper/onesecgroup_helper.rb +1 -1
- data/lib/one_helper/onetemplate_helper.rb +1 -1
- data/lib/one_helper/oneuser_helper.rb +1 -1
- data/lib/one_helper/onevcenter_helper.rb +1 -1
- data/lib/one_helper/onevdc_helper.rb +1 -1
- data/lib/one_helper/onevm_helper.rb +67 -51
- data/lib/one_helper/onevmgroup_helper.rb +1 -1
- data/lib/one_helper/onevnet_helper.rb +36 -2
- data/lib/one_helper/onevntemplate_helper.rb +1 -1
- data/lib/one_helper/onevrouter_helper.rb +1 -1
- data/lib/one_helper/onezone_helper.rb +1 -1
- data/lib/one_helper.rb +3 -3
- data/share/schemas/xsd/acct.xsd +28 -0
- data/share/schemas/xsd/hook_message_state.xsd +5 -1
- data/share/schemas/xsd/host.xsd +3 -23
- data/share/schemas/xsd/image.xsd +18 -0
- data/share/schemas/xsd/opennebula_configuration.xsd +2 -0
- data/share/schemas/xsd/vm.xsd +30 -0
- data/share/schemas/xsd/vnet.xsd +28 -0
- data/share/schemas/xsd/vnet_pool.xsd +28 -0
- metadata +6 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# limitations under the License. #
|
|
15
15
|
#--------------------------------------------------------------------------- #
|
|
16
16
|
|
|
17
|
+
require 'HostSyncManager'
|
|
17
18
|
require 'one_helper'
|
|
18
19
|
require 'one_helper/onevm_helper'
|
|
19
20
|
require 'rubygems'
|
|
@@ -268,12 +269,11 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
268
269
|
|
|
269
270
|
cluster_id = options[:cluster]
|
|
270
271
|
|
|
271
|
-
# Get remote_dir (implies oneadmin group)
|
|
272
272
|
rc = OpenNebula::System.new(@client).get_configuration
|
|
273
273
|
return -1, rc.message if OpenNebula.is_error?(rc)
|
|
274
274
|
|
|
275
275
|
conf = rc
|
|
276
|
-
|
|
276
|
+
sync_manager = HostSyncManager.new(conf)
|
|
277
277
|
|
|
278
278
|
# Verify the existence of REMOTES_LOCATION
|
|
279
279
|
if !File.directory? REMOTES_LOCATION
|
|
@@ -363,21 +363,13 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
363
363
|
|
|
364
364
|
print_update_info(total - size, total, host['NAME'])
|
|
365
365
|
|
|
366
|
-
if options[:ssh]
|
|
367
|
-
sync_cmd = "ssh #{host['NAME']}" \
|
|
368
|
-
" rm -rf '#{remote_dir}' 2>/dev/null;" \
|
|
369
|
-
" mkdir -p '#{remote_dir}' 2>/dev/null &&" \
|
|
370
|
-
" scp -rp #{REMOTES_LOCATION}/*" \
|
|
371
|
-
" #{host['NAME']}:#{remote_dir} 2> /dev/null"
|
|
372
|
-
else
|
|
373
|
-
sync_cmd = "rsync -Laz --delete #{REMOTES_LOCATION}/" \
|
|
374
|
-
" #{host['NAME']}:#{remote_dir}/"
|
|
375
|
-
end
|
|
376
|
-
|
|
377
366
|
retries = 3
|
|
378
367
|
|
|
379
368
|
begin
|
|
380
|
-
|
|
369
|
+
copy_method = options[:ssh] ? :ssh : :rsync
|
|
370
|
+
rc = sync_manager.update_remotes(host['NAME'],
|
|
371
|
+
nil,
|
|
372
|
+
copy_method)
|
|
381
373
|
rescue IOError
|
|
382
374
|
# Workaround for broken Ruby 2.5
|
|
383
375
|
# https://github.com/OpenNebula/one/issues/3229
|
|
@@ -387,7 +379,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
387
379
|
end
|
|
388
380
|
end
|
|
389
381
|
|
|
390
|
-
if
|
|
382
|
+
if rc != 0
|
|
391
383
|
error_lock.synchronize do
|
|
392
384
|
host_errors << host['NAME']
|
|
393
385
|
end
|
|
@@ -692,14 +684,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
692
684
|
end
|
|
693
685
|
|
|
694
686
|
if numa_nodes && !numa_nodes.empty?
|
|
695
|
-
|
|
696
|
-
monitoring_numa =
|
|
697
|
-
host.to_hash['HOST']['MONITORING']['NUMA_NODE']
|
|
698
|
-
rescue StandardError
|
|
699
|
-
monitoring_numa = nil
|
|
700
|
-
end
|
|
701
|
-
|
|
702
|
-
print_numa_nodes(numa_nodes, monitoring_numa)
|
|
687
|
+
print_numa_nodes(numa_nodes)
|
|
703
688
|
end
|
|
704
689
|
|
|
705
690
|
puts
|
|
@@ -784,34 +769,14 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
784
769
|
table.show(pcis)
|
|
785
770
|
end
|
|
786
771
|
|
|
787
|
-
def print_numa_nodes(numa_nodes
|
|
772
|
+
def print_numa_nodes(numa_nodes)
|
|
788
773
|
numa_nodes = get_numa_data(numa_nodes)
|
|
789
774
|
|
|
790
|
-
merge_numa_monitoring(numa_nodes, monitoring)
|
|
791
|
-
|
|
792
775
|
print_numa_cores(numa_nodes)
|
|
793
776
|
print_numa_memory(numa_nodes)
|
|
794
777
|
print_numa_hugepages(numa_nodes)
|
|
795
778
|
end
|
|
796
779
|
|
|
797
|
-
def merge_numa_monitoring(numa_nodes, monitoring)
|
|
798
|
-
return if monitoring.nil?
|
|
799
|
-
|
|
800
|
-
monitoring = [monitoring] if monitoring.class == Hash
|
|
801
|
-
|
|
802
|
-
numa_nodes.each do |node|
|
|
803
|
-
mon_node = monitoring.find {|x| x['NODE_ID'] == node['NODE_ID'] }
|
|
804
|
-
|
|
805
|
-
node['MEMORY']['FREE'] = mon_node['MEMORY']['FREE']
|
|
806
|
-
node['MEMORY']['USED'] = mon_node['MEMORY']['USED']
|
|
807
|
-
|
|
808
|
-
node['HUGEPAGE'].each do |hp|
|
|
809
|
-
mon_hp = mon_node['HUGEPAGE'].find {|x| x['SIZE'] == hp['SIZE'] }
|
|
810
|
-
hp['FREE'] = mon_hp['FREE']
|
|
811
|
-
end
|
|
812
|
-
end
|
|
813
|
-
end
|
|
814
|
-
|
|
815
780
|
def get_numa_data(numa_nodes)
|
|
816
781
|
numa_nodes = [numa_nodes] if numa_nodes.class == Hash
|
|
817
782
|
|
|
@@ -921,11 +886,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
921
886
|
end
|
|
922
887
|
|
|
923
888
|
column :USED_REAL, 'Used memory', :size => 20, :left => true do |d|
|
|
924
|
-
|
|
925
|
-
'-'
|
|
926
|
-
else
|
|
927
|
-
OpenNebulaHelper.unit_to_str(d['MEMORY']['USED'].to_i, {})
|
|
928
|
-
end
|
|
889
|
+
OpenNebulaHelper.unit_to_str(d['MEMORY']['USED'].to_i, {})
|
|
929
890
|
end
|
|
930
891
|
|
|
931
892
|
column :USED_ALLOCATED, 'U memory',
|
|
@@ -934,11 +895,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
934
895
|
end
|
|
935
896
|
|
|
936
897
|
column :FREE, 'Free memory', :size => 8, :left => true do |d|
|
|
937
|
-
|
|
938
|
-
'-'
|
|
939
|
-
else
|
|
940
|
-
OpenNebulaHelper.unit_to_str(d['MEMORY']['FREE'].to_i, {})
|
|
941
|
-
end
|
|
898
|
+
OpenNebulaHelper.unit_to_str(d['MEMORY']['FREE'].to_i, {})
|
|
942
899
|
end
|
|
943
900
|
|
|
944
901
|
default :NODE_ID, :TOTAL, :USED_REAL, :USED_ALLOCATED, :FREE
|
|
@@ -976,7 +933,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
976
933
|
end
|
|
977
934
|
|
|
978
935
|
column :FREE, 'Free pages', :size => 8, :left => true do |d|
|
|
979
|
-
d['HUGEPAGE']['FREE']
|
|
936
|
+
d['HUGEPAGE']['FREE']
|
|
980
937
|
end
|
|
981
938
|
|
|
982
939
|
column :USED, 'allocated pages', :size => 8, :left => true do |d|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -348,18 +348,36 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
348
348
|
CLIHelper.print_header(str_h1 % 'IMAGE TEMPLATE', false)
|
|
349
349
|
puts image.template_str
|
|
350
350
|
|
|
351
|
-
puts
|
|
352
|
-
CLIHelper.print_header('VIRTUAL MACHINES', false)
|
|
353
|
-
puts
|
|
354
|
-
|
|
355
351
|
vms=image.retrieve_elements('VMS/ID')
|
|
356
352
|
|
|
357
353
|
return unless vms
|
|
358
354
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
355
|
+
if image.type_str.casecmp('backup').zero?
|
|
356
|
+
CLIHelper.print_header(str_h1 % 'BACKUP INFORMATION', false)
|
|
357
|
+
puts format(str, 'VM', vms[0])
|
|
358
|
+
|
|
359
|
+
if image.has_elements?('/IMAGE/BACKUP_INCREMENTS/INCREMENT')
|
|
360
|
+
puts format(str, 'TYPE', 'INCREMENTAL')
|
|
361
|
+
|
|
362
|
+
puts
|
|
363
|
+
|
|
364
|
+
CLIHelper.print_header('BACKUP INCREMENTS', false)
|
|
365
|
+
format_backup_increments(image)
|
|
366
|
+
else
|
|
367
|
+
puts format(str, 'TYPE', 'FULL')
|
|
368
|
+
end
|
|
369
|
+
else
|
|
370
|
+
puts
|
|
371
|
+
CLIHelper.print_header('VIRTUAL MACHINES', false)
|
|
372
|
+
puts
|
|
373
|
+
|
|
374
|
+
vms.map! {|e| e.to_i }
|
|
375
|
+
onevm_helper=OneVMHelper.new
|
|
376
|
+
onevm_helper.client=@client
|
|
377
|
+
onevm_helper.list_pool({ :ids=>vms, :no_pager => true },
|
|
378
|
+
false)
|
|
379
|
+
|
|
380
|
+
end
|
|
363
381
|
end
|
|
364
382
|
|
|
365
383
|
def format_snapshots(image)
|
|
@@ -412,6 +430,49 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
412
430
|
table.show(image_snapshots)
|
|
413
431
|
end
|
|
414
432
|
|
|
433
|
+
def format_backup_increments(image)
|
|
434
|
+
table=CLIHelper::ShowTable.new(nil, self) do
|
|
435
|
+
column :ID, 'Increment ID', :size=>3 do |d|
|
|
436
|
+
d['ID']
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
column :PID, 'Parent increment ID', :size=>3 do |d|
|
|
440
|
+
d['PARENT_ID']
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
column :TYPE, 'T', :size=>1 do |d|
|
|
444
|
+
d['TYPE'][0]
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
column :SIZE, '', :left, :size=>8 do |d|
|
|
448
|
+
if d['SIZE']
|
|
449
|
+
OpenNebulaHelper.unit_to_str(
|
|
450
|
+
d['SIZE'].to_i,
|
|
451
|
+
{},
|
|
452
|
+
'M'
|
|
453
|
+
)
|
|
454
|
+
else
|
|
455
|
+
'-'
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
column :DATE, 'Creation date', :size=>15 do |d|
|
|
460
|
+
OpenNebulaHelper.time_to_str(d['DATE'])
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
column :SOURCE, 'Backup source', :left, :size=>37 do |d|
|
|
464
|
+
d['SOURCE']
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
default :ID, :PID, :TYPE, :SIZE, :DATE, :SOURCE
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
ihash = image.to_hash
|
|
471
|
+
increments = [ihash['IMAGE']['BACKUP_INCREMENTS']['INCREMENT']].flatten
|
|
472
|
+
|
|
473
|
+
table.show(increments)
|
|
474
|
+
end
|
|
475
|
+
|
|
415
476
|
class << self
|
|
416
477
|
|
|
417
478
|
def create_image_variables(options, name)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -117,7 +117,21 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
117
117
|
:large => '--schedule TIME',
|
|
118
118
|
:description => 'Schedules this action to be executed after' \
|
|
119
119
|
'the given time. For example: onevm resume 0 --schedule "09/23 14:15"',
|
|
120
|
-
:format =>
|
|
120
|
+
:format => String,
|
|
121
|
+
:proc => lambda {|o, options|
|
|
122
|
+
if o[0] == '+'
|
|
123
|
+
options[:schedule] = o
|
|
124
|
+
elsif o == 'now'
|
|
125
|
+
options[:schedule] = Time.now.to_i
|
|
126
|
+
else
|
|
127
|
+
begin
|
|
128
|
+
options[:schedule] = Time.parse(o).to_i
|
|
129
|
+
rescue StandardError
|
|
130
|
+
STDERR.puts "Error parsing time spec: #{o}"
|
|
131
|
+
exit(-1)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
}
|
|
121
135
|
}
|
|
122
136
|
|
|
123
137
|
WEEKLY = {
|
|
@@ -408,10 +422,13 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
408
422
|
# Verbose by default
|
|
409
423
|
options[:verbose] = true
|
|
410
424
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
425
|
+
message = if options[:schedule].class == Integer
|
|
426
|
+
"#{action} scheduled at #{Time.at(options[:schedule])}"
|
|
427
|
+
else
|
|
428
|
+
"#{action} scheduled after #{options[:schedule]}s from start"
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
perform_actions( ids, options, message) do |vm|
|
|
415
432
|
|
|
416
433
|
str_periodic = ''
|
|
417
434
|
|
|
@@ -440,20 +457,11 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
440
457
|
str_periodic << ', END_TYPE = 0'
|
|
441
458
|
end
|
|
442
459
|
|
|
443
|
-
sched = options[:schedule]
|
|
444
|
-
|
|
445
|
-
# If the action is set to be executed from VM start to an specific
|
|
446
|
-
# amount of time later, we should preserve the + symbol
|
|
447
|
-
if ((sched.is_a? String) && !sched.include?('+')) ||
|
|
448
|
-
!(sched.is_a? String)
|
|
449
|
-
sched = sched.to_i
|
|
450
|
-
end
|
|
451
|
-
|
|
452
460
|
tmp_str = "SCHED_ACTION = ["
|
|
453
461
|
tmp_str << "ACTION = #{action}, "
|
|
454
462
|
tmp_str << "WARNING = #{warning}," if warning
|
|
455
463
|
tmp_str << "ARGS = \"#{options[:args]}\"," if options[:args]
|
|
456
|
-
tmp_str << "TIME = #{
|
|
464
|
+
tmp_str << "TIME = #{options[:schedule]}"
|
|
457
465
|
tmp_str << str_periodic << ']'
|
|
458
466
|
|
|
459
467
|
vm.sched_action_add(tmp_str)
|
|
@@ -1342,42 +1350,31 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1342
1350
|
end
|
|
1343
1351
|
str_end unless d.nil?
|
|
1344
1352
|
end
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
column :MESSAGE, '', :size => 35 do |d|
|
|
1352
|
-
d['MESSAGE'] ? d['MESSAGE'] : '-'
|
|
1353
|
-
end
|
|
1354
|
-
|
|
1355
|
-
column :CHARTER, '', :left, :adjust, :size => 15 do |d|
|
|
1356
|
-
t1 = Time.now
|
|
1357
|
-
t2 = d['TIME'].to_i
|
|
1358
|
-
t2 += vm['STIME'].to_i unless d['TIME'] =~ /^[0-9].*/
|
|
1359
|
-
|
|
1360
|
-
t2 = Time.at(t2)
|
|
1361
|
-
|
|
1362
|
-
days = ((t2 - t1) / (24 * 3600)).round(2)
|
|
1363
|
-
hours = ((t2 - t1) / 3600).round(2)
|
|
1364
|
-
minutes = ((t2 - t1) / 60).round(2)
|
|
1365
|
-
|
|
1366
|
-
if days > 1
|
|
1367
|
-
show = "In #{days} days"
|
|
1368
|
-
elsif days <= 1 && hours > 1
|
|
1369
|
-
show = "In #{hours} hours"
|
|
1370
|
-
elsif minutes > 0
|
|
1371
|
-
show = "In #{minutes} minutes"
|
|
1353
|
+
column :STATUS, '', :left, :size => 50 do |d|
|
|
1354
|
+
if d['DONE'] && !d['REPEAT']
|
|
1355
|
+
"Done on #{OpenNebulaHelper.time_to_str(d['DONE'], false)}"
|
|
1356
|
+
elsif d['MESSAGE']
|
|
1357
|
+
"Error! #{d['MESSAGE']}"
|
|
1372
1358
|
else
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1359
|
+
t1 = Time.now
|
|
1360
|
+
t2 = d['TIME'].to_i
|
|
1361
|
+
t2 += vm['STIME'].to_i unless d['TIME'] =~ /^[0-9].*/
|
|
1362
|
+
|
|
1363
|
+
t2 = Time.at(t2)
|
|
1364
|
+
|
|
1365
|
+
days = ((t2 - t1) / (24 * 3600)).round(2)
|
|
1366
|
+
hours = ((t2 - t1) / 3600).round(2)
|
|
1367
|
+
minutes = ((t2 - t1) / 60).round(2)
|
|
1368
|
+
|
|
1369
|
+
if days > 1
|
|
1370
|
+
"Next in #{days} days"
|
|
1371
|
+
elsif days <= 1 && hours > 1
|
|
1372
|
+
"Next in #{hours} hours"
|
|
1373
|
+
elsif minutes > 0
|
|
1374
|
+
"Next in #{minutes} minutes"
|
|
1375
|
+
else
|
|
1376
|
+
"Overdue!"
|
|
1377
|
+
end
|
|
1381
1378
|
end
|
|
1382
1379
|
end
|
|
1383
1380
|
end.show([vm_hash['VM']['TEMPLATE']['SCHED_ACTION']].flatten,
|
|
@@ -1388,6 +1385,8 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1388
1385
|
vm.delete_element('/VM/TEMPLATE/SCHED_ACTION')
|
|
1389
1386
|
end
|
|
1390
1387
|
|
|
1388
|
+
print_backups(vm, vm_hash)
|
|
1389
|
+
|
|
1391
1390
|
if vm.has_elements?('/VM/USER_TEMPLATE')
|
|
1392
1391
|
puts
|
|
1393
1392
|
|
|
@@ -1421,6 +1420,23 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1421
1420
|
puts vm.template_str
|
|
1422
1421
|
end
|
|
1423
1422
|
|
|
1423
|
+
def print_backups(vm, vm_hash)
|
|
1424
|
+
if vm.has_elements?('/VM/BACKUPS/BACKUP_CONFIG')
|
|
1425
|
+
puts
|
|
1426
|
+
CLIHelper.print_header('%-80s' % 'BACKUP CONFIGURATION', false)
|
|
1427
|
+
puts vm.template_like_str('BACKUPS/BACKUP_CONFIG')
|
|
1428
|
+
end
|
|
1429
|
+
|
|
1430
|
+
if vm.has_elements?('/VM/BACKUPS/BACKUP_IDS')
|
|
1431
|
+
puts
|
|
1432
|
+
CLIHelper.print_header('%-80s' % 'VM BACKUPS', false)
|
|
1433
|
+
|
|
1434
|
+
ids = [vm_hash['VM']['BACKUPS']['BACKUP_IDS']['ID']].flatten
|
|
1435
|
+
|
|
1436
|
+
puts format('IMAGE IDS: %s', ids.join(','))
|
|
1437
|
+
end
|
|
1438
|
+
end
|
|
1439
|
+
|
|
1424
1440
|
def print_numa_nodes(numa_nodes)
|
|
1425
1441
|
puts
|
|
1426
1442
|
CLIHelper.print_header('NUMA NODES', false)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -186,8 +186,32 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
|
186
186
|
d['USED_LEASES']
|
|
187
187
|
end
|
|
188
188
|
|
|
189
|
+
column :UPDATED, 'Number of VMs with updated VN attributes', :size=>4 do |d|
|
|
190
|
+
if d['UPDATED_VMS']['ID'].nil?
|
|
191
|
+
'0'
|
|
192
|
+
else
|
|
193
|
+
[d['UPDATED_VMS']['ID']].flatten.size
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
column :OUTDATED, 'Number of VMs with outdated VN attributes', :size=>4 do |d|
|
|
198
|
+
if d['OUTDATED_VMS']['ID'].nil?
|
|
199
|
+
'0'
|
|
200
|
+
else
|
|
201
|
+
[d['OUTDATED_VMS']['ID']].flatten.size
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
column :ERROR, 'Number of VMs that failed to update VN attributes', :size=>4 do |d|
|
|
206
|
+
if d['ERROR_VMS']['ID'].nil?
|
|
207
|
+
'0'
|
|
208
|
+
else
|
|
209
|
+
[d['ERROR_VMS']['ID']].flatten.size
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
189
213
|
default :ID, :USER, :GROUP, :NAME, :CLUSTERS, :BRIDGE, :STATE,
|
|
190
|
-
:LEASES
|
|
214
|
+
:LEASES, :OUTDATED, :ERROR
|
|
191
215
|
end
|
|
192
216
|
end
|
|
193
217
|
|
|
@@ -474,6 +498,16 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
|
474
498
|
puts format('%-15s', id)
|
|
475
499
|
end
|
|
476
500
|
|
|
501
|
+
puts
|
|
502
|
+
|
|
503
|
+
CLIHelper.print_header(str_h1 % 'VIRTUAL MACHINES', false)
|
|
504
|
+
|
|
505
|
+
updated, outdated, error = vn.vm_ids
|
|
506
|
+
|
|
507
|
+
puts format(str, 'UPDATED', updated.join(','))
|
|
508
|
+
puts format(str, 'OUTDATED', outdated.join(','))
|
|
509
|
+
puts format(str, 'ERROR', error.join(','))
|
|
510
|
+
|
|
477
511
|
return unless options[:show_ar]
|
|
478
512
|
|
|
479
513
|
ar_list.each do |ar_id|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
data/lib/one_helper.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2022, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -30,7 +30,7 @@ include OpenNebula
|
|
|
30
30
|
module OpenNebulaHelper
|
|
31
31
|
ONE_VERSION=<<-EOT
|
|
32
32
|
OpenNebula #{OpenNebula::VERSION}
|
|
33
|
-
Copyright 2002-
|
|
33
|
+
Copyright 2002-2022, OpenNebula Project, OpenNebula Systems
|
|
34
34
|
EOT
|
|
35
35
|
|
|
36
36
|
if ONE_LOCATION
|
|
@@ -424,7 +424,7 @@ EOT
|
|
|
424
424
|
FORCE={
|
|
425
425
|
:name => 'force',
|
|
426
426
|
:large => '--force',
|
|
427
|
-
:description => '
|
|
427
|
+
:description => 'Ignore errors (if possible)'
|
|
428
428
|
}
|
|
429
429
|
|
|
430
430
|
EXTENDED={
|
data/share/schemas/xsd/acct.xsd
CHANGED
|
@@ -170,6 +170,34 @@
|
|
|
170
170
|
</xs:sequence>
|
|
171
171
|
</xs:complexType>
|
|
172
172
|
</xs:element>
|
|
173
|
+
<xs:element name="BACKUPS">
|
|
174
|
+
<xs:complexType>
|
|
175
|
+
<xs:sequence>
|
|
176
|
+
<xs:element name="BACKUP_CONFIG" minOccurs="1" maxOccurs="1">
|
|
177
|
+
<xs:complexType>
|
|
178
|
+
<xs:sequence>
|
|
179
|
+
<xs:element name="BACKUP_VOLATILE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
180
|
+
<xs:element name="FS_FREEZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
181
|
+
<xs:element name="INCREMENTAL_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
182
|
+
<xs:element name="KEEP_LAST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
183
|
+
<xs:element name="LAST_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
184
|
+
<xs:element name="LAST_BACKUP_SIZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
185
|
+
<xs:element name="LAST_DATASTORE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
186
|
+
<xs:element name="LAST_INCREMENT_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
187
|
+
<xs:element name="MODE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
188
|
+
</xs:sequence>
|
|
189
|
+
</xs:complexType>
|
|
190
|
+
</xs:element>
|
|
191
|
+
<xs:element name="BACKUP_IDS" minOccurs="1" maxOccurs="1">
|
|
192
|
+
<xs:complexType>
|
|
193
|
+
<xs:sequence>
|
|
194
|
+
<xs:element name="ID" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
|
|
195
|
+
</xs:sequence>
|
|
196
|
+
</xs:complexType>
|
|
197
|
+
</xs:element>
|
|
198
|
+
</xs:sequence>
|
|
199
|
+
</xs:complexType>
|
|
200
|
+
</xs:element>
|
|
173
201
|
</xs:sequence>
|
|
174
202
|
</xs:complexType>
|
|
175
203
|
</xs:element>
|
|
@@ -10,15 +10,19 @@
|
|
|
10
10
|
<xs:restriction base="xs:string">
|
|
11
11
|
<xs:enumeration value="VM"/>
|
|
12
12
|
<xs:enumeration value="HOST"/>
|
|
13
|
+
<xs:enumeration value="IMAGE"/>
|
|
14
|
+
<xs:enumeration value="VNET"/>
|
|
13
15
|
</xs:restriction>
|
|
14
16
|
</xs:simpleType>
|
|
15
17
|
</xs:element>
|
|
16
18
|
<xs:element name="STATE" type="xs:string"/>
|
|
17
19
|
<xs:element name="LCM_STATE" type="xs:string" maxOccurs="1" minOccurs="0"/>
|
|
18
20
|
<xs:element name="REMOTE_HOST" type="xs:string" maxOccurs="1" minOccurs="0"/>
|
|
19
|
-
<!-- The template of the resource (VM or
|
|
21
|
+
<!-- The template of the resource (VM, Host, Image or VNet) is included here -->
|
|
20
22
|
<xs:element ref="HOST" maxOccurs="1" minOccurs="0"/>
|
|
21
23
|
<xs:element ref="VM" maxOccurs="1" minOccurs="0"/>
|
|
24
|
+
<xs:element ref="IMAGE" maxOccurs="1" minOccurs="0"/>
|
|
25
|
+
<xs:element ref="VNET" maxOccurs="1" minOccurs="0"/>
|
|
22
26
|
</xs:sequence>
|
|
23
27
|
</xs:complexType>
|
|
24
28
|
</xs:element>
|