diff --git a/ironic/drivers/modules/agent_base_vendor.py b/ironic/drivers/modules/agent_base_vendor.py index 514393b3cc..0f2196759a 100644 --- a/ironic/drivers/modules/agent_base_vendor.py +++ b/ironic/drivers/modules/agent_base_vendor.py @@ -784,7 +784,7 @@ class AgentDeployMixin(HeartbeatMixin): logical_disks = raid_config.get('logical_disks', []) software_raid = False for logical_disk in logical_disks: - if logical_disk['controller'] == 'software': + if logical_disk.get('controller') == 'software': LOG.debug('Node %s has a Software RAID configuration', node.uuid) software_raid = True diff --git a/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py b/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py index a36264a04f..223c3815c8 100644 --- a/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py +++ b/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py @@ -1063,6 +1063,32 @@ class AgentDeployMixinTest(AgentDeployMixinBaseTest): try_set_boot_device_mock.assert_called_once_with( task, boot_devices.DISK, persistent=True) + @mock.patch.object(deploy_utils, 'try_set_boot_device', autospec=True) + @mock.patch.object(agent_client.AgentClient, 'install_bootloader', + autospec=True) + def test_configure_local_boot_on_non_software_raid( + self, install_bootloader_mock, try_set_boot_device_mock): + with task_manager.acquire(self.context, self.node['uuid'], + shared=False) as task: + task.node.driver_internal_info['is_whole_disk_image'] = False + task.node.target_raid_config = { + "logical_disks": [ + { + "size_gb": 100, + "raid_level": "1", + }, + { + "size_gb": 'MAX', + "raid_level": "0", + } + ] + } + + self.deploy.configure_local_boot(task) + self.assertFalse(install_bootloader_mock.called) + try_set_boot_device_mock.assert_called_once_with( + task, boot_devices.DISK, persistent=True) + @mock.patch.object(deploy_utils, 'try_set_boot_device', autospec=True) @mock.patch.object(agent_client.AgentClient, 'install_bootloader', autospec=True) diff --git a/releasenotes/notes/story-2006316-raid-create-fails-c3661e185fb11c9f.yaml b/releasenotes/notes/story-2006316-raid-create-fails-c3661e185fb11c9f.yaml new file mode 100644 index 0000000000..122caa6fba --- /dev/null +++ b/releasenotes/notes/story-2006316-raid-create-fails-c3661e185fb11c9f.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes an issue in creation of RAID if none of the 'logical_disks' + in 'target_raid_config' have 'controller' parameter. + See `story 2006316 + `__ for details.