Fix Redfish request collecting storage drives

Fix the Redfish request payload collecting physical storage drives

Change-Id: I3b735709aa2f65b606a0747a2edf98f50af39f87
This commit is contained in:
Mahnoor Asghar 2023-11-27 18:36:51 +01:00
parent 281cebedd6
commit facd862a31
3 changed files with 68 additions and 97 deletions

View File

@ -623,10 +623,8 @@ def _construct_volume_payload(
'RAIDType': RAID_LEVELS[raid_level]['raid_type'], 'RAIDType': RAID_LEVELS[raid_level]['raid_type'],
'CapacityBytes': size_bytes} 'CapacityBytes': size_bytes}
if physical_disks: if physical_disks:
payload['Links'] = { payload['Drives'] = [{"@odata.id": _drive_path(storage, d)} for d in
"Drives": [{"@odata.id": _drive_path(storage, d)} for d in physical_disks]
physical_disks]
}
LOG.debug('Payload for RAID logical disk creation on node %(node_uuid)s: ' LOG.debug('Payload for RAID logical disk creation on node %(node_uuid)s: '
'%(payload)r', {'node': node.uuid, 'payload': payload}) '%(payload)r', {'node': node.uuid, 'payload': payload})
return payload return payload

View File

@ -255,13 +255,11 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2},
{'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3}
{'@odata.id': pre + self.drive_id3} ]
]
}
} }
self.mock_storage.volumes.create.assert_called_once_with( self.mock_storage.volumes.create.assert_called_once_with(
expected_payload, apply_time=None expected_payload, apply_time=None
@ -320,13 +318,11 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2},
{'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3}
{'@odata.id': pre + self.drive_id3} ]
]
}
} }
self.mock_storage.volumes.create.assert_called_once_with( self.mock_storage.volumes.create.assert_called_once_with(
expected_payload, apply_time=sushy.APPLY_TIME_IMMEDIATE) expected_payload, apply_time=sushy.APPLY_TIME_IMMEDIATE)
@ -392,13 +388,11 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2},
{'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3}
{'@odata.id': pre + self.drive_id3} ]
]
}
} }
self.mock_storage.volumes.create.assert_called_once_with( self.mock_storage.volumes.create.assert_called_once_with(
expected_payload, apply_time=sushy.APPLY_TIME_ON_RESET) expected_payload, apply_time=sushy.APPLY_TIME_ON_RESET)
@ -467,25 +461,21 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id5},
{'@odata.id': pre + self.drive_id5}, {'@odata.id': pre + self.drive_id6},
{'@odata.id': pre + self.drive_id6}, {'@odata.id': pre + self.drive_id7}
{'@odata.id': pre + self.drive_id7} ]
]
}
} }
expected_payload2 = { expected_payload2 = {
'Encrypted': False, 'Encrypted': False,
'VolumeType': 'Mirrored', 'VolumeType': 'Mirrored',
'RAIDType': 'RAID1', 'RAIDType': 'RAID1',
'CapacityBytes': 536870912000, 'CapacityBytes': 536870912000,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2}
{'@odata.id': pre + self.drive_id2} ]
]
}
} }
self.assertEqual( self.assertEqual(
self.mock_storage.volumes.create.call_count, 2) self.mock_storage.volumes.create.call_count, 2)
@ -561,12 +551,10 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'Mirrored', 'VolumeType': 'Mirrored',
'RAIDType': 'RAID1', 'RAIDType': 'RAID1',
'CapacityBytes': 536870912000, 'CapacityBytes': 536870912000,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2}
{'@odata.id': pre + self.drive_id2} ]
]
}
} }
expected_raid_configs = { expected_raid_configs = {
'operation': 'create', 'operation': 'create',
@ -636,13 +624,11 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2},
{'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3}
{'@odata.id': pre + self.drive_id3} ]
]
}
} }
self.mock_storage.volumes.create.assert_called_once_with( self.mock_storage.volumes.create.assert_called_once_with(
expected_payload, apply_time=None expected_payload, apply_time=None
@ -729,27 +715,23 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'SpannedMirrors', 'VolumeType': 'SpannedMirrors',
'RAIDType': 'RAID10', 'RAIDType': 'RAID10',
'CapacityBytes': 53687091200, 'CapacityBytes': 53687091200,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2},
{'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3},
{'@odata.id': pre + self.drive_id3}, {'@odata.id': pre + self.drive_id4}
{'@odata.id': pre + self.drive_id4} ]
]
}
} }
expected_payload2 = { expected_payload2 = {
'Encrypted': False, 'Encrypted': False,
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id2},
{'@odata.id': pre + self.drive_id2}, {'@odata.id': pre + self.drive_id3},
{'@odata.id': pre + self.drive_id3}, {'@odata.id': pre + self.drive_id4}
{'@odata.id': pre + self.drive_id4} ]
]
}
} }
self.assertEqual( self.assertEqual(
self.mock_storage.volumes.create.call_count, 2) self.mock_storage.volumes.create.call_count, 2)
@ -857,23 +839,19 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'Mirrored', 'VolumeType': 'Mirrored',
'RAIDType': 'RAID1', 'RAIDType': 'RAID1',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2}
{'@odata.id': pre + self.drive_id2} ]
]
}
} }
expected_payload2 = { expected_payload2 = {
'Encrypted': False, 'Encrypted': False,
'VolumeType': 'NonRedundant', 'VolumeType': 'NonRedundant',
'RAIDType': 'RAID0', 'RAIDType': 'RAID0',
'CapacityBytes': 536870912000, 'CapacityBytes': 536870912000,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id3}
{'@odata.id': pre + self.drive_id3} ]
]
}
} }
self.assertEqual( self.assertEqual(
self.mock_storage.volumes.create.call_count, 2) self.mock_storage.volumes.create.call_count, 2)
@ -980,25 +958,21 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'StripedWithParity', 'VolumeType': 'StripedWithParity',
'RAIDType': 'RAID5', 'RAIDType': 'RAID5',
'CapacityBytes': 107374182400, 'CapacityBytes': 107374182400,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id5},
{'@odata.id': pre + self.drive_id5}, {'@odata.id': pre + self.drive_id6},
{'@odata.id': pre + self.drive_id6}, {'@odata.id': pre + self.drive_id7}
{'@odata.id': pre + self.drive_id7} ]
]
}
} }
expected_payload2 = { expected_payload2 = {
'Encrypted': False, 'Encrypted': False,
'VolumeType': 'Mirrored', 'VolumeType': 'Mirrored',
'RAIDType': 'RAID1', 'RAIDType': 'RAID1',
'CapacityBytes': 536870912000, 'CapacityBytes': 536870912000,
'Links': { 'Drives': [
'Drives': [ {'@odata.id': pre + self.drive_id1},
{'@odata.id': pre + self.drive_id1}, {'@odata.id': pre + self.drive_id2}
{'@odata.id': pre + self.drive_id2} ]
]
}
} }
self.assertEqual( self.assertEqual(
self.mock_storage.volumes.create.call_count, 2) self.mock_storage.volumes.create.call_count, 2)
@ -1152,13 +1126,7 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
'VolumeType': 'Mirrored', 'VolumeType': 'Mirrored',
'RAIDType': 'RAID1', 'RAIDType': 'RAID1',
'CapacityBytes': capacity_bytes, 'CapacityBytes': capacity_bytes,
'Links': { 'Drives': [{'@odata.id': pre + drive_id}]
'Drives': [
{
'@odata.id': pre + drive_id
}
]
}
} }
with task_manager.acquire(self.context, self.node.uuid, with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task: shared=True) as task:

View File

@ -0,0 +1,5 @@
---
fixes:
- Fixes the payload format required to query physical storage drives
using redfish, when configuring RAID using redfish.