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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c860bdde4c2e7184d75f0433181a5aa485d39296
4
- data.tar.gz: 7b773535ac63930fb85252435814b4f4e81adcf0
3
+ metadata.gz: ae4c2d6ffef598e821e3b6bcc4a429f766caadbf
4
+ data.tar.gz: 2e65f273fb1f2d383d799fa4fd31e6d2fb66cb41
5
5
  SHA512:
6
- metadata.gz: 0b23945ca645beba28c3e898a13ef254b4a78ecdc63dec03922c808914233d550a3503efef499a521d2aa6fbfaeff795789976105ccb93eb80614ef3686662e1
7
- data.tar.gz: 3337709c1791f07680d40dcb8c4a012139e93af38546fc200dacb07fea81b3890405a80f48a596f72465c4bb08e28f02b6c729801e8c414ba55559d1b2f7a097
6
+ metadata.gz: ce66ed43b8db71bcb0f8572a7e3a48de18b3e7c4819006d93333709e892718cd83c724a723c81870538b404ed3d80bc33786b1b1cc0bbd8a882412992c56bd17
7
+ data.tar.gz: e3694d73c467089a0ec6720c2ac22034bfcb49f273d14b607915d9aa1ba23abf6c5045a436ec08f47d7f87e5c394981c0e95d8b1614833f87c3666f64b731291
@@ -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
- @stderr = ERROR_OPEN + "\n" + error_message + "\n" + ERROR_CLOSE
97
- @code = 255
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
- tmp=@stderr.scan(/^#{ERROR_OPEN}\n(.*?)#{ERROR_CLOSE}$/m)
106
- return "-" if !tmp[0]
107
- tmp[0].join(' ').strip
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
- i.write stdin_data
180
- i.close
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
@@ -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
- in_error_message=false
128
- msg=message.strip
127
+ msg = message.strip
128
+
129
129
  msg.each_line do |line|
130
130
  all ? severity='I' : severity=nil
131
- l=line.strip
132
-
133
- if l=='ERROR MESSAGE --8<------'
134
- in_error_message=true
135
- next
136
- elsif l=='ERROR MESSAGE ------>8--'
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
- elsif line.match(/^(ERROR|DEBUG|INFO):(.*)$/)
143
- line=Regexp.last_match(2)
144
- case Regexp.last_match(1)
145
- when 'ERROR'
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
 
@@ -51,7 +51,7 @@ end
51
51
  module CloudClient
52
52
 
53
53
  # OpenNebula version
54
- VERSION = '6.0.2'
54
+ VERSION = '6.0.3'
55
55
 
56
56
  # #########################################################################
57
57
  # Default location for the authentication file
data/lib/file_helper.rb CHANGED
@@ -81,6 +81,10 @@ module VCenterDriver
81
81
  file.match(%r{^https?://}) || file.match(%r{^s3?://})
82
82
  end
83
83
 
84
+ def self.from_s3?(file)
85
+ file.match(%r{^s3?://})
86
+ end
87
+
84
88
  def self.vmdk?(file)
85
89
  type = `file #{file}`
86
90
 
data/lib/host.rb CHANGED
@@ -1145,14 +1145,14 @@ module VCenterDriver
1145
1145
  vswitchspec =
1146
1146
  RbVmomi::VIM::HostVirtualSwitchSpec(
1147
1147
  :bridge => hostbridge,
1148
- :mtu => mtu,
1149
- :numPorts => num_ports
1148
+ :mtu => mtu,
1149
+ :numPorts => num_ports
1150
1150
  )
1151
1151
  begin
1152
1152
  nws
1153
1153
  .UpdateVirtualSwitch(
1154
1154
  :vswitchName => name,
1155
- :spec => vswitchspec
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
- :portgrp => nr[:spec]
1466
+ :portgrp => nr[:spec]
1467
1467
  )
1468
1468
  rescue StandardError => e
1469
1469
  raise "A rollback operation for standard \
@@ -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
- state == Service::STATE['DONE'] || failed_state?
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
- body = JSON.parse(self['TEMPLATE/BODY'])
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
@@ -77,5 +77,5 @@ require 'opennebula/flow'
77
77
  module OpenNebula
78
78
 
79
79
  # OpenNebula version
80
- VERSION = '6.0.2'
80
+ VERSION = '6.0.3'
81
81
  end
@@ -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
- return call(MARKETPLACE_METHODS[:rename], @pe_id, name)
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)
@@ -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::WaitExtEvent
23
- def wait_event(ctx, event, timeout)
24
- subscriber = ctx.socket(ZMQ::SUB)
21
+ module OpenNebula
25
22
 
26
- # Create subscriber
27
- key = ''
28
- content = ''
23
+ # Module to wait OpenNebula objects events using ZMQ
24
+ module WaitExtEvent
29
25
 
30
- subscriber.setsockopt(ZMQ::RCVTIMEO, timeout * 1000)
31
- subscriber.setsockopt(ZMQ::SUBSCRIBE, event)
32
- subscriber.connect(@client.one_zmq)
26
+ def wait_event(ctx, event, timeout)
27
+ subscriber = ctx.socket(ZMQ::SUB)
33
28
 
34
- rc = subscriber.recv_string(key)
35
- rc = subscriber.recv_string(content) if rc != -1
29
+ # Create subscriber
30
+ key = ''
31
+ content = ''
36
32
 
37
- return if ZMQ::Util.errno == ZMQ::EAGAIN || rc == -1
33
+ subscriber.setsockopt(ZMQ::RCVTIMEO, timeout * 1000)
34
+ subscriber.setsockopt(ZMQ::SUBSCRIBE, event)
35
+ subscriber.connect(@client.one_zmq)
38
36
 
39
- content
40
- ensure
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
- def wait2(sstr1, sstr2, timeout = 60, cycles = -1)
46
- wfun = OpenNebula::WaitExt::WAIT[self.class]
47
-
48
- # Start with a timeout of 2 seconds, to wait until the first
49
- # info.
50
- #
51
- # The timeout is increased later, to avoid multiple info calls.
52
- c_timeout = 2
53
- recvs = 0
54
- in_state = false
55
-
56
- # Subscribe with timeout seconds
57
- #
58
- # Subscribe string:
59
- #
60
- # EVENT STATE element_name/state_str//self.ID
61
- #
62
- # - element_name: is the element name to find in the message
63
- # - self.ID: returns element ID to find in the message
64
- ctx = ZMQ::Context.new(1)
65
-
66
- until in_state || (cycles != -1 && recvs >= cycles)
67
- content = wait_event(ctx,
68
- wfun[:event].call(self, sstr1, sstr2),
69
- c_timeout)
70
-
71
- if content && !content.empty?
72
- in_state = wfun[:in_state_e].call(sstr1, sstr2, content)
73
-
74
- break if in_state
75
- end
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
- c_timeout *= 10
78
- c_timeout = timeout if c_timeout > timeout
80
+ c_timeout *= 10
81
+ c_timeout = timeout if c_timeout > timeout
79
82
 
80
- rco = info
83
+ rco = info
81
84
 
82
- return false if OpenNebula.is_error?(rco)
85
+ return false if OpenNebula.is_error?(rco)
83
86
 
84
- in_state = wfun[:in_state].call(self, sstr1, sstr2)
87
+ in_state = wfun[:in_state].call(self, sstr1, sstr2)
85
88
 
86
- recvs += 1
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::WaitExtPolling
95
- def wait2(sstr1, sstr2, timeout = 60, cycles = -1)
96
- wfun = OpenNebula::WaitExt::WAIT[self.class]
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
- stime = 5
99
- recvs = 0
100
- cycles = timeout / stime
101
- in_state = false
112
+ loop do
113
+ rco = info
102
114
 
103
- loop do
104
- rco = info
115
+ return false if OpenNebula.is_error?(rco)
105
116
 
106
- return false if OpenNebula.is_error?(rco)
117
+ in_state = wfun[:in_state].call(self, sstr1, sstr2)
107
118
 
108
- in_state = wfun[:in_state].call(self, sstr1, sstr2)
119
+ recvs += 1
109
120
 
110
- recvs += 1
121
+ break if in_state || recvs >= cycles
111
122
 
112
- break if in_state || recvs >= cycles
123
+ sleep stime
124
+ end
113
125
 
114
- sleep stime
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
- obj_s1 = Integer(o['STATE'])
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
- include OpenNebula::WaitExtEvent
210
- rescue LoadError
211
- include OpenNebula::WaitExtPolling
212
- end
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
@@ -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 format_error_message(message)
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)
@@ -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 error_message("The parameter '#{label}'\
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
 
@@ -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? or one_snapshots?
2422
- error_message = 'Existing sytem snapshots, cannot change disks. '
2423
- error_message << 'Please remove all snapshots and try again.'
2424
- raise error_message
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? or one_snapshots?
2609
- error_message = 'Existing sytem snapshots, cannot change disks. '
2610
- error_message << 'Please remove all snapshots and try again.'
2611
- raise error_message
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] unless CONFIG[:memory_dumps].nil?
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.2
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-05-24 00:00:00.000000000 Z
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