From 642e65fd5773d8d25db37136bd62e707f0c46dce Mon Sep 17 00:00:00 2001 From: Alexander Demichev Date: Tue, 10 Apr 2018 12:47:50 +0200 Subject: [PATCH] catch error when volume creation fails --- .../cloud_manager/provision/volume_attachment.rb | 6 +++++- .../cloud_manager/provision/volume_attachment_spec.rb | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment.rb b/app/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment.rb index a72686504..973814780 100644 --- a/app/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment.rb +++ b/app/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment.rb @@ -27,7 +27,11 @@ def do_volume_creation_check(volumes_refs) source.ext_management_system.with_provider_connection(connection_options) do |service| volumes_refs.each do |volume_attrs| next unless volume_attrs[:source_type] == "volume" - status = service.volumes.get(volume_attrs[:uuid]).try(:status) + volume = service.volumes.get(volume_attrs[:uuid]) + status = volume.try(:status) + if status == "error" + raise MiqException::MiqProvisionError, "An error occurred while creating Volume #{volume.name}" + end return false, status unless status == "available" end end diff --git a/spec/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment_spec.rb b/spec/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment_spec.rb index 406af5e36..acd24f154 100644 --- a/spec/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment_spec.rb +++ b/spec/models/manageiq/providers/openstack/cloud_manager/provision/volume_attachment_spec.rb @@ -65,5 +65,15 @@ expect(@task.do_volume_creation_check([pending_volume_attrs])).to eq [false, nil] end + + it "status error" do + pending_volume_attrs = {:source_type => "volume"} + service = double + allow(service).to receive_message_chain('volumes.get').and_return FactoryGirl.build(:cloud_volume_openstack, + :status => "error") + allow(@task.source.ext_management_system).to receive(:with_provider_connection)\ + .with(:service => 'volume').and_yield(service) + expect { @task.do_volume_creation_check([pending_volume_attrs]) }.to raise_error(MiqException::MiqProvisionError) + end end end