opennebula 6.0.3 → 6.2.1

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.
@@ -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
@@ -312,10 +315,13 @@ module VCenterDriver
312
315
 
313
316
  cluster_list_str = "\n"
314
317
  cluster_list.each do |key, value|
318
+ name = VCenterDriver::VcImporter.sanitize(
319
+ value
320
+ )
315
321
  cluster_list_str << " - \e[94mID: " \
316
322
  << key \
317
323
  << "\e[39m - NAME: " \
318
- << value << "\n"
324
+ << name << "\n"
319
325
  end
320
326
 
321
327
  STDOUT.print "\n #{cluster_list_str}"
@@ -330,15 +336,19 @@ module VCenterDriver
330
336
  end
331
337
  end
332
338
 
339
+ cluster_name = VCenterDriver::VcImporter.sanitize(
340
+ cluster[:cluster_name]
341
+ )
342
+
333
343
  # Check if the OpenNebula Cluster exists, and reuse it
334
344
  one_cluster_id ||= cluster_list
335
- .key(cluster[:cluster_name])
345
+ .key(cluster_name)
336
346
 
337
347
  if !one_cluster_id
338
348
  one_cluster = VCenterDriver::VIHelper
339
349
  .new_one_item(OpenNebula::Cluster)
340
350
  rc = one_cluster
341
- .allocate((cluster[:cluster_name]).to_s)
351
+ .allocate(cluster_name.to_s)
342
352
  if ::OpenNebula.is_error?(rc)
343
353
  # rubocop:disable Layout/LineLength
344
354
  STDOUT.puts " Error creating OpenNebula cluster: #{rc.message}\n"
@@ -355,7 +365,7 @@ module VCenterDriver
355
365
  rpool,
356
366
  one_cluster_id)
357
367
  # rubocop:disable Layout/LineLength
358
- STDOUT.puts "\n OpenNebula host \e[92m#{cluster[:cluster_name]}\e[39m with"\
368
+ STDOUT.puts "\n OpenNebula host \e[92m#{cluster_name}\e[39m with"\
359
369
  " ID \e[94m#{one_host.id}\e[39m successfully created."
360
370
  STDOUT.puts
361
371
  # rubocop:enable Layout/LineLength
@@ -369,9 +379,11 @@ module VCenterDriver
369
379
  error_msg = "\nError: #{e.message}\n"
370
380
  error_msg << "#{e.backtrace}\n" \
371
381
  if VCenterDriver::CONFIG[:debug_information]
372
- STDOUT.puts error_msg
382
+ STDERR.puts error_msg
383
+ raise_error = true
373
384
  ensure
374
385
  vi_client.close_connection if vi_client
386
+ raise if raise_error
375
387
  end
376
388
  end
377
389
 
@@ -579,8 +579,6 @@ end
579
579
  end
580
580
  end
581
581
 
582
- dc = cluster.datacenter
583
-
584
582
  vcenter_vm_folder = drv_action['USER_TEMPLATE/VCENTER_VM_FOLDER']
585
583
 
586
584
  if !vcenter_vm_folder.nil? && !vcenter_vm_folder.empty?
@@ -1090,14 +1088,22 @@ end
1090
1088
  #
1091
1089
  # @return [Hash ("String" => self.Nic)] Model representation of nics
1092
1090
  def info_nics
1091
+ keep_mac_on_imported = false
1092
+ keep_mac_on_imported = CONFIG[:keep_mac_on_imported] \
1093
+ unless CONFIG[:keep_mac_on_imported].nil?
1094
+
1093
1095
  @nics = { :macs => {} }
1094
1096
 
1095
1097
  vc_nics = vcenter_nics_list
1096
1098
  one_nics = one_nics_get
1097
1099
 
1098
1100
  one_nics.each do |one_nic|
1099
- index = one_nic['NIC_ID']
1100
- mac = one_nic['MAC']
1101
+ index = one_nic['NIC_ID']
1102
+ if keep_mac_on_imported && one_nic['MAC_IMPORTED']
1103
+ mac = one_nic['MAC_IMPORTED']
1104
+ else
1105
+ mac = one_nic['MAC']
1106
+ end
1101
1107
  vc_dev = query_nic(mac, vc_nics)
1102
1108
 
1103
1109
  if vc_dev
@@ -1975,7 +1981,7 @@ end
1975
1981
  end
1976
1982
 
1977
1983
  card_spec = {
1978
- :key => Time.now.utc.strftime('%Y%m%d%M%S%L').to_i,
1984
+ :key => 0,
1979
1985
  :deviceInfo => {
1980
1986
  :label => 'net' + card_num.to_s,
1981
1987
  :summary => pg_name
@@ -1985,6 +1991,9 @@ end
1985
1991
  :macAddress => mac,
1986
1992
  :unitNumber => unumber
1987
1993
  }
1994
+ if @vi_client.vim.serviceContent.about.apiVersion.to_f >= 7.0
1995
+ card_spec[:key] = Time.now.utc.strftime('%m%d%M%S%L').to_i
1996
+ end
1988
1997
 
1989
1998
  if (limit || rsrv) && (limit > 0)
1990
1999
  ra_spec = {}
@@ -2121,7 +2130,7 @@ end
2121
2130
  end
2122
2131
 
2123
2132
  card_spec = {
2124
- :key => Time.now.utc.strftime('%Y%m%d%M%S%L').to_i,
2133
+ :key => 0,
2125
2134
  :deviceInfo => {
2126
2135
  :label => 'net' + card_num.to_s,
2127
2136
  :summary => pg_name
@@ -2129,6 +2138,9 @@ end
2129
2138
  :backing => backing,
2130
2139
  :addressType => 'generated'
2131
2140
  }
2141
+ if @vi_client.vim.serviceContent.about.apiVersion.to_f >= 7.0
2142
+ card_spec[:key] = Time.now.utc.strftime('%m%d%M%S%L').to_i
2143
+ end
2132
2144
 
2133
2145
  if (limit || rsrv) && (limit > 0)
2134
2146
  ra_spec = {}
@@ -2419,7 +2431,7 @@ end
2419
2431
  # automatically cleans all system snapshots
2420
2432
  # https://github.com/OpenNebula/one/issues/5409
2421
2433
  if snapshots? || one_snapshots?
2422
- error_msg = 'Existing system snapshots, cannot change disks. '
2434
+ error_msg = 'Existing sytem snapshots, cannot change disks. '
2423
2435
  error_msg << 'Please remove all snapshots and try again.'
2424
2436
  raise error_message
2425
2437
  end
@@ -2606,9 +2618,8 @@ end
2606
2618
  return unless disk.exists?
2607
2619
 
2608
2620
  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.'
2621
+ error_message = 'Existing sytem snapshots, cannot change disks'
2622
+ error_message << '. Please remove all snapshots and try again.'
2612
2623
  raise error_message
2613
2624
  end
2614
2625
 
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?
@@ -96,6 +96,90 @@ module VCenterDriver
96
96
  @vi_client.vim.serviceContent.about.instanceUuid rescue nil
97
97
  end
98
98
 
99
+ def save_as_linked_clones(name)
100
+ error = nil
101
+
102
+ disks = @item.config.hardware.device.grep(
103
+ RbVmomi::VIM::VirtualMachine
104
+ )
105
+ disks.select {|x| x.backing.parent.nil? }.each do |disk|
106
+ spec = {
107
+ :deviceChange => [
108
+ {
109
+ :operation => :remove,
110
+ :device => disk
111
+ },
112
+ {
113
+ :operation => :add,
114
+ :fileOperation => :create,
115
+ :device => disk.dup.tap do |x|
116
+ x.backing = x.backing.dup
117
+ x.backing.fileName =
118
+ "[#{disk.backing.datastore.name}]"
119
+ x.backing.parent = disk.backing
120
+ end
121
+ }
122
+ ]
123
+ }
124
+ @item.ReconfigVM_Task(
125
+ :spec => spec
126
+ ).wait_for_completion
127
+ end
128
+
129
+ relocateSpec = RbVmomi::VIM.VirtualMachineRelocateSpec(
130
+ :diskMoveType => :moveChildMostDiskBacking
131
+ )
132
+
133
+ spec = RbVmomi::VIM.VirtualMachineCloneSpec(
134
+ :location => relocateSpec,
135
+ :powerOn => false,
136
+ :template => true
137
+ )
138
+
139
+ new_template = @item.CloneVM_Task(
140
+ :folder => @item.parent,
141
+ :name => name,
142
+ :spec => spec
143
+ ).wait_for_completion
144
+
145
+ new_vm_template_ref = new_template._ref
146
+
147
+ one_client = OpenNebula::Client.new
148
+ importer = VCenterDriver::VmImporter.new(
149
+ one_client,
150
+ @vi_client
151
+ )
152
+
153
+ importer.retrieve_resources({})
154
+ importer.get_indexes(new_vm_template_ref)
155
+
156
+ importer.process_import(
157
+ new_vm_template_ref,
158
+ {
159
+ new_vm_template_ref.to_s => {
160
+ :type => 'default',
161
+ :linked_clone => '1',
162
+ :copy => '0',
163
+ :name => '',
164
+ :folder => ''
165
+ }
166
+ }
167
+ )
168
+
169
+ begin
170
+ importer.output[:success][0][:id][0]
171
+ rescue StandardError => e
172
+ error = 'Creating linked clone VM Template' \
173
+ " failed due to \"#{e.message}\".\n"
174
+
175
+ if VCenterDriver::CONFIG[:debug_information]
176
+ error += " #{e.backtrace}\n"
177
+ end
178
+ end
179
+
180
+ [error, new_vm_template_ref]
181
+ end
182
+
99
183
  def create_template_copy(template_name)
100
184
  error = nil
101
185
  template_ref = nil
@@ -733,6 +817,9 @@ module VCenterDriver
733
817
  nic, true)
734
818
  network_found.info
735
819
 
820
+ if nic[:mac]
821
+ nic_tmp << "MAC_IMPORTED=\"#{nic[:mac]}\",\n"
822
+ end
736
823
  # This is the existing nic info
737
824
  if nic[:mac] && ipv4.empty? && ipv6.empty?
738
825
  nic_tmp << "MAC=\"#{nic[:mac]}\",\n"
@@ -1832,12 +1919,10 @@ module VCenterDriver
1832
1919
  # the template if something go wrong
1833
1920
  if copy
1834
1921
  error, template_copy_ref =
1835
- selected[:template]
1836
- .create_template_copy(
1837
- opts[:name]
1838
- )
1922
+ selected[:template].save_as_linked_clones(opts[:name])
1923
+
1839
1924
  unless template_copy_ref
1840
- raise 'There is a problem creating creating' \
1925
+ raise 'There is a problem creating ' \
1841
1926
  "your copy: #{error}"
1842
1927
  end
1843
1928
 
@@ -1890,68 +1975,70 @@ module VCenterDriver
1890
1975
  working_template[:one] <<
1891
1976
  "VCENTER_TEMPLATE_NAME=\"#{selected[:name]}\"\n"
1892
1977
 
1893
- create(working_template[:one]) do |one_object, id|
1894
- res[:id] << id
1978
+ unless copy
1979
+ create(working_template[:one]) do |one_object, id|
1980
+ res[:id] << id
1895
1981
 
1896
- type = { :object => 'template', :id => id }
1897
- error, template_disks, allocated_images =
1898
- template
1899
- .import_vcenter_disks(
1900
- vc_uuid,
1901
- dpool,
1902
- ipool,
1903
- type
1904
- )
1982
+ type = { :object => 'template', :id => id }
1983
+ error, template_disks, allocated_images =
1984
+ template
1985
+ .import_vcenter_disks(
1986
+ vc_uuid,
1987
+ dpool,
1988
+ ipool,
1989
+ type
1990
+ )
1905
1991
 
1906
- if allocated_images
1907
- # rollback stack
1908
- allocated_images.reverse.each do |i|
1909
- @rollback.unshift(Raction.new(i, :delete))
1992
+ if allocated_images
1993
+ # rollback stack
1994
+ allocated_images.reverse.each do |i|
1995
+ @rollback.unshift(Raction.new(i, :delete))
1996
+ end
1910
1997
  end
1911
- end
1912
- raise error unless error.empty?
1998
+ raise error unless error.empty?
1913
1999
 
1914
- working_template[:one] << template_disks
2000
+ working_template[:one] << template_disks
1915
2001
 
1916
- if template_copy_ref
1917
- template_moref = template_copy_ref
1918
- else
1919
- template_moref = selected[:vcenter_ref]
1920
- end
2002
+ if template_copy_ref
2003
+ template_moref = template_copy_ref
2004
+ else
2005
+ template_moref = selected[:vcenter_ref]
2006
+ end
1921
2007
 
1922
- opts_nics = {
1923
- :vi_client => @vi_client,
1924
- :vc_uuid => vc_uuid,
1925
- :npool => npool,
1926
- :hpool => hpool,
1927
- :vcenter => vcenter,
1928
- :template_moref => template_moref,
1929
- :vm_object => nil
1930
- }
2008
+ opts_nics = {
2009
+ :vi_client => @vi_client,
2010
+ :vc_uuid => vc_uuid,
2011
+ :npool => npool,
2012
+ :hpool => hpool,
2013
+ :vcenter => vcenter,
2014
+ :template_moref => template_moref,
2015
+ :vm_object => nil
2016
+ }
1931
2017
 
1932
- error, template_nics, _ar_ids, allocated_nets =
1933
- template
1934
- .import_vcenter_nics(
1935
- opts_nics,
1936
- id,
1937
- dc
1938
- )
2018
+ error, template_nics, _ar_ids, allocated_nets =
2019
+ template
2020
+ .import_vcenter_nics(
2021
+ opts_nics,
2022
+ id,
2023
+ dc
2024
+ )
1939
2025
 
1940
- if allocated_nets
1941
- # rollback stack
1942
- allocated_nets.reverse.each do |n|
1943
- @rollback.unshift(Raction.new(n, :delete))
2026
+ if allocated_nets
2027
+ # rollback stack
2028
+ allocated_nets.reverse.each do |n|
2029
+ @rollback.unshift(Raction.new(n, :delete))
2030
+ end
1944
2031
  end
1945
- end
1946
- raise error unless error.empty?
2032
+ raise error unless error.empty?
1947
2033
 
1948
- working_template[:one] << template_nics
1949
- working_template[:one] << rp_opts(
1950
- opts[:type],
1951
- opts[:resourcepool]
1952
- )
2034
+ working_template[:one] << template_nics
2035
+ working_template[:one] << rp_opts(
2036
+ opts[:type],
2037
+ opts[:resourcepool]
2038
+ )
1953
2039
 
1954
- one_object.update(working_template[:one])
2040
+ one_object.update(working_template[:one])
2041
+ end
1955
2042
  end
1956
2043
 
1957
2044
  res