opennebula 6.2.1 → 6.2.2

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
  SHA256:
3
- metadata.gz: 630fc82258e06265dd9308385f987452c2c9e97774f9c844567eb0512c699996
4
- data.tar.gz: 4b19ee5faf356fc61ba4e8883dc7bb37137d54d34c251c6f0cbbfab5a8b0b27b
3
+ metadata.gz: 9492453d246b5d413a5902766bda7526160e953c1e6072d242509ebff8df73bc
4
+ data.tar.gz: eb349b7f7f2a87b29cbbae06ec35db4131db8baf96e5cbf4cf9875f3815e2db3
5
5
  SHA512:
6
- metadata.gz: ea3eba7d99bfc70cb7b94a2c8c2548b130d50ec3cf73d3344e0ed12a05b2e83780eec32e4790cfeef00bde6a38164468a0cfe91bb62cd1325c20aac7f9cca235
7
- data.tar.gz: eeb5c702a03ef47f5ad8e37f95b94259e49019a78d5b58f8ce560d3b2afd50cb8828a7512afe14b1f3e25e262ab3b3974f9174e3109a20a98d89140a90fbca96
6
+ metadata.gz: 546bd3075e73b2e73be4abe53dad5af5d27956dbb896182fd828a2794b510b5df71ea615915b82abbba506ff824f31091fb54afee8d8e67b3b50092714a15ffb
7
+ data.tar.gz: 6476073b7b334c8e746350760a0de9082770f45df57ee3c9db318b72ee9f1c72c86f8626d892e313c4d92387920e367a063878ac24237b017b66fecb7dc3d7fb
@@ -51,7 +51,7 @@ end
51
51
  module CloudClient
52
52
 
53
53
  # OpenNebula version
54
- VERSION = '6.2.1'
54
+ VERSION = '6.2.2'
55
55
 
56
56
  # #########################################################################
57
57
  # Default location for the authentication file
data/lib/host.rb CHANGED
@@ -712,7 +712,7 @@ module VCenterDriver
712
712
 
713
713
  # Only take care of VMs, not templates
714
714
  if !hashed_properties['config.template']
715
- vms[r.obj._ref] = hashed_properties
715
+ vms[r.obj._ref + '_' + vc_uuid] = hashed_properties
716
716
  vm_objects << r.obj
717
717
  end
718
718
  end
@@ -802,7 +802,8 @@ module VCenterDriver
802
802
  found_vm =
803
803
  host_vms
804
804
  .select do |vm|
805
- vm['DEPLOY_ID'].eql? vm_ref
805
+ vm['DEPLOY_ID'] == vm_ref ||
806
+ vm['DEPLOY_ID'] == VIHelper.get_deploy_id(vm_ref)
806
807
  end.first
807
808
  id = found_vm['ID'] if found_vm
808
809
 
@@ -55,8 +55,12 @@ module OpenNebula
55
55
  @one_pool = nil
56
56
 
57
57
  if @client
58
- info = Nokogiri::XML(@client.call('user.info', -1))
59
- @user_id = Integer(info.xpath('/USER/ID').text)
58
+ rc = @client.call('user.info', -1)
59
+
60
+ unless OpenNebula.is_error?(rc)
61
+ info = Nokogiri::XML(rc)
62
+ @user_id = Integer(info.xpath('/USER/ID').text)
63
+ end
60
64
  end
61
65
 
62
66
  super('DOCUMENT_POOL', 'DOCUMENT', @client)
@@ -315,6 +315,12 @@ module OpenNebula
315
315
  end
316
316
  else
317
317
  IMMUTABLE_ATTRS.each do |attr|
318
+ # Allows updating the template without
319
+ # specifying the immutable attributes
320
+ if template[attr].nil?
321
+ template[attr] = @body[attr]
322
+ end
323
+
318
324
  next if template[attr] == @body[attr]
319
325
 
320
326
  return [false, "service_template/#{attr}"]
@@ -14,7 +14,6 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
-
18
17
  require 'opennebula/pool_element'
19
18
  require 'base64'
20
19
  require 'yaml'
@@ -217,10 +216,12 @@ module OpenNebula
217
216
  # Imports a wild VM from the host and puts it in running state
218
217
  #
219
218
  # @param name [String] Name of the VM to import
219
+ # @param ipv4 [Array] Array with IP4s to set
220
+ # @param ipv6 [Array] Array with IP6s to set
220
221
  #
221
222
  # @return [nil, OpenNebula::Error] nil in case of success, Error
222
223
  # otherwise
223
- def import_wild(name)
224
+ def import_wild(name, ipv4 = nil, ipv6 = nil)
224
225
  vms = importable_wilds.select {|vm| vm['VM_NAME'] == name }
225
226
 
226
227
  if vms.length == 0
@@ -247,8 +248,15 @@ module OpenNebula
247
248
  vi_client = VCenterDriver::VIClient.new_from_host(self["ID"])
248
249
  importer = VCenterDriver::VmmImporter.new(@client, vi_client)
249
250
 
250
- return importer.import({wild: wild, template: template,
251
- one_item: vm, host: self['ID']})
251
+ return importer.import(
252
+ { :wild => wild,
253
+ :template => template,
254
+ :one_item => vm,
255
+ :host => self['ID'],
256
+ :ipv4 => ipv4,
257
+ :ipv6 => ipv6
258
+ }
259
+ )
252
260
  else
253
261
  rc = vm.allocate(template)
254
262
 
@@ -185,9 +185,22 @@ module OpenNebula::MarketPlaceAppExt
185
185
  #---------------------------------------------------------------
186
186
  # Created an associated VMTemplate if needed
187
187
  #---------------------------------------------------------------
188
- if (self['TEMPLATE/VMTEMPLATE64'].nil? && !is_vcenter) ||
189
- options[:notemplate] ||
190
- options[:template] == -1
188
+ if is_vcenter &&
189
+ (!options[:template] || options[:template] == -1)
190
+ tmpl = create_vcenter_template(ds, options, image)
191
+
192
+ if OpenNebula.is_error?(tmpl)
193
+ rc_info[:vmtemplate] = [tmpl]
194
+ else
195
+ rc_info[:vmtemplate] = [tmpl.id]
196
+ end
197
+
198
+ return rc_info
199
+ end
200
+
201
+ if self['TEMPLATE/VMTEMPLATE64'].nil? ||
202
+ options[:notemplate] ||
203
+ options[:template] == -1
191
204
  return rc_info
192
205
  end
193
206
 
@@ -286,33 +299,128 @@ module OpenNebula::MarketPlaceAppExt
286
299
  rc
287
300
  end
288
301
 
289
- def update_options_with_template(options, _validate = false)
290
- vcenterrc_path =
291
- "#{VAR_LOCATION}/remotes/etc/vmm/vcenter/vcenterrc"
302
+ # Create a VM template in vCenter in order to use it when
303
+ # deploying an app from the marketplace
304
+ #
305
+ # @param ds [OpenNebula::Datastore] Datastore information
306
+ # @param options [Hash] Export options
307
+ # @param image [OpenNebula::Image] Image information
308
+ def create_vcenter_template(ds, options, image = nil)
309
+ ret = {}
310
+ keys = %w[VCENTER_TEMPLATE_REF
311
+ VCENTER_CCR_REF
312
+ VCENTER_INSTANCE_ID]
313
+
314
+ if ds['//VCENTER_TEMPLATE_REF']
315
+ keys.each do |key|
316
+ ret[key] = ds["//#{key}"]
317
+ end
318
+ else
319
+ require 'vcenter_driver'
292
320
 
293
- if File.file?(vcenterrc_path)
294
- config_vcenter = YAML.load_file(vcenterrc_path)
321
+ # Get vi client for current datastore
322
+ vi_client = VCenterDriver::VIClient.new_from_datastore(
323
+ ds.id
324
+ )
295
325
 
296
- if config_vcenter.key?(:default_template)
297
- options[:template] =
298
- config_vcenter[:default_template]
326
+ # Get datastore object
327
+ ds_ref = ds['//VCENTER_DS_REF']
328
+ datastore = VCenterDriver::Datastore.new_from_ref(
329
+ ds_ref,
330
+ vi_client
331
+ )
299
332
 
300
- options
301
- else
302
- raise "Couldn't find default_template " \
303
- 'configuration in vcenterrc conf ' \
304
- 'file. Please use the --template ' \
305
- 'file to define a VM Template ID if ' \
306
- 'needed or add default_template to' \
307
- ' vcenterrc conf file'
333
+ # Get resource pool
334
+ host_ref = datastore['host'].first.key.parent._ref
335
+ vi_client.ccr_ref = host_ref
336
+
337
+ host = VCenterDriver::ClusterComputeResource.new_from_ref(
338
+ host_ref,
339
+ vi_client
340
+ )
341
+
342
+ rp = host.resource_pools.first
343
+
344
+ # Get vCentrer instance ID
345
+ uuid = vi_client.vim.serviceContent.about.instanceUuid
346
+
347
+ # Create VM folder it not exists
348
+ dc = datastore.obtain_dc.item
349
+ vm_folder = dc.find_folder('one_default_template')
350
+
351
+ if vm_folder.nil?
352
+ dc.vmFolder.CreateFolder(
353
+ :name => 'one_default_template'
354
+ )
355
+ vm_folder = dc.find_folder('one_default_template')
356
+ end
357
+
358
+ # Define default VM config
359
+ vm_cfg = { :name => "one_app_template-#{ds.id}",
360
+ :guestId => 'otherGuest',
361
+ :numCPUs => 1,
362
+ :memoryMB => 128,
363
+ :files => {
364
+ :vmPathName => "[#{datastore.item.name}]"
365
+ } }
366
+
367
+ # Create the VM
368
+ vm = vm_folder.CreateVM_Task(
369
+ :config => vm_cfg,
370
+ :pool => rp
371
+ ).wait_for_completion
372
+
373
+ # Create the VM template
374
+ vm.MarkAsTemplate
375
+
376
+ ret['VCENTER_TEMPLATE_REF'] = vm._ref
377
+ ret['VCENTER_CCR_REF'] = host_ref
378
+ ret['VCENTER_INSTANCE_ID'] = uuid
379
+
380
+ ret.each do |key, value|
381
+ ds.update("#{key}=\"#{value}\"", true)
308
382
  end
383
+ end
384
+
385
+ tmpl = <<-EOT
386
+ NAME = "#{options[:vmtemplate_name] || options[:name]}"
387
+ CPU = "1"
388
+ VCPU = "1"
389
+ MEMORY = "128"
390
+ HYPERVISOR = "vcenter"
391
+ EOT
392
+
393
+ tmpl << "DISK = [ IMAGE_ID = \"#{image.id}\" ]" if image
394
+
395
+ ret.each do |key, value|
396
+ tmpl << "#{key}=\"#{value}\"\n"
397
+ end
398
+
399
+ vmtpl = Template.new(Template.build_xml, @client)
400
+
401
+ rc = vmtpl.allocate(tmpl)
402
+
403
+ if OpenNebula.is_error?(rc)
404
+ rc
309
405
  else
310
- raise "Couldn't find vcenterrc conf file. " \
311
- ' Please use the --template file to define' \
312
- ' a VM Template ID if needed.'
406
+ Template.new_with_id(vmtpl.id, @client)
313
407
  end
314
408
  end
315
409
 
410
+ def update_options_with_template(options)
411
+ path = "#{VAR_LOCATION}/remotes/etc/vmm/vcenter/vcenterrc"
412
+
413
+ return options unless File.file?(path)
414
+
415
+ config = YAML.load_file(path)
416
+
417
+ return options unless config.key?(:default_template)
418
+
419
+ options[:template] = config[:default_template]
420
+
421
+ options
422
+ end
423
+
316
424
  # Creates a VM template based on the APPTEMPLATE64 attribute
317
425
  # @param [Hash] options
318
426
  # :export_name [String] name of the vm template
@@ -334,19 +442,19 @@ module OpenNebula::MarketPlaceAppExt
334
442
  options = update_options_with_template(options)
335
443
  end
336
444
 
337
- template_id = options[:template]
338
-
339
- if template_id < 0
340
- return
341
- end
445
+ if !options[:template] || options[:template] == -1
446
+ vmtpl = create_vcenter_template(ds, options)
447
+ else
448
+ template_id = options[:template]
449
+ template = Template.new_with_id(template_id, @client)
342
450
 
343
- template = Template.new_with_id(template_id, @client)
451
+ vmtpl_id = template.clone(
452
+ options[:vmtemplate_name] || options[:name]
453
+ )
344
454
 
345
- vmtpl_id = template.clone(
346
- options[:vmtemplate_name] || options[:name]
347
- )
455
+ vmtpl = Template.new_with_id(vmtpl_id, @client)
456
+ end
348
457
 
349
- vmtpl = Template.new_with_id(vmtpl_id, @client)
350
458
  rc = vmtpl.info
351
459
  else
352
460
  # ----------------------------------------------------------
@@ -319,10 +319,21 @@ module Service
319
319
 
320
320
  class Client
321
321
  def initialize(opts={})
322
+ endpoint = '/.one/oneflow_endpoint'
322
323
  @username = opts[:username] || ENV['ONEFLOW_USER']
323
324
  @password = opts[:password] || ENV['ONEFLOW_PASSWORD']
324
325
 
325
- url = opts[:url] || ENV['ONEFLOW_URL'] || 'http://localhost:2474'
326
+ if opts[:url]
327
+ url = opts[:url]
328
+ elsif ENV['ONEFLOW_URL']
329
+ url = ENV['ONEFLOW_URL']
330
+ elsif ENV['HOME'] && File.exists?(ENV['HOME'] + endpoint)
331
+ url = File.read(ENV['HOME'] + endpoint).strip
332
+ elsif File.exists?('/var/lib/one/.one/oneflow_endpoint')
333
+ url = File.read('/var/lib/one/.one/oneflow_endpoint').strip
334
+ else
335
+ url = 'http://localhost:2474'
336
+ end
326
337
 
327
338
  if @username.nil? && @password.nil?
328
339
  if ENV["ONE_AUTH"] and !ENV["ONE_AUTH"].empty? and File.file?(ENV["ONE_AUTH"])
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.2.1'
80
+ VERSION = '6.2.2'
81
81
  end
@@ -28,6 +28,11 @@ module OpenNebula
28
28
  log_function("INFO", message)
29
29
  end
30
30
 
31
+ # Logs an info message
32
+ def self.log_warning(message)
33
+ log_function('WARNING', message)
34
+ end
35
+
31
36
  # Logs an error message
32
37
  def self.log_error(message)
33
38
  log_function("ERROR", message)
@@ -279,6 +279,15 @@ module VCenterDriver
279
279
  rs = dc_folder.get_unimported_hosts(hpool,
280
280
  vcenter_instance_name)
281
281
 
282
+ # Select just cluster with this reference
283
+ if options[:cluster_ref]
284
+ rs.each do |_, clusters|
285
+ clusters.select! do |c|
286
+ c[:cluster_ref] == options[:cluster_ref]
287
+ end
288
+ end
289
+ end
290
+
282
291
  STDOUT.print "done!\n\n"
283
292
 
284
293
  rs.each do |dc, clusters|
data/lib/vi_helper.rb CHANGED
@@ -118,6 +118,16 @@ module VCenterDriver
118
118
  return_if_error(rc, item, exit_if_fail)
119
119
  end
120
120
 
121
+ # Since https://github.com/OpenNebula/one/issues/5689
122
+ # there two deploy_ids allowed:
123
+ # * moref, eg: vm-567
124
+ # * moref +"_" + vcenter uuid, eg:
125
+ # 2499952a-6c85-480e-b7df-4cbd2137eb69_vm-456
126
+ # This function will always return the moref
127
+ def self.get_deploy_id(deploy_id)
128
+ deploy_id.split('_')[0]
129
+ end
130
+
121
131
  def self.find_by_name(the_class, name, pool = nil, raise_if_fail = true)
122
132
  pool = one_pool(the_class, raise_if_fail) if pool.nil?
123
133
  element = pool.find {|e| e['NAME'] == name.to_s }
@@ -251,7 +261,7 @@ module VCenterDriver
251
261
  # Let's try to find the VM object only by its name
252
262
  # Let's build the VM name
253
263
  vm_prefix = host['TEMPLATE/VM_PREFIX']
254
- vm_prefix = VM_PREFIX_DEFAULT if vm_prefix.nil? || vm_prefix.empty?
264
+ vm_prefix = VM_PREFIX_DEFAULT if vm_prefix.nil?
255
265
  vm_prefix.gsub!('$i', one_vm['ID'])
256
266
  vm_name = vm_prefix + one_vm['NAME']
257
267
 
@@ -103,6 +103,7 @@ end
103
103
 
104
104
  def initialize(vi_client, ref, one_id)
105
105
  if ref
106
+ ref = VCenterDriver::VIHelper.get_deploy_id(ref)
106
107
  @item = RbVmomi::VIM::VirtualMachine.new(vi_client.vim, ref)
107
108
  check_item(@item, RbVmomi::VIM::VirtualMachine)
108
109
  end
@@ -470,7 +471,7 @@ end
470
471
  # @return String vcenter name
471
472
  def vc_name
472
473
  vm_prefix = host['TEMPLATE/VM_PREFIX']
473
- vm_prefix = VM_PREFIX_DEFAULT if vm_prefix.nil? || vm_prefix.empty?
474
+ vm_prefix = VM_PREFIX_DEFAULT if vm_prefix.nil?
474
475
 
475
476
  if !one_item['USER_TEMPLATE/VM_PREFIX'].nil?
476
477
  vm_prefix = one_item['USER_TEMPLATE/VM_PREFIX']
@@ -1713,8 +1714,13 @@ end
1713
1714
  def sync(deploy = {})
1714
1715
  extraconfig = []
1715
1716
  device_change = []
1717
+ sync_opt = nil
1716
1718
 
1717
- disks = sync_disks(:all, false)
1719
+ # Disk are only synced with :all option when VM is first created
1720
+ # NOTE: Detach actions are implemented through TM (not sync)
1721
+ sync_opt = :all if deploy[:new] == true
1722
+
1723
+ disks = sync_disks(sync_opt, false)
1718
1724
  resize_unmanaged_disks
1719
1725
 
1720
1726
  if deploy[:boot] && !deploy[:boot].empty?
@@ -2306,6 +2312,7 @@ end
2306
2312
  detach_disk_array = []
2307
2313
  extra_config = []
2308
2314
  keys = disk_keys.invert
2315
+
2309
2316
  ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool)
2310
2317
  disks_each(:detached?) do |d|
2311
2318
  key = d.key.to_s
@@ -2381,8 +2388,7 @@ end
2381
2388
  # @param option [symbol] if :all is provided the
2382
2389
  # method will try to sync
2383
2390
  # all the disks (detached and not existing ones)
2384
- # otherwishe it will only sync
2385
- # the disks that are not existing
2391
+ # otherwise it will only sync the disks that are not existing
2386
2392
  #
2387
2393
  # @param execute [boolean] indicates if the reconfigure operation
2388
2394
  # is going to
@@ -2432,8 +2438,8 @@ end
2432
2438
  # https://github.com/OpenNebula/one/issues/5409
2433
2439
  if snapshots? || one_snapshots?
2434
2440
  error_msg = 'Existing sytem snapshots, cannot change disks. '
2435
- error_msg << 'Please remove all snapshots and try again.'
2436
- raise error_message
2441
+ error_msg << 'Please remove all snapshots and try again'
2442
+ raise error_msg
2437
2443
  end
2438
2444
 
2439
2445
  spec_hash = {}
@@ -2619,7 +2625,7 @@ end
2619
2625
 
2620
2626
  if snapshots? || one_snapshots?
2621
2627
  error_message = 'Existing sytem snapshots, cannot change disks'
2622
- error_message << '. Please remove all snapshots and try again.'
2628
+ error_message << '. Please remove all snapshots and try again'
2623
2629
  raise error_message
2624
2630
  end
2625
2631
 
@@ -3070,7 +3076,7 @@ end
3070
3076
  @item.ReconfigVM_Task(:spec => vm_config_spec).wait_for_completion
3071
3077
 
3072
3078
  devices.each do |device|
3073
- next unless first_ &&
3079
+ next unless first_condition &&
3074
3080
  device.key == scsi_key
3075
3081
 
3076
3082
  controller = device.deviceInfo.label
@@ -3430,6 +3436,7 @@ end
3430
3436
  config[:esx_migration_list] = 'Selected_by_DRS'
3431
3437
  end
3432
3438
 
3439
+ vc_vm.reference_all_disks
3433
3440
  vc_vm.migrate(config)
3434
3441
 
3435
3442
  vm.replace({ 'VCENTER_CCR_REF' => ccr_ref })
data/lib/vm_template.rb CHANGED
@@ -623,6 +623,23 @@ module VCenterDriver
623
623
 
624
624
  network.info
625
625
 
626
+ if nic[:ipv4] || nic[:ipv6]
627
+ ar_array = network.to_hash['VNET']['AR_POOL']['AR']
628
+ ar_array = [ar_array] if ar_array.is_a?(Hash)
629
+
630
+ ipv4, _ipv6, _arid = find_ip_in_ar(
631
+ IPAddr.new(nic[:ipv4]),
632
+ ar_array
633
+ ) if ar_array && nic[:ipv4]
634
+
635
+ _ipv4, ipv6, _arid = find_ip_in_ar(
636
+ IPAddr.new(nic[:ipv6]),
637
+ ar_array
638
+ ) if ar_array && nic[:ipv6]
639
+
640
+ return [ipv4, ipv6]
641
+ end
642
+
626
643
  # Iterate over Retrieve vCenter VM NICs
627
644
  unless vm_object.item.guest.net.empty?
628
645
  vm_object.item.guest.net.each do |net|
@@ -755,9 +772,10 @@ module VCenterDriver
755
772
  nic_tmp = "NIC=[\n"
756
773
  nic_tmp << "NETWORK_ID=\"#{one_vn.id}\",\n"
757
774
  nic_tmp << "NAME =\"VC_NIC#{nic_index}\",\n"
775
+ nic_tmp << "IP = \"#{nic[:ipv4]}\",\n" if nic[:ipv4]
758
776
 
759
777
  if vm?
760
- if nic[:mac]
778
+ if nic[:mac] && !nic[:ipv4]
761
779
  nic_tmp << "MAC=\"#{nic[:mac]}\",\n"
762
780
  end
763
781
  if nic[:ipv4_additionals]
@@ -813,6 +831,7 @@ module VCenterDriver
813
831
  ar_tmp = create_ar(nic)
814
832
  network_found.add_ar(ar_tmp)
815
833
  end
834
+
816
835
  ipv4, ipv6 = find_ips_in_network(network_found, vm_object,
817
836
  nic, true)
818
837
  network_found.info
@@ -824,8 +843,10 @@ module VCenterDriver
824
843
  if nic[:mac] && ipv4.empty? && ipv6.empty?
825
844
  nic_tmp << "MAC=\"#{nic[:mac]}\",\n"
826
845
  end
846
+
827
847
  nic_tmp << "IP=\"#{ipv4}\"," unless ipv4.empty?
828
848
  nic_tmp << "IP6=\"#{ipv6}\"," unless ipv6.empty?
849
+
829
850
  if nic[:ipv4_additionals]
830
851
  nic_tmp <<
831
852
  'VCENTER_ADDITIONALS_IP4'\
@@ -1053,7 +1074,13 @@ module VCenterDriver
1053
1074
  ar_tmp << "]\n"
1054
1075
 
1055
1076
  if vm?
1056
- ar_tmp << create_ar(nic, true)
1077
+ ar_tmp << create_ar(nic, false, nic[:ipv4]) if nic[:ipv4]
1078
+
1079
+ if nic[:ipv6]
1080
+ ar_tmp << create_ar(nic, false, nil, nic[:ipv6])
1081
+ end
1082
+
1083
+ ar_tmp << create_ar(nic, true) if !nic[:ipv4] && !nic[:ipv6]
1057
1084
  end
1058
1085
 
1059
1086
  one_vnet[:one] << ar_tmp
@@ -1108,6 +1135,23 @@ module VCenterDriver
1108
1135
  nic_index = 0
1109
1136
 
1110
1137
  vc_nics.each do |nic|
1138
+ [:ipv4, :ipv6].each do |type|
1139
+ if nic[type]
1140
+ opts[type].shift if opts[type]
1141
+ next
1142
+ end
1143
+
1144
+ begin
1145
+ ip = opts[type].shift if opts[type]
1146
+
1147
+ # Check if it is a valid IP
1148
+ IPAddr.new(ip)
1149
+
1150
+ nic[type] = ip
1151
+ rescue StandardError
1152
+ end
1153
+ end
1154
+
1111
1155
  # Check if the network already exists
1112
1156
  network_found =
1113
1157
  VCenterDriver::VIHelper
data/lib/vmm_importer.rb CHANGED
@@ -46,7 +46,8 @@ module VCenterDriver
46
46
  vm_ref = selected['DEPLOY_ID'] || selected[:wild]['DEPLOY_ID']
47
47
  vm = selected[:one_item] || build
48
48
  template = selected[:template] || import_tmplt
49
- host_id = selected[:host] || @list.keys[0]
49
+ template = "DEPLOY_ID = #{vm_ref}\n" + template
50
+ host_id = selected[:host] || @list.keys[0]
50
51
 
51
52
  vc_uuid = @vi_client.vim.serviceContent.about.instanceUuid
52
53
  vc_name = @vi_client.vim.host
@@ -72,13 +73,15 @@ module VCenterDriver
72
73
  template << template_disks
73
74
 
74
75
  opts = {
75
- :vi_client => @vi_client,
76
- :vc_uuid => vc_uuid,
77
- :npool => npool,
78
- :hpool => hpool,
79
- :vcenter => vc_name,
76
+ :vi_client => @vi_client,
77
+ :vc_uuid => vc_uuid,
78
+ :npool => npool,
79
+ :hpool => hpool,
80
+ :vcenter => vc_name,
80
81
  :template_moref => vm_ref,
81
- :vm_object => vc_vm
82
+ :vm_object => vc_vm,
83
+ :ipv4 => selected[:ipv4],
84
+ :ipv6 => selected[:ipv6]
82
85
  }
83
86
 
84
87
  # Create images or get nics information for template
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.2.1
4
+ version: 6.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenNebula
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-10 00:00:00.000000000 Z
11
+ date: 2022-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri