opennebula-cli 6.4.4 → 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 +2 -2
- 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 +3 -3
- data/bin/onevcenter +1 -1
- data/bin/onevdc +1 -1
- data/bin/onevm +142 -157
- 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 +20 -20
- 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 +2 -2
- data/lib/one_helper/oneflowtemplate_helper.rb +2 -2
- 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 +15 -58
- data/lib/one_helper/oneimage_helper.rb +73 -12
- data/lib/one_helper/onemarket_helper.rb +1 -1
- data/lib/one_helper/onemarketapp_helper.rb +3 -3
- 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 -2
- data/lib/one_helper/oneuser_helper.rb +1 -1
- data/lib/one_helper/onevcenter_helper.rb +7 -7
- data/lib/one_helper/onevdc_helper.rb +1 -1
- data/lib/one_helper/onevm_helper.rb +68 -56
- data/lib/one_helper/onevmgroup_helper.rb +1 -1
- data/lib/one_helper/onevnet_helper.rb +37 -3
- 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
|
|
@@ -468,10 +460,10 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
468
460
|
n_elems = options[:n_elems] || 8
|
|
469
461
|
|
|
470
462
|
# Different available size units
|
|
471
|
-
units = [
|
|
463
|
+
units = %w[K M G T]
|
|
472
464
|
|
|
473
465
|
# Attrs that need units conversion
|
|
474
|
-
attrs = [
|
|
466
|
+
attrs = %w[FREE_MEMORY USED_MEMORY]
|
|
475
467
|
|
|
476
468
|
if unit && !units.include?(unit)
|
|
477
469
|
STDERR.puts "Invalid unit `#{unit}`"
|
|
@@ -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 #
|
|
@@ -22,7 +22,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
22
22
|
|
|
23
23
|
# This list contains prefixes that should skip adding user home to the path
|
|
24
24
|
# This must have the same content as the case $FROM in downloader.sh
|
|
25
|
-
PREFIXES = [
|
|
25
|
+
PREFIXES = %w[http https ssh s3 rbd vcenter lxd docker dockerfile]
|
|
26
26
|
|
|
27
27
|
TEMPLATE_OPTIONS=[
|
|
28
28
|
{
|
|
@@ -67,7 +67,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
67
67
|
:format => String,
|
|
68
68
|
:proc => lambda do |o, _options|
|
|
69
69
|
prefix=o.strip.downcase
|
|
70
|
-
if [
|
|
70
|
+
if %w[hd sd xvd vd].include? prefix
|
|
71
71
|
[0, prefix]
|
|
72
72
|
else
|
|
73
73
|
[-1, 'The prefix must be hd, sd, xvd or vd']
|
|
@@ -328,7 +328,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
328
328
|
|
|
329
329
|
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
|
330
330
|
|
|
331
|
-
[
|
|
331
|
+
%w[OWNER GROUP OTHER].each do |e|
|
|
332
332
|
mask = '---'
|
|
333
333
|
mask[0] = 'u' if image["PERMISSIONS/#{e}_U"] == '1'
|
|
334
334
|
mask[1] = 'm' if image["PERMISSIONS/#{e}_M"] == '1'
|
|
@@ -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 #
|
|
@@ -60,7 +60,7 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
# Available market place mads to import apps on them
|
|
63
|
-
MARKETS = [
|
|
63
|
+
MARKETS = %w[http s3]
|
|
64
64
|
|
|
65
65
|
def self.rname
|
|
66
66
|
'MARKETPLACEAPP'
|
|
@@ -413,7 +413,7 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
|
413
413
|
|
|
414
414
|
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
|
415
415
|
|
|
416
|
-
[
|
|
416
|
+
%w[OWNER GROUP OTHER].each do |e|
|
|
417
417
|
mask = '---'
|
|
418
418
|
mask[0] = 'u' if app["PERMISSIONS/#{e}_U"] == '1'
|
|
419
419
|
mask[1] = 'm' if app["PERMISSIONS/#{e}_M"] == '1'
|
|
@@ -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 #
|
|
@@ -53,7 +53,6 @@ EOT
|
|
|
53
53
|
|
|
54
54
|
RECURSIVE={
|
|
55
55
|
:name => "recursive",
|
|
56
|
-
:short => "-R",
|
|
57
56
|
:large => "--recursive",
|
|
58
57
|
:description => "Applies the action to the template plus any "+
|
|
59
58
|
"image defined in DISK"
|
|
@@ -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 #
|
|
@@ -58,20 +58,20 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
|
|
|
58
58
|
#
|
|
59
59
|
TABLE = {
|
|
60
60
|
VOBJECT::DATASTORE => {
|
|
61
|
-
:struct => [
|
|
61
|
+
:struct => %w[DATASTORE_LIST DATASTORE],
|
|
62
62
|
:columns =>
|
|
63
63
|
{ :IMID => 5, :REF => 15, :NAME => 50, :CLUSTERS => 10 },
|
|
64
64
|
:cli => [:host],
|
|
65
65
|
:dialogue => ->(arg) {}
|
|
66
66
|
},
|
|
67
67
|
VOBJECT::TEMPLATE => {
|
|
68
|
-
:struct => [
|
|
68
|
+
:struct => %w[TEMPLATE_LIST TEMPLATE],
|
|
69
69
|
:columns => { :IMID => 5, :REF => 10, :NAME => 50 },
|
|
70
70
|
:cli => [:host],
|
|
71
71
|
:dialogue => ->(arg) { OneVcenterHelper.template_dialogue(arg) }
|
|
72
72
|
},
|
|
73
73
|
VOBJECT::NETWORK => {
|
|
74
|
-
:struct => [
|
|
74
|
+
:struct => %w[NETWORK_LIST NETWORK],
|
|
75
75
|
:columns => {
|
|
76
76
|
:IMID => 5,
|
|
77
77
|
:REF => 15,
|
|
@@ -82,13 +82,13 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
|
|
|
82
82
|
:dialogue => ->(arg) { OneVcenterHelper.network_dialogue(arg) }
|
|
83
83
|
},
|
|
84
84
|
VOBJECT::IMAGE => {
|
|
85
|
-
:struct => [
|
|
85
|
+
:struct => %w[IMAGE_LIST IMAGE],
|
|
86
86
|
:columns => { :IMID => 5, :REF => 35, :PATH => 60 },
|
|
87
87
|
:cli => [:host, :datastore],
|
|
88
88
|
:dialogue => ->(arg) {}
|
|
89
89
|
},
|
|
90
90
|
VOBJECT::HOST => {
|
|
91
|
-
:struct => [
|
|
91
|
+
:struct => %w[HOST_LIST HOST],
|
|
92
92
|
:columns => { :DATACENTER => 10, :NAME => 30, :REF => 35 },
|
|
93
93
|
:cli => [],
|
|
94
94
|
:dialogue => ->(arg) {}
|
|
@@ -471,7 +471,7 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
|
|
|
471
471
|
' do you want to create (IPv[4],IPv[6], [E]thernet)? '
|
|
472
472
|
type_answer = ask.call(question, 'ether')
|
|
473
473
|
|
|
474
|
-
supported_types = [
|
|
474
|
+
supported_types = %w[4 6 ether e ip4 ip6]
|
|
475
475
|
if !supported_types.include?(type_answer)
|
|
476
476
|
type_answer = 'e'
|
|
477
477
|
STDOUT.puts " Type [#{type_answer}] not supported,"\
|
|
@@ -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,27 +457,14 @@ 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
|
-
|
|
460
|
-
|
|
461
|
-
if OpenNebula.is_error?(rc)
|
|
462
|
-
return rc
|
|
463
|
-
end
|
|
467
|
+
vm.sched_action_add(tmp_str)
|
|
464
468
|
end
|
|
465
469
|
end
|
|
466
470
|
|
|
@@ -1346,42 +1350,31 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1346
1350
|
end
|
|
1347
1351
|
str_end unless d.nil?
|
|
1348
1352
|
end
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
column :MESSAGE, '', :size => 35 do |d|
|
|
1356
|
-
d['MESSAGE'] ? d['MESSAGE'] : '-'
|
|
1357
|
-
end
|
|
1358
|
-
|
|
1359
|
-
column :CHARTER, '', :left, :adjust, :size => 15 do |d|
|
|
1360
|
-
t1 = Time.now
|
|
1361
|
-
t2 = d['TIME'].to_i
|
|
1362
|
-
t2 += vm['STIME'].to_i unless d['TIME'] =~ /^[0-9].*/
|
|
1363
|
-
|
|
1364
|
-
t2 = Time.at(t2)
|
|
1365
|
-
|
|
1366
|
-
days = ((t2 - t1) / (24 * 3600)).round(2)
|
|
1367
|
-
hours = ((t2 - t1) / 3600).round(2)
|
|
1368
|
-
minutes = ((t2 - t1) / 60).round(2)
|
|
1369
|
-
|
|
1370
|
-
if days > 1
|
|
1371
|
-
show = "In #{days} days"
|
|
1372
|
-
elsif days <= 1 && hours > 1
|
|
1373
|
-
show = "In #{hours} hours"
|
|
1374
|
-
elsif minutes > 0
|
|
1375
|
-
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']}"
|
|
1376
1358
|
else
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
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
|
|
1385
1378
|
end
|
|
1386
1379
|
end
|
|
1387
1380
|
end.show([vm_hash['VM']['TEMPLATE']['SCHED_ACTION']].flatten,
|
|
@@ -1392,6 +1385,8 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1392
1385
|
vm.delete_element('/VM/TEMPLATE/SCHED_ACTION')
|
|
1393
1386
|
end
|
|
1394
1387
|
|
|
1388
|
+
print_backups(vm, vm_hash)
|
|
1389
|
+
|
|
1395
1390
|
if vm.has_elements?('/VM/USER_TEMPLATE')
|
|
1396
1391
|
puts
|
|
1397
1392
|
|
|
@@ -1425,6 +1420,23 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1425
1420
|
puts vm.template_str
|
|
1426
1421
|
end
|
|
1427
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
|
+
|
|
1428
1440
|
def print_numa_nodes(numa_nodes)
|
|
1429
1441
|
puts
|
|
1430
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 #
|