Merge "Fix software raid output poisoning"

This commit is contained in:
Zuul 2022-08-25 14:54:29 +00:00 committed by Gerrit Code Review
commit ef5d9da134
4 changed files with 43 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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.