opennebula 6.0.0.1 → 6.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)
@@ -36,14 +36,25 @@ end
36
36
 
37
37
  ENV['LANG'] = 'C'
38
38
 
39
+ # %%RUBYGEMS_SETUP_BEGIN%%
39
40
  if File.directory?(GEMS_LOCATION)
40
41
  real_gems_path = File.realpath(GEMS_LOCATION)
41
42
  if !defined?(Gem) || Gem.path != [real_gems_path]
42
43
  $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
43
- require 'rubygems'
44
- Gem.use_paths(real_gems_path)
44
+
45
+ # Suppress warnings from Rubygems
46
+ # https://github.com/OpenNebula/one/issues/5379
47
+ begin
48
+ verb = $VERBOSE
49
+ $VERBOSE = nil
50
+ require 'rubygems'
51
+ Gem.use_paths(real_gems_path)
52
+ ensure
53
+ $VERBOSE = verb
54
+ end
45
55
  end
46
56
  end
57
+ # %%RUBYGEMS_SETUP_END%%
47
58
 
48
59
  $LOAD_PATH << LIB_LOCATION + '/ruby/vendors/rbvmomi/lib'
49
60
  $LOAD_PATH << LIB_LOCATION + '/ruby'
@@ -122,19 +133,10 @@ end
122
133
  # Helper functions #
123
134
  # ---------------------------------------------------------------------------- #
124
135
 
125
- def error_message(message)
126
- error_str = "ERROR MESSAGE --8<------\n"
127
- error_str << message
128
- error_str << "\nERROR MESSAGE ------>8--"
129
-
130
- error_str
131
- end
132
-
133
136
  def check_valid(parameter, label)
134
137
  return unless parameter.nil? || parameter.empty?
135
138
 
136
- STDERR.puts error_message("The parameter '#{label}'\
137
- is required for this action.")
139
+ STDERR.puts "The parameter '#{label}' is required for this action."
138
140
  exit(-1)
139
141
  end
140
142
 
@@ -496,9 +496,9 @@ module VCenterDriver
496
496
  end
497
497
 
498
498
  #
499
- # Create and allocate a Opennebula Object.
499
+ # Create and allocate a OpenNebula Object.
500
500
  #
501
- # @param info [String] Info passed to opennebula Core.
501
+ # @param info [String] Info passed to OpenNebula Core.
502
502
  #
503
503
  # @return [&block] the allocated object through a block.
504
504
  #
@@ -33,14 +33,27 @@ module VCenterDriver
33
33
  end
34
34
  end
35
35
 
36
- if File.directory?(GEMS_LOCATION)
37
- real_gems_path = File.realpath(GEMS_LOCATION)
38
- if !defined?(Gem) || Gem.path != [real_gems_path]
39
- $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
36
+ # rubocop: disable all
37
+ # %%RUBYGEMS_SETUP_BEGIN%%
38
+ if File.directory?(GEMS_LOCATION)
39
+ real_gems_path = File.realpath(GEMS_LOCATION)
40
+ if !defined?(Gem) || Gem.path != [real_gems_path]
41
+ $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
42
+
43
+ # Suppress warnings from Rubygems
44
+ # https://github.com/OpenNebula/one/issues/5379
45
+ begin
46
+ verb = $VERBOSE
47
+ $VERBOSE = nil
40
48
  require 'rubygems'
41
49
  Gem.use_paths(real_gems_path)
50
+ ensure
51
+ $VERBOSE = verb
42
52
  end
43
53
  end
54
+ end
55
+ # %%RUBYGEMS_SETUP_END%%
56
+ # rubocop: enable all
44
57
 
45
58
  $LOAD_PATH << RUBY_LIB_LOCATION
46
59
 
@@ -1041,7 +1054,8 @@ module VCenterDriver
1041
1054
  else
1042
1055
  if snapshots?
1043
1056
  error = 'Disk metadata not present and snapshots exist. ' \
1044
- 'OpenNebula cannot manage this VM.'
1057
+ 'Please remove imported VM with "onevm recover ' \
1058
+ '--delete-db".'
1045
1059
  raise error
1046
1060
  end
1047
1061
 
@@ -2401,6 +2415,15 @@ module VCenterDriver
2401
2415
 
2402
2416
  # Attach DISK to VM (hotplug)
2403
2417
  def attach_disk(disk)
2418
+ # Adding a new disk in newer vSphere versions
2419
+ # automatically cleans all system snapshots
2420
+ # https://github.com/OpenNebula/one/issues/5409
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
+ end
2426
+
2404
2427
  spec_hash = {}
2405
2428
  device_change = []
2406
2429
 
@@ -2582,6 +2605,13 @@ module VCenterDriver
2582
2605
  def detach_disk(disk)
2583
2606
  return unless disk.exists?
2584
2607
 
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
2613
+ end
2614
+
2585
2615
  spec_hash = {}
2586
2616
  spec_hash[:extraConfig] = [disk.config(:delete)]
2587
2617
  spec_hash[:deviceChange] = [{
@@ -2611,15 +2641,15 @@ module VCenterDriver
2611
2641
  # - The disk is managed by OpenNebula
2612
2642
  detachable= !(one_vm['LCM_STATE'].to_i == 11 && !disk.managed?)
2613
2643
  detachable &&= disk.exists?
2614
-
2644
+
2615
2645
  return unless detachable
2616
2646
 
2617
2647
  detach_disk(disk)
2618
2648
 
2619
2649
  # Check if we want to keep the non persistent disk
2620
2650
  keep_non_persistent_disks =
2621
- VCenterDriver::CONFIG[:keep_non_persistent_disks]
2622
-
2651
+ VCenterDriver::CONFIG[:keep_non_persistent_disks]
2652
+
2623
2653
  return if keep_non_persistent_disks == true
2624
2654
 
2625
2655
  disk.destroy
@@ -2816,7 +2846,7 @@ module VCenterDriver
2816
2846
  # Convert VM to template in vCenter
2817
2847
  mark_as_template
2818
2848
 
2819
- # Edit the Opennebula template
2849
+ # Edit the OpenNebula template
2820
2850
  one_client = OpenNebula::Client.new
2821
2851
  template_id = one_item['TEMPLATE/TEMPLATE_ID']
2822
2852
  new_template = OpenNebula::Template.new_with_id(template_id,
@@ -2867,6 +2897,15 @@ module VCenterDriver
2867
2897
  self['rootSnapshot'] && !self['rootSnapshot'].empty?
2868
2898
  end
2869
2899
 
2900
+ def one_snapshots?
2901
+ begin
2902
+ !one_item['TEMPLATE/SNAPSHOT'].nil?
2903
+ rescue StandardError
2904
+ # one_item may not be retrieved if deploy_id hasn't been set
2905
+ false
2906
+ end
2907
+ end
2908
+
2870
2909
  def instantiated_as_persistent?
2871
2910
  begin
2872
2911
  !one_item['TEMPLATE/CLONING_TEMPLATE_ID'].nil?
@@ -3032,7 +3071,8 @@ module VCenterDriver
3032
3071
  # Create a snapshot for the VM
3033
3072
  def create_snapshot(snap_id, snap_name)
3034
3073
  memory_dumps = true
3035
- memory_dumps = CONFIG[:memory_dumps] unless CONFIG[:memory_dumps].nil?
3074
+ memory_dumps = CONFIG[:memory_dumps] \
3075
+ unless CONFIG[:memory_dumps].nil?
3036
3076
 
3037
3077
  snapshot_hash = {
3038
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?
@@ -1573,9 +1577,8 @@ module VCenterDriver
1573
1577
  str << "]\n"
1574
1578
 
1575
1579
  if annotation.nil? || annotation.empty?
1576
- str << 'DESCRIPTION = "vCenter Template \
1577
- imported by OpenNebula' \
1578
- " from Cluster #{ccr_name}\"\n"
1580
+ str << 'DESCRIPTION = "vCenter Template imported by OpenNebula'\
1581
+ " from Cluster #{ccr_name}\"\n"
1579
1582
  else
1580
1583
  notes = annotation.gsub('\\', '\\\\').gsub('"', '\\"')
1581
1584
  str << "DESCRIPTION = \"#{notes}\"\n"
data/lib/vmm_importer.rb CHANGED
@@ -54,6 +54,14 @@ module VCenterDriver
54
54
 
55
55
  vc_vm = VCenterDriver::VirtualMachine.new_without_id(@vi_client,
56
56
  vm_ref)
57
+
58
+ # Importing Wild VMs with snapshots is not supported
59
+ # https://github.com/OpenNebula/one/issues/1268
60
+ if vc_vm.snapshots? && vc_vm.disk_keys.empty?
61
+ raise 'Disk metadata not present and snapshots exist, '\
62
+ 'cannot import this VM'
63
+ end
64
+
57
65
  vname = vc_vm['name']
58
66
 
59
67
  type = { :object => 'VM', :id => vname }
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.0.1
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-04-28 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,6 +223,7 @@ 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