opennebula 6.0.0.1 → 6.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/CommandManager.rb +13 -16
- data/lib/DriverExecHelper.rb +12 -22
- data/lib/cloud/CloudClient.rb +1 -1
- data/lib/datacenter.rb +71 -35
- data/lib/distributed_firewall.rb +17 -4
- data/lib/file_helper.rb +4 -0
- data/lib/host.rb +4 -4
- data/lib/models/service.rb +46 -4
- data/lib/network.rb +7 -1
- data/lib/nsx_client.rb +17 -4
- data/lib/nsx_constants.rb +18 -5
- data/lib/nsx_driver.rb +15 -2
- data/lib/nsx_rule.rb +17 -4
- data/lib/nsxt_client.rb +17 -4
- data/lib/nsxv_client.rb +17 -4
- data/lib/opennebula.rb +1 -1
- data/lib/opennebula/flow/service_template.rb +12 -2
- data/lib/opennebula/marketplace.rb +30 -2
- data/lib/opennebula/virtual_machine_ext.rb +35 -17
- data/lib/opennebula/wait_ext.rb +92 -78
- data/lib/scripts_common.rb +1 -10
- data/lib/vcenter_driver.rb +14 -12
- data/lib/vcenter_importer.rb +2 -2
- data/lib/virtual_machine.rb +50 -10
- data/lib/vm_monitor.rb +0 -2
- data/lib/vm_template.rb +6 -3
- data/lib/vmm_importer.rb +8 -0
- metadata +5 -5
data/lib/scripts_common.rb
CHANGED
@@ -45,16 +45,7 @@ module OpenNebula
|
|
45
45
|
|
46
46
|
# This function is used to pass error message to the mad
|
47
47
|
def self.error_message(message)
|
48
|
-
STDERR.puts
|
49
|
-
end
|
50
|
-
|
51
|
-
#This function formats an error message for OpenNebula
|
52
|
-
def self.format_error_message(message)
|
53
|
-
error_str = "ERROR MESSAGE --8<------\n"
|
54
|
-
error_str << message
|
55
|
-
error_str << "\nERROR MESSAGE ------>8--"
|
56
|
-
|
57
|
-
return error_str
|
48
|
+
STDERR.puts message
|
58
49
|
end
|
59
50
|
|
60
51
|
def self.is_disk?(arg)
|
data/lib/vcenter_driver.rb
CHANGED
@@ -36,14 +36,25 @@ end
|
|
36
36
|
|
37
37
|
ENV['LANG'] = 'C'
|
38
38
|
|
39
|
+
# %%RUBYGEMS_SETUP_BEGIN%%
|
39
40
|
if File.directory?(GEMS_LOCATION)
|
40
41
|
real_gems_path = File.realpath(GEMS_LOCATION)
|
41
42
|
if !defined?(Gem) || Gem.path != [real_gems_path]
|
42
43
|
$LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
|
43
|
-
|
44
|
-
|
44
|
+
|
45
|
+
# Suppress warnings from Rubygems
|
46
|
+
# https://github.com/OpenNebula/one/issues/5379
|
47
|
+
begin
|
48
|
+
verb = $VERBOSE
|
49
|
+
$VERBOSE = nil
|
50
|
+
require 'rubygems'
|
51
|
+
Gem.use_paths(real_gems_path)
|
52
|
+
ensure
|
53
|
+
$VERBOSE = verb
|
54
|
+
end
|
45
55
|
end
|
46
56
|
end
|
57
|
+
# %%RUBYGEMS_SETUP_END%%
|
47
58
|
|
48
59
|
$LOAD_PATH << LIB_LOCATION + '/ruby/vendors/rbvmomi/lib'
|
49
60
|
$LOAD_PATH << LIB_LOCATION + '/ruby'
|
@@ -122,19 +133,10 @@ end
|
|
122
133
|
# Helper functions #
|
123
134
|
# ---------------------------------------------------------------------------- #
|
124
135
|
|
125
|
-
def error_message(message)
|
126
|
-
error_str = "ERROR MESSAGE --8<------\n"
|
127
|
-
error_str << message
|
128
|
-
error_str << "\nERROR MESSAGE ------>8--"
|
129
|
-
|
130
|
-
error_str
|
131
|
-
end
|
132
|
-
|
133
136
|
def check_valid(parameter, label)
|
134
137
|
return unless parameter.nil? || parameter.empty?
|
135
138
|
|
136
|
-
STDERR.puts
|
137
|
-
is required for this action.")
|
139
|
+
STDERR.puts "The parameter '#{label}' is required for this action."
|
138
140
|
exit(-1)
|
139
141
|
end
|
140
142
|
|
data/lib/vcenter_importer.rb
CHANGED
@@ -496,9 +496,9 @@ module VCenterDriver
|
|
496
496
|
end
|
497
497
|
|
498
498
|
#
|
499
|
-
# Create and allocate a
|
499
|
+
# Create and allocate a OpenNebula Object.
|
500
500
|
#
|
501
|
-
# @param info [String] Info passed to
|
501
|
+
# @param info [String] Info passed to OpenNebula Core.
|
502
502
|
#
|
503
503
|
# @return [&block] the allocated object through a block.
|
504
504
|
#
|
data/lib/virtual_machine.rb
CHANGED
@@ -33,14 +33,27 @@ module VCenterDriver
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
# rubocop: disable all
|
37
|
+
# %%RUBYGEMS_SETUP_BEGIN%%
|
38
|
+
if File.directory?(GEMS_LOCATION)
|
39
|
+
real_gems_path = File.realpath(GEMS_LOCATION)
|
40
|
+
if !defined?(Gem) || Gem.path != [real_gems_path]
|
41
|
+
$LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
|
42
|
+
|
43
|
+
# Suppress warnings from Rubygems
|
44
|
+
# https://github.com/OpenNebula/one/issues/5379
|
45
|
+
begin
|
46
|
+
verb = $VERBOSE
|
47
|
+
$VERBOSE = nil
|
40
48
|
require 'rubygems'
|
41
49
|
Gem.use_paths(real_gems_path)
|
50
|
+
ensure
|
51
|
+
$VERBOSE = verb
|
42
52
|
end
|
43
53
|
end
|
54
|
+
end
|
55
|
+
# %%RUBYGEMS_SETUP_END%%
|
56
|
+
# rubocop: enable all
|
44
57
|
|
45
58
|
$LOAD_PATH << RUBY_LIB_LOCATION
|
46
59
|
|
@@ -1041,7 +1054,8 @@ module VCenterDriver
|
|
1041
1054
|
else
|
1042
1055
|
if snapshots?
|
1043
1056
|
error = 'Disk metadata not present and snapshots exist. ' \
|
1044
|
-
'
|
1057
|
+
'Please remove imported VM with "onevm recover ' \
|
1058
|
+
'--delete-db".'
|
1045
1059
|
raise error
|
1046
1060
|
end
|
1047
1061
|
|
@@ -2401,6 +2415,15 @@ module VCenterDriver
|
|
2401
2415
|
|
2402
2416
|
# Attach DISK to VM (hotplug)
|
2403
2417
|
def attach_disk(disk)
|
2418
|
+
# Adding a new disk in newer vSphere versions
|
2419
|
+
# automatically cleans all system snapshots
|
2420
|
+
# https://github.com/OpenNebula/one/issues/5409
|
2421
|
+
if snapshots? || one_snapshots?
|
2422
|
+
error_msg = 'Existing system snapshots, cannot change disks. '
|
2423
|
+
error_msg << 'Please remove all snapshots and try again.'
|
2424
|
+
raise error_message
|
2425
|
+
end
|
2426
|
+
|
2404
2427
|
spec_hash = {}
|
2405
2428
|
device_change = []
|
2406
2429
|
|
@@ -2582,6 +2605,13 @@ module VCenterDriver
|
|
2582
2605
|
def detach_disk(disk)
|
2583
2606
|
return unless disk.exists?
|
2584
2607
|
|
2608
|
+
if snapshots? || one_snapshots?
|
2609
|
+
error_message = 'Existing system snapshots, cannot change '
|
2610
|
+
error_message << 'disks . Please remove all snapshots and '
|
2611
|
+
error_message << 'try again.'
|
2612
|
+
raise error_message
|
2613
|
+
end
|
2614
|
+
|
2585
2615
|
spec_hash = {}
|
2586
2616
|
spec_hash[:extraConfig] = [disk.config(:delete)]
|
2587
2617
|
spec_hash[:deviceChange] = [{
|
@@ -2611,15 +2641,15 @@ module VCenterDriver
|
|
2611
2641
|
# - The disk is managed by OpenNebula
|
2612
2642
|
detachable= !(one_vm['LCM_STATE'].to_i == 11 && !disk.managed?)
|
2613
2643
|
detachable &&= disk.exists?
|
2614
|
-
|
2644
|
+
|
2615
2645
|
return unless detachable
|
2616
2646
|
|
2617
2647
|
detach_disk(disk)
|
2618
2648
|
|
2619
2649
|
# Check if we want to keep the non persistent disk
|
2620
2650
|
keep_non_persistent_disks =
|
2621
|
-
VCenterDriver::CONFIG[:keep_non_persistent_disks]
|
2622
|
-
|
2651
|
+
VCenterDriver::CONFIG[:keep_non_persistent_disks]
|
2652
|
+
|
2623
2653
|
return if keep_non_persistent_disks == true
|
2624
2654
|
|
2625
2655
|
disk.destroy
|
@@ -2816,7 +2846,7 @@ module VCenterDriver
|
|
2816
2846
|
# Convert VM to template in vCenter
|
2817
2847
|
mark_as_template
|
2818
2848
|
|
2819
|
-
# Edit the
|
2849
|
+
# Edit the OpenNebula template
|
2820
2850
|
one_client = OpenNebula::Client.new
|
2821
2851
|
template_id = one_item['TEMPLATE/TEMPLATE_ID']
|
2822
2852
|
new_template = OpenNebula::Template.new_with_id(template_id,
|
@@ -2867,6 +2897,15 @@ module VCenterDriver
|
|
2867
2897
|
self['rootSnapshot'] && !self['rootSnapshot'].empty?
|
2868
2898
|
end
|
2869
2899
|
|
2900
|
+
def one_snapshots?
|
2901
|
+
begin
|
2902
|
+
!one_item['TEMPLATE/SNAPSHOT'].nil?
|
2903
|
+
rescue StandardError
|
2904
|
+
# one_item may not be retrieved if deploy_id hasn't been set
|
2905
|
+
false
|
2906
|
+
end
|
2907
|
+
end
|
2908
|
+
|
2870
2909
|
def instantiated_as_persistent?
|
2871
2910
|
begin
|
2872
2911
|
!one_item['TEMPLATE/CLONING_TEMPLATE_ID'].nil?
|
@@ -3032,7 +3071,8 @@ module VCenterDriver
|
|
3032
3071
|
# Create a snapshot for the VM
|
3033
3072
|
def create_snapshot(snap_id, snap_name)
|
3034
3073
|
memory_dumps = true
|
3035
|
-
memory_dumps = CONFIG[:memory_dumps]
|
3074
|
+
memory_dumps = CONFIG[:memory_dumps] \
|
3075
|
+
unless CONFIG[:memory_dumps].nil?
|
3036
3076
|
|
3037
3077
|
snapshot_hash = {
|
3038
3078
|
:name => snap_id,
|
data/lib/vm_monitor.rb
CHANGED
@@ -175,8 +175,6 @@ module VirtualMachineMonitor
|
|
175
175
|
@monitor[:diskwrbytes] = previous_diskwrbytes +
|
176
176
|
(write_kbpersec * 1024 * refresh_rate).to_i
|
177
177
|
end
|
178
|
-
# rubocop:enable Naming/VariableName
|
179
|
-
# rubocop:enable Style/FormatStringToken
|
180
178
|
|
181
179
|
# Generates a OpenNebula IM Driver valid string with the monitor info
|
182
180
|
def info
|
data/lib/vm_template.rb
CHANGED
@@ -550,6 +550,10 @@ module VCenterDriver
|
|
550
550
|
net.ipConfig.ipAddress.each do |ip_config|
|
551
551
|
ip = IPAddr.new(ip_config.ipAddress)
|
552
552
|
|
553
|
+
if ip.ipv6? && get_ipv6_prefix(ip.to_s, 10) == 'fe80'
|
554
|
+
next
|
555
|
+
end
|
556
|
+
|
553
557
|
if force
|
554
558
|
ipv4 = ip.to_s if ip.ipv4?
|
555
559
|
ipv6 = ip.to_s if ip.ipv6?
|
@@ -1573,9 +1577,8 @@ module VCenterDriver
|
|
1573
1577
|
str << "]\n"
|
1574
1578
|
|
1575
1579
|
if annotation.nil? || annotation.empty?
|
1576
|
-
str << 'DESCRIPTION = "vCenter Template \
|
1577
|
-
|
1578
|
-
" from Cluster #{ccr_name}\"\n"
|
1580
|
+
str << 'DESCRIPTION = "vCenter Template imported by OpenNebula'\
|
1581
|
+
" from Cluster #{ccr_name}\"\n"
|
1579
1582
|
else
|
1580
1583
|
notes = annotation.gsub('\\', '\\\\').gsub('"', '\\"')
|
1581
1584
|
str << "DESCRIPTION = \"#{notes}\"\n"
|
data/lib/vmm_importer.rb
CHANGED
@@ -54,6 +54,14 @@ module VCenterDriver
|
|
54
54
|
|
55
55
|
vc_vm = VCenterDriver::VirtualMachine.new_without_id(@vi_client,
|
56
56
|
vm_ref)
|
57
|
+
|
58
|
+
# Importing Wild VMs with snapshots is not supported
|
59
|
+
# https://github.com/OpenNebula/one/issues/1268
|
60
|
+
if vc_vm.snapshots? && vc_vm.disk_keys.empty?
|
61
|
+
raise 'Disk metadata not present and snapshots exist, '\
|
62
|
+
'cannot import this VM'
|
63
|
+
end
|
64
|
+
|
57
65
|
vname = vc_vm['name']
|
58
66
|
|
59
67
|
type = { :object => 'VM', :id => vname }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opennebula
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.3
|
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-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -126,7 +126,6 @@ files:
|
|
126
126
|
- lib/vcenter_importer.rb
|
127
127
|
- lib/vi_client.rb
|
128
128
|
- lib/vi_helper.rb
|
129
|
-
- lib/virtual_machine.rb
|
130
129
|
- lib/vm_device.rb
|
131
130
|
- lib/vm_disk.rb
|
132
131
|
- lib/vm_nic.rb
|
@@ -135,6 +134,7 @@ files:
|
|
135
134
|
- lib/vm_folder.rb
|
136
135
|
- lib/vm_template.rb
|
137
136
|
- lib/vmm_importer.rb
|
137
|
+
- lib/virtual_machine.rb
|
138
138
|
- lib/nsx_driver.rb
|
139
139
|
- lib/distributed_firewall.rb
|
140
140
|
- lib/logical_port.rb
|
@@ -164,8 +164,8 @@ files:
|
|
164
164
|
- lib/DriverExecHelper.rb
|
165
165
|
- lib/scripts_common.rb
|
166
166
|
- lib/models.rb
|
167
|
-
- lib/models/role.rb
|
168
167
|
- lib/models/service.rb
|
168
|
+
- lib/models/role.rb
|
169
169
|
- lib/opennebula/acl.rb
|
170
170
|
- lib/opennebula/acl_pool.rb
|
171
171
|
- lib/opennebula/client.rb
|
@@ -208,7 +208,6 @@ files:
|
|
208
208
|
- lib/opennebula/utils.rb
|
209
209
|
- lib/opennebula/vdc.rb
|
210
210
|
- lib/opennebula/vdc_pool.rb
|
211
|
-
- lib/opennebula/virtual_machine.rb
|
212
211
|
- lib/opennebula/virtual_machine_ext.rb
|
213
212
|
- lib/opennebula/virtual_machine_pool.rb
|
214
213
|
- lib/opennebula/virtual_network.rb
|
@@ -224,6 +223,7 @@ files:
|
|
224
223
|
- lib/opennebula/xml_pool.rb
|
225
224
|
- lib/opennebula/xml_utils.rb
|
226
225
|
- lib/opennebula/zone_pool.rb
|
226
|
+
- lib/opennebula/virtual_machine.rb
|
227
227
|
- lib/opennebula/zone.rb
|
228
228
|
- lib/opennebula/flow/grammar.rb
|
229
229
|
- lib/opennebula/flow/service_pool.rb
|