From 8734125fc6e9629e35c85ee7791316cf620ae82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aija=20Jaunt=C4=93va?= Date: Mon, 8 Aug 2022 06:15:35 -0400 Subject: Update raid_type handling for Redfish raid_config Fix indentation for case when raid_type is missing. Generally, it is not expected that raid_type will be missing, this is done as a precaution as raid_type was introduced in Redfish 1.3.1. Now log warning that raid_type is missing, thus cannot update raid_config correctly. Followup to I753c4b00c0a64bcdc89c9bc0afd46f1211f7847b Change-Id: Id66b87309dd26a2a165b35ac1d81580e4605d629 (cherry picked from commit 3a621e3983eb2eb1d013d687acc3f5981cdfbc64) --- ironic/drivers/modules/redfish/raid.py | 10 +++++++++- .../tests/unit/drivers/modules/redfish/test_raid.py | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/ironic/drivers/modules/redfish/raid.py b/ironic/drivers/modules/redfish/raid.py index 2d0b198f1..506386028 100644 --- a/ironic/drivers/modules/redfish/raid.py +++ b/ironic/drivers/modules/redfish/raid.py @@ -694,6 +694,7 @@ def update_raid_config(node): """ system = redfish_utils.get_system(node) logical_disks = [] + vol_no_raid_type = [] for stor in system.storage.get_members(): for vol in stor.volumes.get_members(): if vol.raid_type: @@ -706,7 +707,14 @@ def update_raid_config(node): key for key, value in RAID_LEVELS.items() if value['raid_type'] == vol.raid_type) } - logical_disks.append(logical_disk) + logical_disks.append(logical_disk) + else: + vol_no_raid_type.append(vol.identity) + + if vol_no_raid_type: + LOG.warning("Unable to update raid_config for volumes missing RAID " + "type: %(vol_no_raid_type)s", + {'vol_no_raid_type': ", ".join(vol_no_raid_type)}) raid_common.update_raid_info(node, {'logical_disks': logical_disks}) diff --git a/ironic/tests/unit/drivers/modules/redfish/test_raid.py b/ironic/tests/unit/drivers/modules/redfish/test_raid.py index 0f7cf320f..2e39d0710 100644 --- a/ironic/tests/unit/drivers/modules/redfish/test_raid.py +++ b/ironic/tests/unit/drivers/modules/redfish/test_raid.py @@ -1484,3 +1484,22 @@ class RedfishRAIDTestCase(db_base.DbTestCase): mock_build_agent_opt.assert_not_called() # Not yet updated as in progress self.assertEqual({}, task.node.raid_config) + + @mock.patch.object(redfish_raid, 'LOG', autospec=True) + def test_update_raid_config_missing_raid_type( + self, mock_log, mock_get_system): + volumes = [ + _mock_volume( + '1', raid_type=None, + capacity_bytes=100 * units.Gi), + _mock_volume( + '2', raid_type=None, + capacity_bytes=500 * units.Gi)] + self.mock_storage.volumes.get_members.return_value = volumes + mock_get_system.return_value.storage.get_members.return_value = [ + self.mock_storage] + + redfish_raid.update_raid_config(self.node) + + self.assertEqual([], self.node.raid_config['logical_disks']) + mock_log.warning.assert_called_once() -- cgit v1.2.1