Merge "Fix software raid output poisoning"
This commit is contained in:
commit
ef5d9da134
@ -382,9 +382,10 @@ def get_holder_disks(raid_device):
|
||||
|
||||
holder_parts = []
|
||||
for line in lines[1:]:
|
||||
if 'Events' in line or 'Name' in line:
|
||||
continue
|
||||
device = re.findall(r'/dev/\w+', line)
|
||||
holder_parts += device
|
||||
|
||||
for part in holder_parts:
|
||||
# NOTE(mnaser): If the last character is not a digit and it is a valid
|
||||
# device, this means that instead of a partition, it's a
|
||||
|
@ -1049,6 +1049,34 @@ MDADM_DETAIL_OUTPUT_BROKEN_RAID0 = ("""/dev/md126:
|
||||
- 8 2 - /dev/sda2
|
||||
""")
|
||||
|
||||
# NOTE(TheJulia): The name and events field, in some cases can
|
||||
# match the regex causing parsing of the text to fail.
|
||||
MDADM_DETAIL_POISONED = ("""/dev/md0:
|
||||
Version : 1.2
|
||||
Creation Time : Wed Aug 17 16:09:19 2022
|
||||
Raid Level : raid1
|
||||
Array Size : 4673536 (4.46 GiB 4.79 GB)
|
||||
Used Dev Size : 4673536 (4.46 GiB 4.79 GB)
|
||||
Raid Devices : 2
|
||||
Total Devices : 2
|
||||
Persistence : Superblock is persistent
|
||||
|
||||
Update Time : Wed Aug 17 16:10:03 2022
|
||||
State : clean
|
||||
Active Devices : 2
|
||||
Working Devices : 2
|
||||
Failed Devices : 0
|
||||
Spare Devices : 0
|
||||
|
||||
Name : box:/dev/md0 (local to host box)
|
||||
UUID : e50fb152:aa80db1d:3c901b03:dd280e35
|
||||
Events : 21/dev/md/dev/md
|
||||
|
||||
Number Major Minor RaidDevice State
|
||||
0 251 1 0 active sync /dev/vda1
|
||||
1 251 17 1 active sync /dev/vdb1
|
||||
""")
|
||||
|
||||
MDADM_EXAMINE_OUTPUT_MEMBER = ("""/dev/sda1:
|
||||
Magic : a92b4efc
|
||||
Version : 1.2
|
||||
|
@ -4450,6 +4450,12 @@ class TestGenericHardwareManager(base.IronicAgentTest):
|
||||
holder_disks = hardware.get_holder_disks('/dev/md126')
|
||||
self.assertEqual(['/dev/sda'], holder_disks)
|
||||
|
||||
@mock.patch.object(il_utils, 'execute', autospec=True)
|
||||
def test_get_holder_disks_poisoned_output(self, mocked_execute):
|
||||
mocked_execute.side_effect = [(hws.MDADM_DETAIL_POISONED, '')]
|
||||
holder_disks = hardware.get_holder_disks('/dev/md0')
|
||||
self.assertEqual(['/dev/vda', '/dev/vdb'], holder_disks)
|
||||
|
||||
@mock.patch.object(hardware, 'get_holder_disks', autospec=True)
|
||||
@mock.patch.object(hardware, 'get_component_devices', autospec=True)
|
||||
@mock.patch.object(hardware, 'list_all_block_devices', autospec=True)
|
||||
|
@ -0,0 +1,7 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes handling of Software RAID device discovery so RAID device ``Names``
|
||||
and ``Events`` field values do not inadvertently cause the command to
|
||||
return unexpected output. Previously this could cause a deployment to
|
||||
when handling UEFI partitions.
|
Loading…
Reference in New Issue
Block a user