diff options
author | Dmitry Tantsur <dtantsur@protonmail.com> | 2021-04-07 17:15:10 +0200 |
---|---|---|
committer | Dmitry Tantsur <dtantsur@protonmail.com> | 2021-04-07 17:16:27 +0200 |
commit | 1ab405b5095975c3cf1334477fd40f738f7105b8 (patch) | |
tree | 2d50ec3a569bcef3739762298acedef0219029c0 | |
parent | 993f9a0ceb7a731677fccdce176f4faaea6ec116 (diff) | |
download | ironic-python-agent-1ab405b5095975c3cf1334477fd40f738f7105b8.tar.gz |
Do not fail network interface collection on unsupported interface
Currently if one interface cannot be handled (e.g. it has empty MAC),
the whole collection fails. Ignore unsupported interfaces instead.
Change-Id: Ibdaad62b39c239d4f3fb3111c2fae9e31e877b28
-rw-r--r-- | ironic_python_agent/hardware.py | 9 | ||||
-rw-r--r-- | ironic_python_agent/tests/unit/test_hardware.py | 11 | ||||
-rw-r--r-- | releasenotes/notes/no-mac-54616606ee6b844d.yaml | 5 |
3 files changed, 19 insertions, 6 deletions
diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py index e58da8c6..abda1f1a 100644 --- a/ironic_python_agent/hardware.py +++ b/ironic_python_agent/hardware.py @@ -1100,8 +1100,13 @@ class GenericHardwareManager(HardwareManager): interface_names=iface_names) for iface_name in iface_names: - result = dispatch_to_managers( - 'get_interface_info', interface_name=iface_name) + try: + result = dispatch_to_managers( + 'get_interface_info', interface_name=iface_name) + except errors.HardwareManagerMethodNotFound: + LOG.warning('No hardware manager was able to handle ' + 'interface %s', iface_name) + continue result.lldp = self._get_lldp_data(iface_name) network_interfaces_list.append(result) diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py index 086080be..4135985e 100644 --- a/ironic_python_agent/tests/unit/test_hardware.py +++ b/ironic_python_agent/tests/unit/test_hardware.py @@ -238,8 +238,8 @@ class TestGenericHardwareManager(base.IronicAgentTest): mocked_ifaddresses, mockedget_managers): mockedget_managers.return_value = [hardware.GenericHardwareManager()] - mocked_listdir.return_value = ['lo', 'eth0'] - mocked_exists.side_effect = [False, True] + mocked_listdir.return_value = ['lo', 'eth0', 'foobar'] + mocked_exists.side_effect = [False, True, True] mocked_open.return_value.__enter__ = lambda s: s mocked_open.return_value.__exit__ = mock.Mock() read_mock = mocked_open.return_value.read @@ -249,8 +249,11 @@ class TestGenericHardwareManager(base.IronicAgentTest): netifaces.AF_INET6: [{'addr': 'fd00::101'}] } mocked_execute.return_value = ('em0\n', '') - mock_get_mac.mock_has_carrier = True - mock_get_mac.return_value = '00:0c:29:8c:11:b1' + mock_has_carrier.return_value = True + mock_get_mac.side_effect = [ + '00:0c:29:8c:11:b1', + None, + ] interfaces = self.hardware.list_network_interfaces() self.assertEqual(1, len(interfaces)) self.assertEqual('eth0', interfaces[0].name) diff --git a/releasenotes/notes/no-mac-54616606ee6b844d.yaml b/releasenotes/notes/no-mac-54616606ee6b844d.yaml new file mode 100644 index 00000000..19933cc8 --- /dev/null +++ b/releasenotes/notes/no-mac-54616606ee6b844d.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + No longer crashes if MAC address cannot be determined for one of the + network interfaces. |