Skip to content

Commit 84edb10

Browse files
committed
Fix RAID volume name
Use just md<index> as the default volume name if a volume name is not defined. The original change (https://review.opendev.org/c/openstack/ironic-python-agent/+/853182) introduced an error: mdadm: Value "/dev/md0" cannot be set as name. Reason: Not POSIX compatible.\n This change fixes it. Closes-Bug: #2073406 Change-Id: Ic8bd473801fcb92fc814f6ad4e1d6dc316783bf3 (cherry picked from commit 6dceb33) (cherry picked from commit 2ece938)
1 parent b7721a9 commit 84edb10

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

ironic_python_agent/raid_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def create_raid_device(index, logical_disk):
227227
volume_name = logical_disk.get('volume_name')
228228
try:
229229
if volume_name is None:
230-
volume_name = md_device
230+
volume_name = 'md%d' % index
231231
LOG.debug("Creating md device %(dev)s with name %(name)s"
232232
"on %(comp)s",
233233
{'dev': md_device, 'name': volume_name,

ironic_python_agent/tests/unit/test_hardware.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3093,10 +3093,10 @@ def test_create_configuration(self, mocked_os_path_isdir, mocked_execute,
30933093
delay_on_retry=True),
30943094
mock.call('udevadm', 'settle'),
30953095
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3096-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3096+
'--metadata=1', '--level', '1', '--name', 'md0',
30973097
'--raid-devices', 2, '/dev/sda1', '/dev/sdb1'),
30983098
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3099-
'--metadata=1', '--level', '0', '--name', '/dev/md1',
3099+
'--metadata=1', '--level', '0', '--name', 'md1',
31003100
'--raid-devices', 2, '/dev/sda2', '/dev/sdb2')])
31013101

31023102
self.assertEqual(raid_config, result)
@@ -3198,11 +3198,11 @@ def test_create_configuration_raid_5(self, mocked_execute,
31983198
delay_on_retry=True),
31993199
mock.call('udevadm', 'settle'),
32003200
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3201-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3201+
'--metadata=1', '--level', '1', '--name', 'md0',
32023202
'--raid-devices', 3, '/dev/sda1', '/dev/sdb1',
32033203
'/dev/sdc1'),
32043204
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3205-
'--metadata=1', '--level', '5', '--name', '/dev/md1',
3205+
'--metadata=1', '--level', '5', '--name', 'md1',
32063206
'--raid-devices', 3, '/dev/sda2', '/dev/sdb2',
32073207
'/dev/sdc2')])
32083208
self.assertEqual(raid_config, result)
@@ -3316,11 +3316,11 @@ def test_create_configuration_raid_6(self, mocked_execute,
33163316
delay_on_retry=True),
33173317
mock.call('udevadm', 'settle'),
33183318
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3319-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3319+
'--metadata=1', '--level', '1', '--name', 'md0',
33203320
'--raid-devices', 4, '/dev/sda1', '/dev/sdb1',
33213321
'/dev/sdc1', '/dev/sdd1'),
33223322
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3323-
'--metadata=1', '--level', '6', '--name', '/dev/md1',
3323+
'--metadata=1', '--level', '6', '--name', 'md1',
33243324
'--raid-devices', 4, '/dev/sda2', '/dev/sdb2',
33253325
'/dev/sdc2', '/dev/sdd2')])
33263326
self.assertEqual(raid_config, result)
@@ -3399,10 +3399,10 @@ def test_create_configuration_efi(self, mocked_os_path_isdir,
33993399
delay_on_retry=True),
34003400
mock.call('udevadm', 'settle'),
34013401
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3402-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3402+
'--metadata=1', '--level', '1', '--name', 'md0',
34033403
'--raid-devices', 2, '/dev/sda1', '/dev/sdb1'),
34043404
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3405-
'--metadata=1', '--level', '0', '--name', '/dev/md1',
3405+
'--metadata=1', '--level', '0', '--name', 'md1',
34063406
'--raid-devices', 2, '/dev/sda2', '/dev/sdb2')])
34073407
self.assertEqual(raid_config, result)
34083408

@@ -3486,10 +3486,10 @@ def test_create_configuration_force_gpt_with_disk_label(
34863486
delay_on_retry=True),
34873487
mock.call('udevadm', 'settle'),
34883488
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3489-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3489+
'--metadata=1', '--level', '1', '--name', 'md0',
34903490
'--raid-devices', 2, '/dev/sda1', '/dev/sdb1'),
34913491
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3492-
'--metadata=1', '--level', '0', '--name', '/dev/md1',
3492+
'--metadata=1', '--level', '0', '--name', 'md1',
34933493
'--raid-devices', 2, '/dev/sda2', '/dev/sdb2')])
34943494
self.assertEqual(raid_config, result)
34953495

@@ -3568,10 +3568,10 @@ def test_create_configuration_no_max(self, _mocked_isdir, mocked_execute,
35683568
delay_on_retry=True),
35693569
mock.call('udevadm', 'settle'),
35703570
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3571-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3571+
'--metadata=1', '--level', '1', '--name', 'md0',
35723572
'--raid-devices', 2, '/dev/sda1', '/dev/sdb1'),
35733573
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3574-
'--metadata=1', '--level', '0', '--name', '/dev/md1',
3574+
'--metadata=1', '--level', '0', '--name', 'md1',
35753575
'--raid-devices', 2, '/dev/sda2', '/dev/sdb2')])
35763576
self.assertEqual(raid_config, result)
35773577

@@ -3652,10 +3652,10 @@ def test_create_configuration_max_is_first_logical(self, _mocked_isdir,
36523652
delay_on_retry=True),
36533653
mock.call('udevadm', 'settle'),
36543654
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3655-
'--metadata=1', '--level', '0', '--name', '/dev/md0',
3655+
'--metadata=1', '--level', '0', '--name', 'md0',
36563656
'--raid-devices', 2, '/dev/sda1', '/dev/sdb1'),
36573657
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3658-
'--metadata=1', '--level', '1', '--name', '/dev/md1',
3658+
'--metadata=1', '--level', '1', '--name', 'md1',
36593659
'--raid-devices', 2, '/dev/sda2', '/dev/sdb2')])
36603660
self.assertEqual(raid_config, result)
36613661

@@ -3745,10 +3745,10 @@ def test_create_configuration_with_hints(self, mocked_execute,
37453745
delay_on_retry=True),
37463746
mock.call('udevadm', 'settle'),
37473747
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
3748-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
3748+
'--metadata=1', '--level', '1', '--name', 'md0',
37493749
'--raid-devices', 2, '/dev/sda1', '/dev/sdb1'),
37503750
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
3751-
'--metadata=1', '--level', '0', '--name', '/dev/md1',
3751+
'--metadata=1', '--level', '0', '--name', 'md1',
37523752
'--raid-devices', 2, '/dev/sda2', '/dev/sdb2')])
37533753
self.assertEqual(raid_config, result)
37543754

@@ -4093,11 +4093,11 @@ def test_create_configuration_with_nvme(self, mocked_os_path_isdir,
40934093
delay_on_retry=True),
40944094
mock.call('udevadm', 'settle'),
40954095
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
4096-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
4096+
'--metadata=1', '--level', '1', '--name', 'md0',
40974097
'--raid-devices', 2, '/dev/nvme0n1p1',
40984098
'/dev/nvme1n1p1'),
40994099
mock.call('mdadm', '--create', '/dev/md1', '--force', '--run',
4100-
'--metadata=1', '--level', '0', '--name', '/dev/md1',
4100+
'--metadata=1', '--level', '0', '--name', 'md1',
41014101
'--raid-devices', 2, '/dev/nvme0n1p2', '/dev/nvme1n1p2')
41024102
])
41034103
self.assertEqual(raid_config, result)

ironic_python_agent/tests/unit/test_raid_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def test_create_raid_device(self, mock_execute, mocked_components):
5757

5858
mock_execute.assert_called_once_with(
5959
'mdadm', '--create', '/dev/md0', '--force', '--run',
60-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
60+
'--metadata=1', '--level', '1', '--name', 'md0',
6161
'--raid-devices', 3, '/dev/sda1', '/dev/sdb1', '/dev/sdc1')
6262

6363
@mock.patch.object(raid_utils, '_get_actual_component_devices',
@@ -97,7 +97,7 @@ def test_create_raid_device_missing_device(self, mock_execute,
9797

9898
expected_calls = [
9999
mock.call('mdadm', '--create', '/dev/md0', '--force', '--run',
100-
'--metadata=1', '--level', '1', '--name', '/dev/md0',
100+
'--metadata=1', '--level', '1', '--name', 'md0',
101101
'--raid-devices', 3, '/dev/sda1', '/dev/sdb1',
102102
'/dev/sdc1'),
103103
mock.call('mdadm', '--add', '/dev/md0', '/dev/sdb1',
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
fixes:
3+
- |
4+
The use of md_device as the default volume name if the volume name of a RAID
5+
array hasn't been specified caused a 'Not POSIX compatible' error.
6+
This has been fixed by using just the last part of the md_device.
7+
Fixes https://bugs.launchpad.net/ironic-python-agent/+bug/2073406

0 commit comments

Comments
 (0)