From 772e1d3f26fee088a6c4d8938da1548970cccf2a Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Wed, 14 Nov 2018 13:14:49 -0500 Subject: [PATCH] Check EmsEvents when disconnecting storage Instead of the EventHandler calling disconnect_storage when DestroyVM_Task_Complete is processed check the ems_events for UnregisterVM_Complete. https://bugzilla.redhat.com/show_bug.cgi?id=1644770 --- .../infra_manager/vm_or_template_shared.rb | 1 + .../vm_or_template_shared/disconnect.rb | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared/disconnect.rb diff --git a/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared.rb b/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared.rb index c74c570e7..07059a005 100644 --- a/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared.rb +++ b/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared.rb @@ -2,6 +2,7 @@ module ManageIQ::Providers::Vmware::InfraManager::VmOrTemplateShared extend ActiveSupport::Concern include_concern 'RefreshOnScan' include_concern 'Scanning' + include_concern 'Disconnect' POWER_STATES = { "poweredOn" => "on", diff --git a/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared/disconnect.rb b/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared/disconnect.rb new file mode 100644 index 000000000..fc180978d --- /dev/null +++ b/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared/disconnect.rb @@ -0,0 +1,27 @@ +module ManageIQ::Providers::Vmware::InfraManager::VmOrTemplateShared::Disconnect + extend ActiveSupport::Concern + + def disconnect_storage + # If the VM was unregistered don't clear the storage because the disks + # are still on the underlying datastore + super unless unregistered? + end + + def destroyed? + disconnect_events.last&.event_type == "DestroyVM_Task_Complete" + end + + def unregistered? + disconnect_events.last&.event_type == "UnregisterVM_Complete" + end + + private + + def disconnect_events + ems_events.where(:event_type => disconnect_event_types) + end + + def disconnect_event_types + %w(DestroyVM_Task_Complete UnregisterVM_Complete) + end +end