opennebula-cli 6.4.7 → 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 +2 -2
- data/bin/oneacl +1 -1
- data/bin/onecluster +1 -1
- data/bin/onedatastore +1 -1
- data/bin/oneflow +2 -3
- 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 +2 -2
- data/bin/onetemplate +1 -1
- data/bin/oneuser +4 -4
- data/bin/onevcenter +2 -2
- data/bin/onevdc +1 -1
- data/bin/onevm +146 -161
- data/bin/onevmgroup +1 -1
- data/bin/onevnet +16 -4
- data/bin/onevntemplate +1 -1
- data/bin/onevrouter +1 -1
- data/bin/onezone +6 -2
- 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 -60
- 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 -57
- 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 +7 -8
- data/share/schemas/xsd/acct.xsd +28 -0
- data/share/schemas/xsd/hook_message_state.xsd +5 -1
- data/share/schemas/xsd/host.xsd +5 -38
- 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 +26 -26
|
@@ -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 #
|
|
@@ -297,7 +297,7 @@ class OneFlowHelper < OpenNebulaHelper::OneHelper
|
|
|
297
297
|
|
|
298
298
|
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
|
299
299
|
|
|
300
|
-
[
|
|
300
|
+
%w[OWNER GROUP OTHER].each do |e|
|
|
301
301
|
mask = '---'
|
|
302
302
|
permissions_hash = document['PERMISSIONS']
|
|
303
303
|
mask[0] = 'u' if permissions_hash["#{e}_U"] == '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 #
|
|
@@ -157,7 +157,7 @@ class OneFlowTemplateHelper < OpenNebulaHelper::OneHelper
|
|
|
157
157
|
|
|
158
158
|
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
|
159
159
|
|
|
160
|
-
[
|
|
160
|
+
%w[OWNER GROUP OTHER].each do |e|
|
|
161
161
|
mask = '---'
|
|
162
162
|
permissions_hash = document['PERMISSIONS']
|
|
163
163
|
mask[0] = 'u' if permissions_hash["#{e}_U"] == '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 #
|
|
@@ -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,36 +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
|
-
next if mon_node.nil?
|
|
806
|
-
|
|
807
|
-
node['MEMORY']['FREE'] = mon_node['MEMORY']['FREE']
|
|
808
|
-
node['MEMORY']['USED'] = mon_node['MEMORY']['USED']
|
|
809
|
-
|
|
810
|
-
node['HUGEPAGE'].each do |hp|
|
|
811
|
-
mon_hp = mon_node['HUGEPAGE'].find {|x| x['SIZE'] == hp['SIZE'] }
|
|
812
|
-
hp['FREE'] = mon_hp['FREE']
|
|
813
|
-
end
|
|
814
|
-
end
|
|
815
|
-
end
|
|
816
|
-
|
|
817
780
|
def get_numa_data(numa_nodes)
|
|
818
781
|
numa_nodes = [numa_nodes] if numa_nodes.class == Hash
|
|
819
782
|
|
|
@@ -923,11 +886,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
923
886
|
end
|
|
924
887
|
|
|
925
888
|
column :USED_REAL, 'Used memory', :size => 20, :left => true do |d|
|
|
926
|
-
|
|
927
|
-
'-'
|
|
928
|
-
else
|
|
929
|
-
OpenNebulaHelper.unit_to_str(d['MEMORY']['USED'].to_i, {})
|
|
930
|
-
end
|
|
889
|
+
OpenNebulaHelper.unit_to_str(d['MEMORY']['USED'].to_i, {})
|
|
931
890
|
end
|
|
932
891
|
|
|
933
892
|
column :USED_ALLOCATED, 'U memory',
|
|
@@ -936,11 +895,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
936
895
|
end
|
|
937
896
|
|
|
938
897
|
column :FREE, 'Free memory', :size => 8, :left => true do |d|
|
|
939
|
-
|
|
940
|
-
'-'
|
|
941
|
-
else
|
|
942
|
-
OpenNebulaHelper.unit_to_str(d['MEMORY']['FREE'].to_i, {})
|
|
943
|
-
end
|
|
898
|
+
OpenNebulaHelper.unit_to_str(d['MEMORY']['FREE'].to_i, {})
|
|
944
899
|
end
|
|
945
900
|
|
|
946
901
|
default :NODE_ID, :TOTAL, :USED_REAL, :USED_ALLOCATED, :FREE
|
|
@@ -978,7 +933,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
978
933
|
end
|
|
979
934
|
|
|
980
935
|
column :FREE, 'Free pages', :size => 8, :left => true do |d|
|
|
981
|
-
d['HUGEPAGE']['FREE']
|
|
936
|
+
d['HUGEPAGE']['FREE']
|
|
982
937
|
end
|
|
983
938
|
|
|
984
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,28 +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
|
-
STDERR.puts rc.message
|
|
463
|
-
return -1
|
|
464
|
-
end
|
|
467
|
+
vm.sched_action_add(tmp_str)
|
|
465
468
|
end
|
|
466
469
|
end
|
|
467
470
|
|
|
@@ -1347,42 +1350,31 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1347
1350
|
end
|
|
1348
1351
|
str_end unless d.nil?
|
|
1349
1352
|
end
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
column :MESSAGE, '', :size => 35 do |d|
|
|
1357
|
-
d['MESSAGE'] ? d['MESSAGE'] : '-'
|
|
1358
|
-
end
|
|
1359
|
-
|
|
1360
|
-
column :CHARTER, '', :left, :adjust, :size => 15 do |d|
|
|
1361
|
-
t1 = Time.now
|
|
1362
|
-
t2 = d['TIME'].to_i
|
|
1363
|
-
t2 += vm['STIME'].to_i unless d['TIME'] =~ /^[0-9].*/
|
|
1364
|
-
|
|
1365
|
-
t2 = Time.at(t2)
|
|
1366
|
-
|
|
1367
|
-
days = ((t2 - t1) / (24 * 3600)).round(2)
|
|
1368
|
-
hours = ((t2 - t1) / 3600).round(2)
|
|
1369
|
-
minutes = ((t2 - t1) / 60).round(2)
|
|
1370
|
-
|
|
1371
|
-
if days > 1
|
|
1372
|
-
show = "In #{days} days"
|
|
1373
|
-
elsif days <= 1 && hours > 1
|
|
1374
|
-
show = "In #{hours} hours"
|
|
1375
|
-
elsif minutes > 0
|
|
1376
|
-
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']}"
|
|
1377
1358
|
else
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
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
|
|
1386
1378
|
end
|
|
1387
1379
|
end
|
|
1388
1380
|
end.show([vm_hash['VM']['TEMPLATE']['SCHED_ACTION']].flatten,
|
|
@@ -1393,6 +1385,8 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1393
1385
|
vm.delete_element('/VM/TEMPLATE/SCHED_ACTION')
|
|
1394
1386
|
end
|
|
1395
1387
|
|
|
1388
|
+
print_backups(vm, vm_hash)
|
|
1389
|
+
|
|
1396
1390
|
if vm.has_elements?('/VM/USER_TEMPLATE')
|
|
1397
1391
|
puts
|
|
1398
1392
|
|
|
@@ -1426,6 +1420,23 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
|
1426
1420
|
puts vm.template_str
|
|
1427
1421
|
end
|
|
1428
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
|
+
|
|
1429
1440
|
def print_numa_nodes(numa_nodes)
|
|
1430
1441
|
puts
|
|
1431
1442
|
CLIHelper.print_header('NUMA NODES', false)
|