From fa49cf6bbc6e66d5373f03ed62bc1e37f6127ec9 Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Fri, 23 Feb 2018 09:34:48 -0500 Subject: [PATCH] Merge pull request #184 from VojkoR/destroy_vm_for_vmware_provider Added support for VM delete (cherry picked from commit 1dfa303668712cc1ee028d640cfbbaed734ca5f3) https://bugzilla.redhat.com/show_bug.cgi?id=1552683 --- .../manageiq/providers/vmware/cloud_manager.rb | 6 ++++++ .../vmware/cloud_manager/vm/operations.rb | 17 +++++++++++++++++ .../providers/vmware/cloud_manager/vm_spec.rb | 15 +++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/app/models/manageiq/providers/vmware/cloud_manager.rb b/app/models/manageiq/providers/vmware/cloud_manager.rb index 14f8065b5..c4d69acd0 100644 --- a/app/models/manageiq/providers/vmware/cloud_manager.rb +++ b/app/models/manageiq/providers/vmware/cloud_manager.rb @@ -80,4 +80,10 @@ def vm_restart(vm, _options = {}) rescue => err $vcloud_log.error("vm=[#{vm.name}], error: #{err}") end + + def vm_destroy(vm, _options = {}) + vm.vm_destroy + rescue => err + $vcloud_log.error("vm=[#{vm.name}], error: #{err}") + end end diff --git a/app/models/manageiq/providers/vmware/cloud_manager/vm/operations.rb b/app/models/manageiq/providers/vmware/cloud_manager/vm/operations.rb index b6bf7cb2b..94a04d64f 100644 --- a/app/models/manageiq/providers/vmware/cloud_manager/vm/operations.rb +++ b/app/models/manageiq/providers/vmware/cloud_manager/vm/operations.rb @@ -1,3 +1,20 @@ module ManageIQ::Providers::Vmware::CloudManager::Vm::Operations + extend ActiveSupport::Concern + include_concern 'Power' + + included do + supports :terminate do + unsupported_reason_add(:terminate, "The VM is powered on") unless current_state == "off" + end + end + + def raw_destroy + raise "VM has no #{ui_lookup(:table => "ext_management_systems")}, unable to destroy VM" unless ext_management_system + ext_management_system.with_provider_connection do |service| + response = service.delete_vapp(ems_ref) + service.process_task(response.body) + end + update_attributes!(:raw_power_state => "off") + end end diff --git a/spec/models/manageiq/providers/vmware/cloud_manager/vm_spec.rb b/spec/models/manageiq/providers/vmware/cloud_manager/vm_spec.rb index e452b02ad..5ab36c506 100644 --- a/spec/models/manageiq/providers/vmware/cloud_manager/vm_spec.rb +++ b/spec/models/manageiq/providers/vmware/cloud_manager/vm_spec.rb @@ -35,4 +35,19 @@ include_examples "Vm operation is not available" end end + + context "when destroyed" do + let(:ems) { FactoryGirl.create(:ems_vmware_cloud) } + let(:vm) { FactoryGirl.create(:vm_vmware_cloud, :ext_management_system => ems) } + let(:connection) { double("connection") } + let(:response) { double("response", :body => nil) } + + it "deletes the virtual machine" do + allow(ems).to receive(:with_provider_connection).and_yield(connection) + expect(connection).to receive(:delete_vapp).and_return(response) + expect(connection).to receive(:process_task).and_return(true) + + vm.raw_destroy + end + end end