From 8348f361adc821400c0bebef3fdf44fa447bcad1 Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Fri, 21 May 2021 15:18:17 +0200 Subject: [PATCH] B #5409: Add check to avoid changing disks in vCenter VMs if they have snapshots --- .../lib/vcenter_driver/virtual_machine.rb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) 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 8fed8d0d87..02ea019cbc 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -2415,6 +2415,15 @@ end # 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 = [] @@ -2596,6 +2605,12 @@ end 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] = [{ @@ -2881,6 +2896,15 @@ end 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'].nil?