opennebula 6.0.1 → 6.1.90.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/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/datastore.rb +6 -2
- data/lib/distributed_firewall.rb +17 -4
- data/lib/file_helper.rb +4 -0
- data/lib/host.rb +4 -4
- data/lib/models/role.rb +13 -37
- data/lib/models/service.rb +70 -19
- 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/flow/service_template.rb +23 -5
- data/lib/opennebula/ldap_auth.rb +3 -1
- data/lib/opennebula/marketplace.rb +30 -2
- data/lib/opennebula/pool.rb +7 -5
- data/lib/opennebula/server_cipher_auth.rb +6 -3
- data/lib/opennebula/virtual_machine.rb +42 -8
- data/lib/opennebula/virtual_machine_ext.rb +35 -17
- data/lib/opennebula/wait_ext.rb +92 -78
- data/lib/opennebula/zone.rb +40 -1
- data/lib/opennebula.rb +1 -1
- data/lib/scripts_common.rb +1 -10
- data/lib/vcenter_driver.rb +14 -12
- data/lib/vcenter_importer.rb +5 -3
- data/lib/virtual_machine.rb +59 -12
- data/lib/vm_monitor.rb +0 -2
- data/lib/vm_template.rb +12 -6
- data/lib/vmm_importer.rb +8 -0
- metadata +5 -5
data/lib/opennebula/wait_ext.rb
CHANGED
@@ -14,107 +14,118 @@
|
|
14
14
|
# limitations under the License. #
|
15
15
|
#--------------------------------------------------------------------------- #
|
16
16
|
|
17
|
-
|
18
17
|
require 'opennebula/host'
|
19
18
|
require 'opennebula/image'
|
20
19
|
require 'opennebula/virtual_machine'
|
21
20
|
|
22
|
-
module OpenNebula
|
23
|
-
def wait_event(ctx, event, timeout)
|
24
|
-
subscriber = ctx.socket(ZMQ::SUB)
|
21
|
+
module OpenNebula
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
content = ''
|
23
|
+
# Module to wait OpenNebula objects events using ZMQ
|
24
|
+
module WaitExtEvent
|
29
25
|
|
30
|
-
|
31
|
-
|
32
|
-
subscriber.connect(@client.one_zmq)
|
26
|
+
def wait_event(ctx, event, timeout)
|
27
|
+
subscriber = ctx.socket(ZMQ::SUB)
|
33
28
|
|
34
|
-
|
35
|
-
|
29
|
+
# Create subscriber
|
30
|
+
key = ''
|
31
|
+
content = ''
|
36
32
|
|
37
|
-
|
33
|
+
subscriber.setsockopt(ZMQ::RCVTIMEO, timeout * 1000)
|
34
|
+
subscriber.setsockopt(ZMQ::SUBSCRIBE, event)
|
35
|
+
subscriber.connect(@client.one_zmq)
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
subscriber.setsockopt(ZMQ::UNSUBSCRIBE, event)
|
42
|
-
subscriber.close
|
43
|
-
end
|
37
|
+
rc = subscriber.recv_string(key)
|
38
|
+
rc = subscriber.recv_string(content) if rc != -1
|
44
39
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
40
|
+
return if ZMQ::Util.errno == ZMQ::EAGAIN || rc == -1
|
41
|
+
|
42
|
+
content
|
43
|
+
ensure
|
44
|
+
subscriber.setsockopt(ZMQ::UNSUBSCRIBE, event)
|
45
|
+
subscriber.close
|
46
|
+
end
|
47
|
+
|
48
|
+
def wait2(sstr1, sstr2, timeout = 60, cycles = -1)
|
49
|
+
wfun = OpenNebula::WaitExt::WAIT[self.class]
|
50
|
+
|
51
|
+
# Start with a timeout of 2 seconds, to wait until the first
|
52
|
+
# info.
|
53
|
+
#
|
54
|
+
# The timeout is increased later, to avoid multiple info calls.
|
55
|
+
c_timeout = 2
|
56
|
+
recvs = 0
|
57
|
+
in_state = false
|
58
|
+
|
59
|
+
# Subscribe with timeout seconds
|
60
|
+
#
|
61
|
+
# Subscribe string:
|
62
|
+
#
|
63
|
+
# EVENT STATE element_name/state_str//self.ID
|
64
|
+
#
|
65
|
+
# - element_name: is the element name to find in the message
|
66
|
+
# - self.ID: returns element ID to find in the message
|
67
|
+
ctx = ZMQ::Context.new(1)
|
68
|
+
|
69
|
+
until in_state || (cycles != -1 && recvs >= cycles)
|
70
|
+
content = wait_event(ctx,
|
71
|
+
wfun[:event].call(self, sstr1, sstr2),
|
72
|
+
c_timeout)
|
73
|
+
|
74
|
+
if content && !content.empty?
|
75
|
+
in_state = wfun[:in_state_e].call(sstr1, sstr2, content)
|
76
|
+
|
77
|
+
break if in_state
|
78
|
+
end
|
76
79
|
|
77
|
-
|
78
|
-
|
80
|
+
c_timeout *= 10
|
81
|
+
c_timeout = timeout if c_timeout > timeout
|
79
82
|
|
80
|
-
|
83
|
+
rco = info
|
81
84
|
|
82
|
-
|
85
|
+
return false if OpenNebula.is_error?(rco)
|
83
86
|
|
84
|
-
|
87
|
+
in_state = wfun[:in_state].call(self, sstr1, sstr2)
|
85
88
|
|
86
|
-
|
89
|
+
recvs += 1
|
90
|
+
end
|
91
|
+
|
92
|
+
in_state
|
87
93
|
end
|
88
94
|
|
89
|
-
in_state
|
90
95
|
end
|
91
96
|
|
92
97
|
end
|
93
98
|
|
94
|
-
module OpenNebula
|
95
|
-
|
96
|
-
|
99
|
+
module OpenNebula
|
100
|
+
|
101
|
+
# Module to wait OpenNebula objects events using polling
|
102
|
+
module WaitExtPolling
|
103
|
+
|
104
|
+
def wait2(sstr1, sstr2, timeout = 60, cycles = -1)
|
105
|
+
wfun = OpenNebula::WaitExt::WAIT[self.class]
|
106
|
+
|
107
|
+
stime = 5
|
108
|
+
recvs = 0
|
109
|
+
cycles = timeout / stime if cycles == -1
|
110
|
+
in_state = false
|
97
111
|
|
98
|
-
|
99
|
-
|
100
|
-
cycles = timeout / stime
|
101
|
-
in_state = false
|
112
|
+
loop do
|
113
|
+
rco = info
|
102
114
|
|
103
|
-
|
104
|
-
rco = info
|
115
|
+
return false if OpenNebula.is_error?(rco)
|
105
116
|
|
106
|
-
|
117
|
+
in_state = wfun[:in_state].call(self, sstr1, sstr2)
|
107
118
|
|
108
|
-
|
119
|
+
recvs += 1
|
109
120
|
|
110
|
-
|
121
|
+
break if in_state || recvs >= cycles
|
111
122
|
|
112
|
-
|
123
|
+
sleep stime
|
124
|
+
end
|
113
125
|
|
114
|
-
|
126
|
+
in_state
|
115
127
|
end
|
116
128
|
|
117
|
-
in_state
|
118
129
|
end
|
119
130
|
|
120
131
|
end
|
@@ -124,6 +135,7 @@ end
|
|
124
135
|
#
|
125
136
|
# rubocop:disable Style/ClassAndModuleChildren
|
126
137
|
module OpenNebula::WaitExt
|
138
|
+
|
127
139
|
# Wait classes and the name published in ZMQ/STATE
|
128
140
|
WAIT = {
|
129
141
|
OpenNebula::Host => {
|
@@ -176,7 +188,7 @@ module OpenNebula::WaitExt
|
|
176
188
|
},
|
177
189
|
|
178
190
|
:in_state => lambda {|o, s1, s2|
|
179
|
-
|
191
|
+
obj_s1 = Integer(o['STATE'])
|
180
192
|
inx_s1 = OpenNebula::VirtualMachine::VM_STATE.index(s1)
|
181
193
|
|
182
194
|
obj_s2 = Integer(o['LCM_STATE'])
|
@@ -203,13 +215,15 @@ module OpenNebula::WaitExt
|
|
203
215
|
wait?(obj)
|
204
216
|
|
205
217
|
class << obj
|
206
|
-
begin
|
207
|
-
require 'ffi-rzmq'
|
208
218
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
219
|
+
begin
|
220
|
+
require 'ffi-rzmq'
|
221
|
+
|
222
|
+
include OpenNebula::WaitExtEvent
|
223
|
+
rescue LoadError
|
224
|
+
include OpenNebula::WaitExtPolling
|
225
|
+
end
|
226
|
+
|
213
227
|
end
|
214
228
|
|
215
229
|
super
|
data/lib/opennebula/zone.rb
CHANGED
@@ -31,7 +31,15 @@ module OpenNebula
|
|
31
31
|
:delete => "zone.delete",
|
32
32
|
:addserver => "zone.addserver",
|
33
33
|
:delserver => "zone.delserver",
|
34
|
-
:resetserver => "zone.resetserver"
|
34
|
+
:resetserver => "zone.resetserver",
|
35
|
+
:enable => "zone.enable"
|
36
|
+
}
|
37
|
+
|
38
|
+
ZONE_STATES=%w{ENABLED DISABLED}
|
39
|
+
|
40
|
+
SHORT_ZONE_STATES={
|
41
|
+
"ENABLED" => "on",
|
42
|
+
"DISABLED" => "off"
|
35
43
|
}
|
36
44
|
|
37
45
|
# Creates a Zone description with just its identifier
|
@@ -179,6 +187,37 @@ module OpenNebula
|
|
179
187
|
return call(ZONE_METHODS[:resetserver], @pe_id, server_id)
|
180
188
|
end
|
181
189
|
|
190
|
+
# Enable zone
|
191
|
+
#
|
192
|
+
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
193
|
+
# otherwise
|
194
|
+
def enable()
|
195
|
+
return call(ZONE_METHODS[:enable], @pe_id, true)
|
196
|
+
end
|
197
|
+
|
198
|
+
# Disable zone, only readonly commands can be executed in disabled
|
199
|
+
# state
|
200
|
+
#
|
201
|
+
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
202
|
+
# otherwise
|
203
|
+
def disable()
|
204
|
+
return call(ZONE_METHODS[:enable], @pe_id, false)
|
205
|
+
end
|
206
|
+
|
207
|
+
#######################################################################
|
208
|
+
# Helpers to get Zone information
|
209
|
+
#######################################################################
|
210
|
+
|
211
|
+
# Returns the state of the Zone (numeric value)
|
212
|
+
def state
|
213
|
+
self['STATE'].to_i
|
214
|
+
end
|
215
|
+
|
216
|
+
# Returns the state of the Zone (string value)
|
217
|
+
def state_str
|
218
|
+
ZONE_STATES[state]
|
219
|
+
end
|
220
|
+
|
182
221
|
private
|
183
222
|
|
184
223
|
# These methods adds elements to the given node of the zone
|
data/lib/opennebula.rb
CHANGED
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
@@ -369,9 +369,11 @@ module VCenterDriver
|
|
369
369
|
error_msg = "\nError: #{e.message}\n"
|
370
370
|
error_msg << "#{e.backtrace}\n" \
|
371
371
|
if VCenterDriver::CONFIG[:debug_information]
|
372
|
-
|
372
|
+
STDERR.puts error_msg
|
373
|
+
raise_error = true
|
373
374
|
ensure
|
374
375
|
vi_client.close_connection if vi_client
|
376
|
+
raise if raise_error
|
375
377
|
end
|
376
378
|
end
|
377
379
|
|
@@ -496,9 +498,9 @@ module VCenterDriver
|
|
496
498
|
end
|
497
499
|
|
498
500
|
#
|
499
|
-
# Create and allocate a
|
501
|
+
# Create and allocate a OpenNebula Object.
|
500
502
|
#
|
501
|
-
# @param info [String] Info passed to
|
503
|
+
# @param info [String] Info passed to OpenNebula Core.
|
502
504
|
#
|
503
505
|
# @return [&block] the allocated object through a block.
|
504
506
|
#
|
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
|
|
@@ -1076,14 +1090,22 @@ module VCenterDriver
|
|
1076
1090
|
#
|
1077
1091
|
# @return [Hash ("String" => self.Nic)] Model representation of nics
|
1078
1092
|
def info_nics
|
1093
|
+
keep_mac_on_imported = false
|
1094
|
+
keep_mac_on_imported = CONFIG[:keep_mac_on_imported] \
|
1095
|
+
unless CONFIG[:keep_mac_on_imported].nil?
|
1096
|
+
|
1079
1097
|
@nics = { :macs => {} }
|
1080
1098
|
|
1081
1099
|
vc_nics = vcenter_nics_list
|
1082
1100
|
one_nics = one_nics_get
|
1083
1101
|
|
1084
1102
|
one_nics.each do |one_nic|
|
1085
|
-
index
|
1086
|
-
|
1103
|
+
index = one_nic['NIC_ID']
|
1104
|
+
if keep_mac_on_imported && one_nic['MAC_IMPORTED']
|
1105
|
+
mac = one_nic['MAC_IMPORTED']
|
1106
|
+
else
|
1107
|
+
mac = one_nic['MAC']
|
1108
|
+
end
|
1087
1109
|
vc_dev = query_nic(mac, vc_nics)
|
1088
1110
|
|
1089
1111
|
if vc_dev
|
@@ -2401,6 +2423,15 @@ module VCenterDriver
|
|
2401
2423
|
|
2402
2424
|
# Attach DISK to VM (hotplug)
|
2403
2425
|
def attach_disk(disk)
|
2426
|
+
# Adding a new disk in newer vSphere versions
|
2427
|
+
# automatically cleans all system snapshots
|
2428
|
+
# https://github.com/OpenNebula/one/issues/5409
|
2429
|
+
if snapshots? || one_snapshots?
|
2430
|
+
error_msg = 'Existing sytem snapshots, cannot change disks. '
|
2431
|
+
error_msg << 'Please remove all snapshots and try again.'
|
2432
|
+
raise error_message
|
2433
|
+
end
|
2434
|
+
|
2404
2435
|
spec_hash = {}
|
2405
2436
|
device_change = []
|
2406
2437
|
|
@@ -2582,6 +2613,12 @@ module VCenterDriver
|
|
2582
2613
|
def detach_disk(disk)
|
2583
2614
|
return unless disk.exists?
|
2584
2615
|
|
2616
|
+
if snapshots? || one_snapshots?
|
2617
|
+
error_message = 'Existing sytem snapshots, cannot change disks'
|
2618
|
+
error_message << '. Please remove all snapshots and try again.'
|
2619
|
+
raise error_message
|
2620
|
+
end
|
2621
|
+
|
2585
2622
|
spec_hash = {}
|
2586
2623
|
spec_hash[:extraConfig] = [disk.config(:delete)]
|
2587
2624
|
spec_hash[:deviceChange] = [{
|
@@ -2611,15 +2648,15 @@ module VCenterDriver
|
|
2611
2648
|
# - The disk is managed by OpenNebula
|
2612
2649
|
detachable= !(one_vm['LCM_STATE'].to_i == 11 && !disk.managed?)
|
2613
2650
|
detachable &&= disk.exists?
|
2614
|
-
|
2651
|
+
|
2615
2652
|
return unless detachable
|
2616
2653
|
|
2617
2654
|
detach_disk(disk)
|
2618
2655
|
|
2619
2656
|
# Check if we want to keep the non persistent disk
|
2620
2657
|
keep_non_persistent_disks =
|
2621
|
-
VCenterDriver::CONFIG[:keep_non_persistent_disks]
|
2622
|
-
|
2658
|
+
VCenterDriver::CONFIG[:keep_non_persistent_disks]
|
2659
|
+
|
2623
2660
|
return if keep_non_persistent_disks == true
|
2624
2661
|
|
2625
2662
|
disk.destroy
|
@@ -2816,7 +2853,7 @@ module VCenterDriver
|
|
2816
2853
|
# Convert VM to template in vCenter
|
2817
2854
|
mark_as_template
|
2818
2855
|
|
2819
|
-
# Edit the
|
2856
|
+
# Edit the OpenNebula template
|
2820
2857
|
one_client = OpenNebula::Client.new
|
2821
2858
|
template_id = one_item['TEMPLATE/TEMPLATE_ID']
|
2822
2859
|
new_template = OpenNebula::Template.new_with_id(template_id,
|
@@ -2867,6 +2904,15 @@ module VCenterDriver
|
|
2867
2904
|
self['rootSnapshot'] && !self['rootSnapshot'].empty?
|
2868
2905
|
end
|
2869
2906
|
|
2907
|
+
def one_snapshots?
|
2908
|
+
begin
|
2909
|
+
!one_item['TEMPLATE/SNAPSHOT'].nil?
|
2910
|
+
rescue StandardError
|
2911
|
+
# one_item may not be retrieved if deploy_id hasn't been set
|
2912
|
+
false
|
2913
|
+
end
|
2914
|
+
end
|
2915
|
+
|
2870
2916
|
def instantiated_as_persistent?
|
2871
2917
|
begin
|
2872
2918
|
!one_item['TEMPLATE/CLONING_TEMPLATE_ID'].nil?
|
@@ -3032,7 +3078,8 @@ module VCenterDriver
|
|
3032
3078
|
# Create a snapshot for the VM
|
3033
3079
|
def create_snapshot(snap_id, snap_name)
|
3034
3080
|
memory_dumps = true
|
3035
|
-
memory_dumps = CONFIG[:memory_dumps]
|
3081
|
+
memory_dumps = CONFIG[:memory_dumps] \
|
3082
|
+
unless CONFIG[:memory_dumps].nil?
|
3036
3083
|
|
3037
3084
|
snapshot_hash = {
|
3038
3085
|
: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
@@ -40,7 +40,7 @@ module VCenterDriver
|
|
40
40
|
def lock
|
41
41
|
return unless @locking
|
42
42
|
|
43
|
-
@locking_file = File.open('/tmp/vcenter-importer-lock', 'w')
|
43
|
+
@locking_file = File.open('/var/tmp/vcenter-importer-lock', 'w')
|
44
44
|
@locking_file.flock(File::LOCK_EX)
|
45
45
|
end
|
46
46
|
|
@@ -50,9 +50,9 @@ module VCenterDriver
|
|
50
50
|
|
51
51
|
@locking_file.close
|
52
52
|
|
53
|
-
return unless File.exist?('/tmp/vcenter-importer-lock')
|
53
|
+
return unless File.exist?('/var/tmp/vcenter-importer-lock')
|
54
54
|
|
55
|
-
File.delete('/tmp/vcenter-importer-lock')
|
55
|
+
File.delete('/var/tmp/vcenter-importer-lock')
|
56
56
|
end
|
57
57
|
|
58
58
|
def vm?
|
@@ -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?
|
@@ -729,6 +733,9 @@ module VCenterDriver
|
|
729
733
|
nic, true)
|
730
734
|
network_found.info
|
731
735
|
|
736
|
+
if nic[:mac]
|
737
|
+
nic_tmp << "MAC_IMPORTED=\"#{nic[:mac]}\",\n"
|
738
|
+
end
|
732
739
|
# This is the existing nic info
|
733
740
|
if nic[:mac] && ipv4.empty? && ipv6.empty?
|
734
741
|
nic_tmp << "MAC=\"#{nic[:mac]}\",\n"
|
@@ -1573,9 +1580,8 @@ module VCenterDriver
|
|
1573
1580
|
str << "]\n"
|
1574
1581
|
|
1575
1582
|
if annotation.nil? || annotation.empty?
|
1576
|
-
str << 'DESCRIPTION = "vCenter Template \
|
1577
|
-
|
1578
|
-
" from Cluster #{ccr_name}\"\n"
|
1583
|
+
str << 'DESCRIPTION = "vCenter Template imported by OpenNebula'\
|
1584
|
+
" from Cluster #{ccr_name}\"\n"
|
1579
1585
|
else
|
1580
1586
|
notes = annotation.gsub('\\', '\\\\').gsub('"', '\\"')
|
1581
1587
|
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.
|
4
|
+
version: 6.1.90.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenNebula
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -223,8 +223,8 @@ files:
|
|
223
223
|
- lib/opennebula/xml_element.rb
|
224
224
|
- lib/opennebula/xml_pool.rb
|
225
225
|
- lib/opennebula/xml_utils.rb
|
226
|
-
- lib/opennebula/zone_pool.rb
|
227
226
|
- lib/opennebula/zone.rb
|
227
|
+
- lib/opennebula/zone_pool.rb
|
228
228
|
- lib/opennebula/flow/grammar.rb
|
229
229
|
- lib/opennebula/flow/service_pool.rb
|
230
230
|
- lib/opennebula/flow/service_template.rb
|
@@ -255,9 +255,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
255
255
|
version: '0'
|
256
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
257
|
requirements:
|
258
|
-
- - '
|
258
|
+
- - '>'
|
259
259
|
- !ruby/object:Gem::Version
|
260
|
-
version:
|
260
|
+
version: 1.3.1
|
261
261
|
requirements: []
|
262
262
|
rubyforge_project:
|
263
263
|
rubygems_version: 2.0.14.1
|