From a98681f1d3cb07d4d6f2198c8dafc764e38648a4 Mon Sep 17 00:00:00 2001 From: Mahnoor Asghar Date: Tue, 5 Dec 2023 13:56:52 +0100 Subject: [PATCH] Fix volume_name issue in Redfish RAID Use the 'volume_name' field from the logical_disk in the target_raid_config field of a node, instead of just 'name' (which is incorrect as per the Ironic API expectation), to create the RAID volume Change-Id: Ib8b2589d91be67a848411ab6be852bcb4de58bc7 --- ironic/drivers/modules/redfish/raid.py | 2 +- .../unit/drivers/modules/redfish/test_raid.py | 17 ++++++++++------- ...h-raid-volume-name-fix-187c1b3e9f89cff3.yaml | 7 +++++++ 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 releasenotes/notes/redfish-raid-volume-name-fix-187c1b3e9f89cff3.yaml diff --git a/ironic/drivers/modules/redfish/raid.py b/ironic/drivers/modules/redfish/raid.py index b736307353..b0a1358527 100644 --- a/ironic/drivers/modules/redfish/raid.py +++ b/ironic/drivers/modules/redfish/raid.py @@ -1105,7 +1105,7 @@ class RedfishRAID(base.RAIDInterface): physical_disks=logical_disk['physical_disks'], raid_level=logical_disk['raid_level'], size_bytes=logical_disk['size_bytes'], - disk_name=logical_disk.get('name'), + disk_name=logical_disk.get('volume_name'), span_length=logical_disk.get('span_length'), span_depth=logical_disk.get('span_depth'), error_handler=self.volume_create_error_handler) diff --git a/ironic/tests/unit/drivers/modules/redfish/test_raid.py b/ironic/tests/unit/drivers/modules/redfish/test_raid.py index ec6887d55f..44319933db 100644 --- a/ironic/tests/unit/drivers/modules/redfish/test_raid.py +++ b/ironic/tests/unit/drivers/modules/redfish/test_raid.py @@ -326,7 +326,8 @@ class RedfishRAIDTestCase(db_base.DbTestCase): {'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3} - ] + ], + 'Name': 'test-volume' } self.mock_storage.volumes.create.assert_called_once_with( expected_payload, apply_time=sushy.APPLY_TIME_IMMEDIATE) @@ -700,10 +701,10 @@ class RedfishRAIDTestCase(db_base.DbTestCase): created_volumes = [ _mock_volume( '1', raid_type=sushy.RAIDType.RAID10, - capacity_bytes=50 * units.Gi), + capacity_bytes=50 * units.Gi, volume_name='root_volume'), _mock_volume( '2', raid_type=sushy.RAIDType.RAID5, - capacity_bytes=100 * units.Gi)] + capacity_bytes=100 * units.Gi, volume_name='data_volume')] # Called after volumes created self.mock_storage.volumes.get_members.return_value = created_volumes mock_get_system.return_value.storage.get_members.return_value = [ @@ -724,7 +725,8 @@ class RedfishRAIDTestCase(db_base.DbTestCase): {'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3}, {'@odata.id': pre + self.drive_id4} - ] + ], + 'Name': 'root_volume' } expected_payload2 = { 'Encrypted': False, @@ -735,7 +737,8 @@ class RedfishRAIDTestCase(db_base.DbTestCase): {'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3}, {'@odata.id': pre + self.drive_id4} - ] + ], + 'Name': 'data_volume' } self.assertEqual( self.mock_storage.volumes.create.call_count, 2) @@ -749,12 +752,12 @@ class RedfishRAIDTestCase(db_base.DbTestCase): self.assertEqual( [{'controller': 'RAID controller 1', 'id': '1', - 'name': 'Volume 1', + 'name': 'root_volume', 'raid_level': '1+0', 'size_gb': 50}, {'controller': 'RAID controller 1', 'id': '2', - 'name': 'Volume 2', + 'name': 'data_volume', 'raid_level': '5', 'size_gb': 100}], task.node.raid_config['logical_disks']) diff --git a/releasenotes/notes/redfish-raid-volume-name-fix-187c1b3e9f89cff3.yaml b/releasenotes/notes/redfish-raid-volume-name-fix-187c1b3e9f89cff3.yaml new file mode 100644 index 0000000000..175445a48e --- /dev/null +++ b/releasenotes/notes/redfish-raid-volume-name-fix-187c1b3e9f89cff3.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Use the 'volume_name' field from the logical_disk in the + target_raid_config field of a node, instead of just 'name' (which + is incorrect as per the Ironic API expectation), to create the + RAID volume using the Redfish driver