Merge "Redfish: Skip non-RAID controllers for RAID" into stable/wallaby

This commit is contained in:
Zuul 2021-07-20 08:25:40 +00:00 committed by Gerrit Code Review
commit aee6406d3d
3 changed files with 30 additions and 0 deletions

View File

@ -591,6 +591,11 @@ def _filter_logical_disks(logical_disks, include_root_volume,
def _get_storage_controller(node, system, physical_disks):
collection = system.storage
for storage in collection.get_members():
# Using first controller as expecting only one
controller = (storage.storage_controllers[0]
if storage.storage_controllers else None)
if controller and controller.raid_types == []:
continue
for drive in storage.drives:
if drive.identity in physical_disks:
return storage

View File

@ -924,3 +924,21 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
self.assertNotIn(nonraid_storage.drives[0], disks)
self.assertNotIn(nonraid_storage.drives[0], disk_to_controller)
def test__get_storage_controller(self, mock_get_system):
nonraid_controller = mock.Mock()
nonraid_controller.raid_types = []
nonraid_storage = mock.MagicMock()
nonraid_storage.storage_controllers = [nonraid_controller]
nonraid_storage.drives = mock.Mock()
mock_get_system.return_value.storage.get_members.return_value = [
nonraid_storage, self.mock_storage]
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
storage = redfish_raid._get_storage_controller(
task.node, mock_get_system.return_value, ['32ADF365C6C1B7BD'])
self.assertEqual(storage, self.mock_storage)
nonraid_storage.drives.assert_not_called()

View File

@ -0,0 +1,7 @@
---
fixes:
- |
In Redfish RAID clean and deploy steps skip non-RAID storage controllers
for RAID operations. In Redfish systems that do not implement
``SupportedRAIDTypes`` they are still processed and could result in
unexpected errors.