opennebula 6.1.90.pre → 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
- SHA1:
3
- metadata.gz: 2297734850551fc2c89b8d6bbccd43408724e330
4
- data.tar.gz: e7bc524512feaa2dd9215214aa2b273dd6a9f8d5
2
+ SHA256:
3
+ metadata.gz: 9492453d246b5d413a5902766bda7526160e953c1e6072d242509ebff8df73bc
4
+ data.tar.gz: eb349b7f7f2a87b29cbbae06ec35db4131db8baf96e5cbf4cf9875f3815e2db3
5
5
  SHA512:
6
- metadata.gz: 6df4eefbb624baa5f43f4959d188f43ef1ad36cb25814f76b829480bd26b60946489029d0623727d96881eff87efe9755a823884a7988fe68206d43fe86442af
7
- data.tar.gz: 547a06b4424a0f2dfaeec1a2c4c9ac4a5fa8854665338fe34e7ebc9b6cbd0de3682c6ade82b9360fb7e68a9c9bbb2d4fb3a89c05757652e8e98c732951e52447
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.1.90'
54
+ VERSION = '6.2.2'
55
55
 
56
56
  # #########################################################################
57
57
  # Default location for the authentication file
data/lib/datacenter.rb CHANGED
@@ -131,7 +131,10 @@ module VCenterDriver
131
131
 
132
132
  # Setting host import name and
133
133
  # replace spaces and weird characters
134
- cluster_name = (ccr['name']).to_s.tr(' ', '_')
134
+ cluster_name = ccr['name'].to_s.tr(' ', '_')
135
+ cluster_name = VCenterDriver::VcImporter.sanitize(
136
+ cluster_name
137
+ )
135
138
  cluster_name =
136
139
  VCenterDriver::VIHelper
137
140
  .one_name(
@@ -159,11 +162,28 @@ module VCenterDriver
159
162
  host_objects
160
163
  end
161
164
 
162
- def get_unimported_datastores(dpool, vcenter_instance_name, hpool)
165
+ # rubocop:disable Style/GlobalVars
166
+ def get_unimported_datastores(dpool, vcenter_instance_name, hpool, args)
163
167
  import_id = 0
164
168
  ds_objects = {}
165
169
  vcenter_uuid = vcenter_instance_uuid
166
170
 
171
+ # Selected host in OpenNebula
172
+ if $conf.nil?
173
+ one_client = OpenNebula::Client.new
174
+ else
175
+ one_client = OpenNebula::Client.new(
176
+ nil,
177
+ $conf[:one_xmlrpc]
178
+ )
179
+ end
180
+ one_host = OpenNebula::Host.new_with_id(args[:host], one_client)
181
+
182
+ rc = one_host.info
183
+ raise rc.message if OpenNebula.is_error? rc
184
+
185
+ cluster_id = one_host['CLUSTER_ID'].to_i
186
+
167
187
  # Get datacenters
168
188
  fetch! if @items.empty?
169
189
 
@@ -185,7 +205,10 @@ module VCenterDriver
185
205
  'summary.freeSpace'
186
206
  )
187
207
 
188
- ds_name = name.to_s
208
+ ds_name = VCenterDriver::VcImporter.sanitize(
209
+ name.to_s
210
+ )
211
+
189
212
  ds_total_mb = ((capacity.to_i / 1024) / 1024)
190
213
  ds_free_mb = ((free_space.to_i / 1024) / 1024)
191
214
  ds_ref = ds['_ref']
@@ -363,8 +386,15 @@ module VCenterDriver
363
386
  end
364
387
  end
365
388
 
389
+ ds_objects.keys.each do |key|
390
+ unless ds_objects[key][:cluster].include? cluster_id
391
+ ds_objects.delete key
392
+ end
393
+ end
394
+
366
395
  { vcenter_instance_name => ds_objects }
367
396
  end
397
+ # rubocop:enable Style/GlobalVars
368
398
 
369
399
  def get_unimported_templates(vi_client, tpool)
370
400
  template_objects = {}
data/lib/datastore.rb CHANGED
@@ -881,7 +881,7 @@ module VCenterDriver
881
881
  @one_class = OpenNebula::Datastore
882
882
  end
883
883
 
884
- def get_list(_args = {})
884
+ def get_list(args = {})
885
885
  dc_folder = VCenterDriver::DatacenterFolder.new(@vi_client)
886
886
 
887
887
  # one pool creation
@@ -908,7 +908,8 @@ module VCenterDriver
908
908
  .get_unimported_datastores(
909
909
  dpool,
910
910
  @vi_client.vc_name,
911
- hpool
911
+ hpool,
912
+ args
912
913
  )
913
914
  @list = rs
914
915
  end
@@ -948,7 +949,11 @@ module VCenterDriver
948
949
  clusters = opts['selected_clusters'].each.map(&:to_i)
949
950
  end
950
951
 
951
- res = { :id => [], :name => selected[:simple_name] }
952
+ name = VCenterDriver::VcImporter.sanitize(
953
+ selected[:simple_name]
954
+ )
955
+
956
+ res = { :id => [], :name => name }
952
957
  @info[:rollback] = []
953
958
  pair.each do |ds|
954
959
  create(ds[:one]) do |one_object, id|
@@ -1011,7 +1016,9 @@ module VCenterDriver
1011
1016
  message = 'Error creating the OpenNebula resource'
1012
1017
  info = selected[:one]
1013
1018
  dsid = selected[:dsid].to_i
1014
- name = selected[:name]
1019
+ name = VCenterDriver::VcImporter.sanitize(
1020
+ selected[:name]
1021
+ )
1015
1022
 
1016
1023
  rc = resource.allocate(info, dsid, false)
1017
1024
  VCenterDriver::VIHelper.check_error(rc, message)
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
 
@@ -15,7 +15,9 @@
15
15
  # ---------------------------------------------------------------------------- #
16
16
 
17
17
  require 'rubygems'
18
- require 'opennebula'
18
+ require 'opennebula/xml_utils'
19
+ require 'opennebula/client'
20
+ require 'opennebula/group_pool'
19
21
  require 'net/ldap'
20
22
  require 'yaml'
21
23
 
@@ -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
  # ----------------------------------------------------------
@@ -461,7 +569,7 @@ module OpenNebula::MarketPlaceAppExt
461
569
  def export_recursive(xpath, options)
462
570
  # Get marketplace apps pool to find roles apps
463
571
  pool = OpenNebula::MarketPlaceAppPool.new(@client)
464
- rc = pool.info
572
+ rc = pool.info_all
465
573
 
466
574
  return rc if OpenNebula.is_error?(rc)
467
575
 
@@ -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"])
@@ -89,8 +89,8 @@ module OpenNebula
89
89
  #######################################################################
90
90
 
91
91
  # Retrieves the information of the given User.
92
- def info()
93
- super(USER_METHODS[:info], 'USER')
92
+ def info(decrypt = false)
93
+ super(USER_METHODS[:info], 'USER', decrypt)
94
94
  end
95
95
 
96
96
  alias_method :info!, :info
@@ -94,6 +94,35 @@ module OpenNebula::VirtualMachineExt
94
94
  raise rc.message if OpenNebula.is_error?(rc)
95
95
  end
96
96
 
97
+ # --------------------------------------------------------------
98
+ # Ask if source VM is linked clone
99
+ # --------------------------------------------------------------
100
+ use_linked_clones = self['USER_TEMPLATE/VCENTER_LINKED_CLONES']
101
+
102
+ if use_linked_clones && use_linked_clones.downcase == 'yes'
103
+ # Delay the require until it is strictly needed
104
+ # This way we can avoid the vcenter driver dependency
105
+ # in no vCenter deployments
106
+ require 'vcenter_driver'
107
+
108
+ deploy_id = self['DEPLOY_ID']
109
+ vm_id = self['ID']
110
+ host_id = self['HISTORY_RECORDS/HISTORY[last()]/HID']
111
+ vi_client = VCenterDriver::VIClient.new_from_host(host_id)
112
+
113
+ vm = VCenterDriver::VirtualMachine.new(
114
+ vi_client,
115
+ deploy_id,
116
+ vm_id
117
+ )
118
+
119
+ error, vm_template_ref = vm.save_as_linked_clones(name)
120
+
121
+ raise error unless error.nil?
122
+
123
+ return vm_template_ref
124
+ end
125
+
97
126
  # --------------------------------------------------------------
98
127
  # Clone the source template
99
128
  # --------------------------------------------------------------
@@ -271,7 +300,7 @@ module OpenNebula::VirtualMachineExt
271
300
 
272
301
  raise rc.message if OpenNebula.is_error?(rc)
273
302
 
274
- binfo.merge!(backup_info) do |key, old_val, new_val|
303
+ binfo.merge!(backup_info) do |_key, old_val, new_val|
275
304
  new_val.nil? ? old_val : new_val
276
305
  end
277
306
 
@@ -472,7 +501,7 @@ module OpenNebula::VirtualMachineExt
472
501
  end
473
502
 
474
503
  binfo[:apps].each do |id|
475
- logger.info "Deleting applicance #{id}" if logger
504
+ logger.info "Deleting appliance #{id}" if logger
476
505
 
477
506
  papp = OpenNebula::MarketPlaceApp.new_with_id(id, @client)
478
507
 
@@ -450,6 +450,10 @@ module OpenNebula
450
450
  private
451
451
 
452
452
  def build_accounting(filter_flag, options, &block)
453
+
454
+ options[:start_time] = -1 if options[:start_time].nil?
455
+ options[:end_time] = -1 if options[:end_time].nil?
456
+
453
457
  xml_str = @client.call(VM_POOL_METHODS[:accounting],
454
458
  filter_flag,
455
459
  options[:start_time],
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.1.90'
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)
@@ -202,7 +202,7 @@ module VCenterDriver
202
202
  # index associated to his own resource opt
203
203
  #
204
204
  # Example:
205
- # {"vm-343" => {linked: '0', copy: '0'...}
205
+ # {"vm-343" => {:linked_clone: '0', :copy: '0'...}
206
206
  #
207
207
  # @ return [Hash] the list of unimported resources
208
208
  #
@@ -263,7 +263,10 @@ module VCenterDriver
263
263
 
264
264
  cluster_list = {}
265
265
  cpool.each do |c|
266
- cluster_list[c['ID']] = c['NAME'] if c['ID'].to_i != 0
266
+ name = VCenterDriver::VcImporter.sanitize(
267
+ c['NAME']
268
+ )
269
+ cluster_list[c['ID']] = name if c['ID'].to_i != 0
267
270
  end
268
271
 
269
272
  # Get OpenNebula's host pool
@@ -276,6 +279,15 @@ module VCenterDriver
276
279
  rs = dc_folder.get_unimported_hosts(hpool,
277
280
  vcenter_instance_name)
278
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
+
279
291
  STDOUT.print "done!\n\n"
280
292
 
281
293
  rs.each do |dc, clusters|
@@ -312,10 +324,13 @@ module VCenterDriver
312
324
 
313
325
  cluster_list_str = "\n"
314
326
  cluster_list.each do |key, value|
327
+ name = VCenterDriver::VcImporter.sanitize(
328
+ value
329
+ )
315
330
  cluster_list_str << " - \e[94mID: " \
316
331
  << key \
317
332
  << "\e[39m - NAME: " \
318
- << value << "\n"
333
+ << name << "\n"
319
334
  end
320
335
 
321
336
  STDOUT.print "\n #{cluster_list_str}"
@@ -330,15 +345,19 @@ module VCenterDriver
330
345
  end
331
346
  end
332
347
 
348
+ cluster_name = VCenterDriver::VcImporter.sanitize(
349
+ cluster[:cluster_name]
350
+ )
351
+
333
352
  # Check if the OpenNebula Cluster exists, and reuse it
334
353
  one_cluster_id ||= cluster_list
335
- .key(cluster[:cluster_name])
354
+ .key(cluster_name)
336
355
 
337
356
  if !one_cluster_id
338
357
  one_cluster = VCenterDriver::VIHelper
339
358
  .new_one_item(OpenNebula::Cluster)
340
359
  rc = one_cluster
341
- .allocate((cluster[:cluster_name]).to_s)
360
+ .allocate(cluster_name.to_s)
342
361
  if ::OpenNebula.is_error?(rc)
343
362
  # rubocop:disable Layout/LineLength
344
363
  STDOUT.puts " Error creating OpenNebula cluster: #{rc.message}\n"
@@ -355,7 +374,7 @@ module VCenterDriver
355
374
  rpool,
356
375
  one_cluster_id)
357
376
  # rubocop:disable Layout/LineLength
358
- STDOUT.puts "\n OpenNebula host \e[92m#{cluster[:cluster_name]}\e[39m with"\
377
+ STDOUT.puts "\n OpenNebula host \e[92m#{cluster_name}\e[39m with"\
359
378
  " ID \e[94m#{one_host.id}\e[39m successfully created."
360
379
  STDOUT.puts
361
380
  # rubocop:enable Layout/LineLength