opennebula 6.0.1 → 6.1.90.pre
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/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
|