diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py index 3f0f0771e..b0d72c11d 100644 --- a/ironic_python_agent/hardware.py +++ b/ironic_python_agent/hardware.py @@ -461,7 +461,8 @@ class GenericHardwareManager(HardwareManager): def check_device_attrs(device): for key in ('model', 'wwn', 'serial', 'vendor', - 'wwn_with_extension', 'wwn_vendor_extension'): + 'wwn_with_extension', 'wwn_vendor_extension', + 'name'): if key not in root_device_hints: continue diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py index 81b180fc9..723de60b7 100644 --- a/ironic_python_agent/tests/unit/test_hardware.py +++ b/ironic_python_agent/tests/unit/test_hardware.py @@ -304,14 +304,10 @@ class TestGenericHardwareManager(test_base.BaseTestCase): @mock.patch.object(hardware, 'list_all_block_devices') @mock.patch.object(utils, 'parse_root_device_hints') - def test_get_os_install_device_root_device_hints(self, mock_root_device, - mock_dev): + def _get_os_install_device_root_device_hints(self, hints, expected_device, + mock_root_device, mock_dev): model = 'fastable sd131 7' - mock_root_device.return_value = {'model': model, - 'wwn': 'fake-wwn', - 'serial': 'fake-serial', - 'vendor': 'fake-vendor', - 'size': 10} + mock_root_device.return_value = hints mock_dev.return_value = [ hardware.BlockDevice(name='/dev/sda', model='TinyUSB Drive', @@ -333,10 +329,35 @@ class TestGenericHardwareManager(test_base.BaseTestCase): serial='fake-serial'), ] - self.assertEqual('/dev/sdb', self.hardware.get_os_install_device()) + self.assertEqual(expected_device, + self.hardware.get_os_install_device()) mock_root_device.assert_called_once_with() mock_dev.assert_called_once_with() + def test_get_os_install_device_root_device_hints_model(self): + self._get_os_install_device_root_device_hints( + {'model': 'fastable sd131 7'}, '/dev/sdb') + + def test_get_os_install_device_root_device_hints_wwn(self): + self._get_os_install_device_root_device_hints( + {'wwn': 'wwn0'}, '/dev/sda') + + def test_get_os_install_device_root_device_hints_serial(self): + self._get_os_install_device_root_device_hints( + {'serial': 'serial0'}, '/dev/sda') + + def test_get_os_install_device_root_device_hints_size(self): + self._get_os_install_device_root_device_hints( + {'size': 10}, '/dev/sdb') + + def test_get_os_install_device_root_device_hints_vendor(self): + self._get_os_install_device_root_device_hints( + {'vendor': 'fake-vendor'}, '/dev/sdb') + + def test_get_os_install_device_root_device_hints_name(self): + self._get_os_install_device_root_device_hints( + {'name': '/dev/sdb'}, '/dev/sdb') + @mock.patch.object(hardware, 'list_all_block_devices') @mock.patch.object(utils, 'parse_root_device_hints') def test_get_os_install_device_root_device_hints_no_device_found( diff --git a/releasenotes/notes/name-root-device-hints-0cfc8c90d03c8bf0.yaml b/releasenotes/notes/name-root-device-hints-0cfc8c90d03c8bf0.yaml new file mode 100644 index 000000000..90f8f46ab --- /dev/null +++ b/releasenotes/notes/name-root-device-hints-0cfc8c90d03c8bf0.yaml @@ -0,0 +1,3 @@ +--- +features: + - Root device hints extended to support the device name.