opennebula 6.0.2 → 6.0.3
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/file_helper.rb +4 -0
- data/lib/host.rb +4 -4
- data/lib/models/service.rb +46 -4
- data/lib/opennebula.rb +1 -1
- data/lib/opennebula/flow/service_template.rb +10 -0
- data/lib/opennebula/marketplace.rb +30 -2
- data/lib/opennebula/wait_ext.rb +92 -78
- data/lib/scripts_common.rb +1 -10
- data/lib/vcenter_driver.rb +1 -10
- data/lib/virtual_machine.rb +11 -9
- data/lib/vm_monitor.rb +0 -2
- data/lib/vm_template.rb +4 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae4c2d6ffef598e821e3b6bcc4a429f766caadbf
|
4
|
+
data.tar.gz: 2e65f273fb1f2d383d799fa4fd31e6d2fb66cb41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce66ed43b8db71bcb0f8572a7e3a48de18b3e7c4819006d93333709e892718cd83c724a723c81870538b404ed3d80bc33786b1b1cc0bbd8a882412992c56bd17
|
7
|
+
data.tar.gz: e3694d73c467089a0ec6720c2ac22034bfcb49f273d14b607915d9aa1ba23abf6c5045a436ec08f47d7f87e5c394981c0e95d8b1614833f87c3666f64b731291
|
data/lib/CommandManager.rb
CHANGED
@@ -34,17 +34,9 @@ require 'base64'
|
|
34
34
|
# * Log messages will be sent to STDOUT
|
35
35
|
# * The script will return 0 if it succeded or any other value
|
36
36
|
# if there was a failure
|
37
|
-
# * In case of failure the cause of the error will be written to STDERR
|
38
|
-
# wrapped by start and end marks as follows:
|
39
|
-
#
|
40
|
-
# ERROR MESSAGE --8<------
|
41
|
-
# error message for the failure
|
42
|
-
# ERROR MESSAGE ------>8--
|
43
|
-
|
37
|
+
# * In case of failure the cause of the error will be written to STDERR.
|
44
38
|
|
45
39
|
class GenericCommand
|
46
|
-
ERROR_OPEN = "ERROR MESSAGE --8<------"
|
47
|
-
ERROR_CLOSE = "ERROR MESSAGE ------>8--"
|
48
40
|
|
49
41
|
attr_reader :code, :stdout, :stderr, :command
|
50
42
|
|
@@ -93,8 +85,9 @@ class GenericCommand
|
|
93
85
|
end
|
94
86
|
|
95
87
|
log(error_message)
|
96
|
-
|
97
|
-
@
|
88
|
+
|
89
|
+
@stderr = error_message
|
90
|
+
@code = 255
|
98
91
|
end
|
99
92
|
|
100
93
|
return @code
|
@@ -102,9 +95,9 @@ class GenericCommand
|
|
102
95
|
|
103
96
|
# Parses error message from +stderr+ output
|
104
97
|
def get_error_message
|
105
|
-
|
106
|
-
|
107
|
-
|
98
|
+
return '-' if @stderr.empty?
|
99
|
+
|
100
|
+
@stderr.tr("\n",' ').strip
|
108
101
|
end
|
109
102
|
|
110
103
|
def to_xml
|
@@ -176,8 +169,12 @@ private
|
|
176
169
|
end
|
177
170
|
}
|
178
171
|
|
179
|
-
|
180
|
-
|
172
|
+
begin
|
173
|
+
i.write stdin_data
|
174
|
+
i.close
|
175
|
+
rescue Errno::EPIPE
|
176
|
+
# the cmd doesn't read the input, ignore error
|
177
|
+
end
|
181
178
|
|
182
179
|
# blocking wait for process termination
|
183
180
|
t.value
|
data/lib/DriverExecHelper.rb
CHANGED
@@ -124,31 +124,21 @@ module DriverExecHelper
|
|
124
124
|
# Sends a log message to ONE. The +message+ can be multiline, it will
|
125
125
|
# be automatically splitted by lines.
|
126
126
|
def log(number, message, all = true)
|
127
|
-
|
128
|
-
|
127
|
+
msg = message.strip
|
128
|
+
|
129
129
|
msg.each_line do |line|
|
130
130
|
all ? severity='I' : severity=nil
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
in_error_message=false
|
138
|
-
next
|
139
|
-
else
|
140
|
-
if in_error_message
|
131
|
+
|
132
|
+
if line.match(/^(ERROR|DEBUG|INFO):(.*)$/)
|
133
|
+
line=Regexp.last_match(2)
|
134
|
+
|
135
|
+
case Regexp.last_match(1)
|
136
|
+
when 'ERROR'
|
141
137
|
severity='E'
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
severity='E'
|
147
|
-
when 'DEBUG'
|
148
|
-
severity='D'
|
149
|
-
when 'INFO'
|
150
|
-
severity='I'
|
151
|
-
end
|
138
|
+
when 'DEBUG'
|
139
|
+
severity='D'
|
140
|
+
when 'INFO'
|
141
|
+
severity='I'
|
152
142
|
end
|
153
143
|
end
|
154
144
|
|
data/lib/cloud/CloudClient.rb
CHANGED
data/lib/file_helper.rb
CHANGED
data/lib/host.rb
CHANGED
@@ -1145,14 +1145,14 @@ module VCenterDriver
|
|
1145
1145
|
vswitchspec =
|
1146
1146
|
RbVmomi::VIM::HostVirtualSwitchSpec(
|
1147
1147
|
:bridge => hostbridge,
|
1148
|
-
|
1149
|
-
|
1148
|
+
:mtu => mtu,
|
1149
|
+
:numPorts => num_ports
|
1150
1150
|
)
|
1151
1151
|
begin
|
1152
1152
|
nws
|
1153
1153
|
.UpdateVirtualSwitch(
|
1154
1154
|
:vswitchName => name,
|
1155
|
-
|
1155
|
+
:spec => vswitchspec
|
1156
1156
|
)
|
1157
1157
|
rescue StandardError => e
|
1158
1158
|
raise "The standard switch with name #{name} \
|
@@ -1463,7 +1463,7 @@ module VCenterDriver
|
|
1463
1463
|
nws
|
1464
1464
|
.UpdatePortGroup(
|
1465
1465
|
:pgName => nr[:name],
|
1466
|
-
|
1466
|
+
:portgrp => nr[:spec]
|
1467
1467
|
)
|
1468
1468
|
rescue StandardError => e
|
1469
1469
|
raise "A rollback operation for standard \
|
data/lib/models/service.rb
CHANGED
@@ -140,12 +140,14 @@ module OpenNebula
|
|
140
140
|
# Return true if the service can be undeployed
|
141
141
|
# @return true if the service can be undeployed, false otherwise
|
142
142
|
def can_undeploy?
|
143
|
+
# rubocop:disable Style/IfWithBooleanLiteralBranches
|
143
144
|
if (transient_state? && state != Service::STATE['UNDEPLOYING']) ||
|
144
|
-
|
145
|
+
state == Service::STATE['DONE'] || failed_state?
|
145
146
|
false
|
146
147
|
else
|
147
148
|
true
|
148
149
|
end
|
150
|
+
# rubocop:enable Style/IfWithBooleanLiteralBranches
|
149
151
|
end
|
150
152
|
|
151
153
|
# Return true if the service can be updated
|
@@ -166,6 +168,12 @@ module OpenNebula
|
|
166
168
|
RECOVER_SCALE_STATES.include? STATE_STR[state]
|
167
169
|
end
|
168
170
|
|
171
|
+
# Return true if the service is running
|
172
|
+
# @return true if the service is runnning, false otherwise
|
173
|
+
def running?
|
174
|
+
state_str == 'RUNNING'
|
175
|
+
end
|
176
|
+
|
169
177
|
# Returns the running_status_vm option
|
170
178
|
# @return [true, false] true if the running_status_vm option is enabled
|
171
179
|
def report_ready?
|
@@ -323,6 +331,36 @@ module OpenNebula
|
|
323
331
|
nil
|
324
332
|
end
|
325
333
|
|
334
|
+
# Adds a role to the service
|
335
|
+
#
|
336
|
+
# @param template [Hash] Role information
|
337
|
+
#
|
338
|
+
# @return [OpenNebula::Role] New role
|
339
|
+
def add_role(template)
|
340
|
+
template['state'] ||= Role::STATE['PENDING']
|
341
|
+
role = Role.new(template, self)
|
342
|
+
|
343
|
+
if @roles[role.name]
|
344
|
+
return OpenNebula::Error.new("Role #{role.name} already exists")
|
345
|
+
end
|
346
|
+
|
347
|
+
@roles[role.name] = role
|
348
|
+
@body['roles'] << template if @body && @body['roles']
|
349
|
+
|
350
|
+
role
|
351
|
+
end
|
352
|
+
|
353
|
+
# Removes a role from the service
|
354
|
+
#
|
355
|
+
# @param name [String] Role name to delete
|
356
|
+
def remove_role(name)
|
357
|
+
@roles.delete(name)
|
358
|
+
|
359
|
+
@body['roles'].delete_if do |role|
|
360
|
+
role['name'] == name
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
326
364
|
# Retrieves the information of the Service and all its Nodes.
|
327
365
|
#
|
328
366
|
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
@@ -514,8 +552,12 @@ module OpenNebula
|
|
514
552
|
[true, nil]
|
515
553
|
end
|
516
554
|
|
517
|
-
def deploy_networks
|
518
|
-
|
555
|
+
def deploy_networks(deploy = true)
|
556
|
+
if deploy
|
557
|
+
body = JSON.parse(self['TEMPLATE/BODY'])
|
558
|
+
else
|
559
|
+
body = @body
|
560
|
+
end
|
519
561
|
|
520
562
|
return if body['networks_values'].nil?
|
521
563
|
|
@@ -531,7 +573,7 @@ module OpenNebula
|
|
531
573
|
if OpenNebula.is_error?(rc)
|
532
574
|
return rc
|
533
575
|
end
|
534
|
-
end
|
576
|
+
end if deploy
|
535
577
|
|
536
578
|
# Replace $attibute by the corresponding value
|
537
579
|
resolve_attributes(body)
|
data/lib/opennebula.rb
CHANGED
@@ -451,6 +451,16 @@ module OpenNebula
|
|
451
451
|
validate_values(template)
|
452
452
|
end
|
453
453
|
|
454
|
+
def self.validate_role(template)
|
455
|
+
validator = Validator::Validator.new(
|
456
|
+
:default_values => true,
|
457
|
+
:delete_extra_properties => false,
|
458
|
+
:allow_extra_properties => true
|
459
|
+
)
|
460
|
+
|
461
|
+
validator.validate!(template, ROLE_SCHEMA)
|
462
|
+
end
|
463
|
+
|
454
464
|
def instantiate(merge_template)
|
455
465
|
rc = nil
|
456
466
|
|
@@ -29,7 +29,15 @@ module OpenNebula
|
|
29
29
|
:update => "market.update",
|
30
30
|
:chown => "market.chown",
|
31
31
|
:chmod => "market.chmod",
|
32
|
-
:rename => "market.rename"
|
32
|
+
:rename => "market.rename",
|
33
|
+
:enable => "market.enable"
|
34
|
+
}
|
35
|
+
|
36
|
+
MARKETPLACE_STATES=%w{ENABLED DISABLED}
|
37
|
+
|
38
|
+
SHORT_MARKETPLACE_STATES={
|
39
|
+
"ENABLED" => "on",
|
40
|
+
"DISABLED" => "off"
|
33
41
|
}
|
34
42
|
|
35
43
|
# Creates a MarketPlace description with just its identifier
|
@@ -130,13 +138,33 @@ module OpenNebula
|
|
130
138
|
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
131
139
|
# otherwise
|
132
140
|
def rename(name)
|
133
|
-
|
141
|
+
call(MARKETPLACE_METHODS[:rename], @pe_id, name)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Enables this marketplace
|
145
|
+
def enable
|
146
|
+
call(MARKETPLACE_METHODS[:enable], @pe_id, true)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Enables this marketplace
|
150
|
+
def disable
|
151
|
+
call(MARKETPLACE_METHODS[:enable], @pe_id, false)
|
134
152
|
end
|
135
153
|
|
136
154
|
# ---------------------------------------------------------------------
|
137
155
|
# Helpers to get information
|
138
156
|
# ---------------------------------------------------------------------
|
139
157
|
|
158
|
+
# Returns the state of the Zone (numeric value)
|
159
|
+
def state
|
160
|
+
self['STATE'].to_i
|
161
|
+
end
|
162
|
+
|
163
|
+
# Returns the state of the Zone (string value)
|
164
|
+
def state_str
|
165
|
+
MARKETPLACE_STATES[state]
|
166
|
+
end
|
167
|
+
|
140
168
|
# Returns whether or not the marketplace app with id 'id' is part of
|
141
169
|
# this marketplace
|
142
170
|
def contains(id)
|
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/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
@@ -133,19 +133,10 @@ end
|
|
133
133
|
# Helper functions #
|
134
134
|
# ---------------------------------------------------------------------------- #
|
135
135
|
|
136
|
-
def error_message(message)
|
137
|
-
error_str = "ERROR MESSAGE --8<------\n"
|
138
|
-
error_str << message
|
139
|
-
error_str << "\nERROR MESSAGE ------>8--"
|
140
|
-
|
141
|
-
error_str
|
142
|
-
end
|
143
|
-
|
144
136
|
def check_valid(parameter, label)
|
145
137
|
return unless parameter.nil? || parameter.empty?
|
146
138
|
|
147
|
-
STDERR.puts
|
148
|
-
is required for this action.")
|
139
|
+
STDERR.puts "The parameter '#{label}' is required for this action."
|
149
140
|
exit(-1)
|
150
141
|
end
|
151
142
|
|
data/lib/virtual_machine.rb
CHANGED
@@ -2418,10 +2418,10 @@ end
|
|
2418
2418
|
# Adding a new disk in newer vSphere versions
|
2419
2419
|
# automatically cleans all system snapshots
|
2420
2420
|
# https://github.com/OpenNebula/one/issues/5409
|
2421
|
-
if snapshots?
|
2422
|
-
|
2423
|
-
|
2424
|
-
|
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
2425
|
end
|
2426
2426
|
|
2427
2427
|
spec_hash = {}
|
@@ -2605,10 +2605,11 @@ end
|
|
2605
2605
|
def detach_disk(disk)
|
2606
2606
|
return unless disk.exists?
|
2607
2607
|
|
2608
|
-
if snapshots?
|
2609
|
-
|
2610
|
-
|
2611
|
-
|
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
|
2612
2613
|
end
|
2613
2614
|
|
2614
2615
|
spec_hash = {}
|
@@ -3070,7 +3071,8 @@ end
|
|
3070
3071
|
# Create a snapshot for the VM
|
3071
3072
|
def create_snapshot(snap_id, snap_name)
|
3072
3073
|
memory_dumps = true
|
3073
|
-
memory_dumps = CONFIG[:memory_dumps]
|
3074
|
+
memory_dumps = CONFIG[:memory_dumps] \
|
3075
|
+
unless CONFIG[:memory_dumps].nil?
|
3074
3076
|
|
3075
3077
|
snapshot_hash = {
|
3076
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?
|
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,13 +223,14 @@ 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
|
230
|
+
- lib/opennebula/flow/service_template.rb
|
230
231
|
- lib/opennebula/flow/service_template_ext.rb
|
231
232
|
- lib/opennebula/flow/service_template_pool.rb
|
232
233
|
- lib/opennebula/flow/validator.rb
|
233
|
-
- lib/opennebula/flow/service_template.rb
|
234
234
|
- lib/opennebula/ldap_auth.rb
|
235
235
|
- lib/opennebula/ldap_auth_spec.rb
|
236
236
|
- lib/opennebula/server_cipher_auth.rb
|