summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2021-04-07 17:15:10 +0200
committerDmitry Tantsur <dtantsur@protonmail.com>2021-04-22 16:40:49 +0000
commit48c39dc8a9413e723d67a987cb90145b3627a392 (patch)
treec455a91c3fc47b0417d25773e25abe7cfb4db5e3
parent811a875d8cf7c9418a08c1ef91c0f628f4109916 (diff)
downloadironic-python-agent-48c39dc8a9413e723d67a987cb90145b3627a392.tar.gz
Do not fail network interface collection on unsupported interface7.0.1
Currently if one interface cannot be handled (e.g. it has empty MAC), the whole collection fails. Ignore unsupported interfaces instead. Change-Id: Ibdaad62b39c239d4f3fb3111c2fae9e31e877b28 (cherry picked from commit 1ab405b5095975c3cf1334477fd40f738f7105b8)
-rw-r--r--ironic_python_agent/hardware.py9
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py11
-rw-r--r--releasenotes/notes/no-mac-54616606ee6b844d.yaml5
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.