summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-10-14 20:05:45 +0000
committerGerrit Code Review <review@openstack.org>2022-10-14 20:05:45 +0000
commit5c571414b9c176f7ee28e561ed99ee93248496a8 (patch)
treea72234d2ca59311a2368a04d387b79b4cc0d1aa0
parentf080f70d938e12e550a6f6a967e5ac3b006c899d (diff)
parent6ea49af2fabceed2048deac3c696dcc10f2d7cb8 (diff)
downloadironic-python-agent-5c571414b9c176f7ee28e561ed99ee93248496a8.tar.gz
Merge "Fix software raid output poisoning" into stable/wallaby
-rw-r--r--ironic_python_agent/hardware.py3
-rw-r--r--ironic_python_agent/tests/unit/samples/hardware_samples.py27
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py6
-rw-r--r--releasenotes/notes/fix-softraid-name-poisoning-4e934dd4e60830b1.yaml7
4 files changed, 42 insertions, 1 deletions
diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py
index 36cea983..3bdebefe 100644
--- a/ironic_python_agent/hardware.py
+++ b/ironic_python_agent/hardware.py
@@ -369,9 +369,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
diff --git a/ironic_python_agent/tests/unit/samples/hardware_samples.py b/ironic_python_agent/tests/unit/samples/hardware_samples.py
index e402af45..056f41ef 100644
--- a/ironic_python_agent/tests/unit/samples/hardware_samples.py
+++ b/ironic_python_agent/tests/unit/samples/hardware_samples.py
@@ -1027,6 +1027,33 @@ 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
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py
index 7a3b525d..9c9b12af 100644
--- a/ironic_python_agent/tests/unit/test_hardware.py
+++ b/ironic_python_agent/tests/unit/test_hardware.py
@@ -3924,6 +3924,12 @@ class TestGenericHardwareManager(base.IronicAgentTest):
holder_disks = hardware.get_holder_disks('/dev/md126')
self.assertEqual(['/dev/sda'], holder_disks)
+ @mock.patch.object(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)
diff --git a/releasenotes/notes/fix-softraid-name-poisoning-4e934dd4e60830b1.yaml b/releasenotes/notes/fix-softraid-name-poisoning-4e934dd4e60830b1.yaml
new file mode 100644
index 00000000..9b80e30c
--- /dev/null
+++ b/releasenotes/notes/fix-softraid-name-poisoning-4e934dd4e60830b1.yaml
@@ -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.