Skip to content

Commit

Permalink
Merge pull request #12788 from pkliczewski/master
Browse files Browse the repository at this point in the history
Fetch disk info when a vm removed
(cherry picked from commit fc26fd8)

https://bugzilla.redhat.com/show_bug.cgi?id=1401003
  • Loading branch information
agrare authored and chessbyte committed Dec 2, 2016
1 parent 30a984f commit 819c079
Show file tree
Hide file tree
Showing 5 changed files with 244 additions and 1 deletion.
29 changes: 29 additions & 0 deletions app/models/manageiq/providers/redhat/infra_manager/vm.rb
Expand Up @@ -42,6 +42,35 @@ def parent_cluster
alias_method :owning_cluster, :parent_cluster
alias_method :ems_cluster, :parent_cluster

def disconnect_storage(_s = nil)
vm_disks = collect_disks

if vm_disks.blank?
storage = nil
else
vm_storages = ([storage] + storages).compact.uniq
storage = vm_storages.select { |store| !vm_disks.include?(store.ems_ref) }
end

super(storage)
end

def collect_disks
disks = hardware.disks.map { |disk| "#{disk.storage.ems_ref}/disks/#{disk.filename}" }
vm_disks = []

ext_management_system.with_provider_connection do |rhevm|
disks.each do |disk|
begin
vm_disks << Ovirt::Disk.find_by_href(rhevm, disk)
rescue Ovirt::MissingResourceError
nil
end
end
end
vm_disks
end

#
# UI Button Validation Methods
#
Expand Down
Expand Up @@ -9,6 +9,6 @@ object:
description:
fields:
- rel4:
value: "/System/event_handlers/event_action_refresh?target=src_ems_cluster"
value: "/System/event_handlers/event_action_refresh?target=src_vm"
- rel5:
value: "/System/event_handlers/event_action_policy?target=src_vm&policy_event=vm_unregister&param="
34 changes: 34 additions & 0 deletions spec/models/manageiq/providers/redhat/infra_manager/vm_spec.rb
Expand Up @@ -112,4 +112,38 @@
end
end
end

describe "#disconnect_storage" do
before(:each) do
_, _, zone = EvmSpecHelper.create_guid_miq_server_zone
ems = FactoryGirl.create(:ems_redhat, :zone => zone, :hostname => "192.168.1.31",
:ipaddress => "192.168.1.31", :port => 8443)
ems.update_authentication(:default => {:userid => "admin@internal", :password => "engine"})
allow(ems).to receive(:supported_api_versions).and_return([3, 4])

@storage = FactoryGirl.create(:storage, :ems_ref => "/api/storagedomains/ee745353-c069-4de8-8d76-ec2e155e2ca0")
disk = FactoryGirl.create(:disk, :storage => @storage, :filename => "da123bb9-095a-4933-95f2-8032dfa332e1")
hardware = FactoryGirl.create(:hardware, :disks => [disk])
@vm = FactoryGirl.create(:vm_redhat, :storage => @storage, :storages => [@storage], :hardware => hardware, :ext_management_system => ems)
end

context "vm removed and" do
it "disks removed" do
VCR.use_cassette("#{described_class.name.underscore}_fetch_no_disks") do
@vm.disconnect_storage
end

expect(@vm.storage).to be_nil
expect(@vm.storages).to be_empty
end

it "disks not removed" do
VCR.use_cassette("#{described_class.name.underscore}_fetch_disks") do
@vm.disconnect_storage
end

expect(@vm.storage).to eq(@storage)
end
end
end
end

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 819c079

Please sign in to comment.