From 1c595533b566729807851531d44856ebf8738ff0 Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Thu, 17 Oct 2024 17:10:19 -0400 Subject: [PATCH] Support provisioning flavors with no root disk --- .../provision/volume_attachment.rb | 2 +- .../provision/volume_attachment_spec.rb | 17 +++++++++++++++++ 2 files changed, 18 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 42e9214ba..381b94f47 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 @@ -1,6 +1,6 @@ module ManageIQ::Providers::Openstack::CloudManager::Provision::VolumeAttachment def create_requested_volumes(requested_volumes) - volumes_attrs_list = [default_volume_attributes] + volumes_attrs_list = instance_type.root_disk_size > 0 ? [default_volume_attributes] : [] connection_options = {:service => "volume", :tenant_name => cloud_tenant.try(:name)} source.ext_management_system.with_provider_connection(connection_options) do |service| 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 6d2d924b4..128eb5f78 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 @@ -34,6 +34,23 @@ expect(@task.create_requested_volumes(@task.options[:volumes])).to eq [default_volume, requested_volume] end + + context "with root volume" do + @flavor = FactoryBot.create(:flavor_openstack, :root_disk_size => 0) + + it "creates a bootable first volume" do + service = double + allow(service).to receive_message_chain('volumes.create').and_return @volume + allow(@task.source.ext_management_system).to receive(:with_provider_connection) + .with({:service => 'volume', :tenant_name => nil}).and_yield(service) + allow(@task).to receive(:instance_type).and_return(@flavor) + + requested_volume = {:name => "root", :size => 2, :uuid => @volume.id, :source_type => "volume", + :destination_type => "volume"} + + expect(@task.create_requested_volumes(@task.options[:volumes])).to eq [requested_volume] + end + end end context "#check_volumes" do