diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb index f7688dd17e..7d87a53bec 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -1810,6 +1810,15 @@ module VCenterDriver # Attach DISK to VM (hotplug) def attach_disk(disk) + # Adding a new disk in newer vSphere versions + # automatically cleans all system snapshots + # https://github.com/OpenNebula/one/issues/5409 + if snapshots? or one_snapshots? + error_message = 'Existing sytem snapshots, cannot change disks. ' + error_message << 'Please remove all snapshots and try again.' + raise error_message + end + spec_hash = {} device_change = [] @@ -1935,6 +1944,12 @@ module VCenterDriver def detach_disk(disk) return unless disk.exists? + if snapshots? or one_snapshots? + error_message = 'Existing sytem snapshots, cannot change disks. ' + error_message << 'Please remove all snapshots and try again.' + raise error_message + end + spec_hash = {} spec_hash[:extraConfig] = [disk.config(:delete)] spec_hash[:deviceChange] = [{ @@ -2191,6 +2206,15 @@ module VCenterDriver self['rootSnapshot'] && !self['rootSnapshot'].empty? end + def one_snapshots? + begin + !one_item['TEMPLATE/SNAPSHOT'].nil? + rescue StandardError + # one_item may not be retrieved if deploy_id hasn't been set + false + end + end + def instantiated_as_persistent? begin !!one_item["TEMPLATE/CLONING_TEMPLATE_ID"]