Skip to content

Commit b3f489c

Browse files
committed
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 (cherry picked from commit 1ab405b)
1 parent 44694cc commit b3f489c

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

ironic_python_agent/hardware.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,13 @@ def list_network_interfaces(self):
10861086
interface_names=iface_names)
10871087

10881088
for iface_name in iface_names:
1089-
result = dispatch_to_managers(
1090-
'get_interface_info', interface_name=iface_name)
1089+
try:
1090+
result = dispatch_to_managers(
1091+
'get_interface_info', interface_name=iface_name)
1092+
except errors.HardwareManagerMethodNotFound:
1093+
LOG.warning('No hardware manager was able to handle '
1094+
'interface %s', iface_name)
1095+
continue
10911096
result.lldp = self._get_lldp_data(iface_name)
10921097
network_interfaces_list.append(result)
10931098

ironic_python_agent/tests/unit/test_hardware.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,8 +1023,8 @@ def test_list_network_interfaces(self,
10231023
mocked_ifaddresses,
10241024
mockedget_managers):
10251025
mockedget_managers.return_value = [hardware.GenericHardwareManager()]
1026-
mocked_listdir.return_value = ['lo', 'eth0']
1027-
mocked_exists.side_effect = [False, True]
1026+
mocked_listdir.return_value = ['lo', 'eth0', 'foobar']
1027+
mocked_exists.side_effect = [False, True, True]
10281028
mocked_open.return_value.__enter__ = lambda s: s
10291029
mocked_open.return_value.__exit__ = mock.Mock()
10301030
read_mock = mocked_open.return_value.read
@@ -1034,8 +1034,11 @@ def test_list_network_interfaces(self,
10341034
netifaces.AF_INET6: [{'addr': 'fd00::101'}]
10351035
}
10361036
mocked_execute.return_value = ('em0\n', '')
1037-
mock_get_mac.mock_has_carrier = True
1038-
mock_get_mac.return_value = '00:0c:29:8c:11:b1'
1037+
mock_has_carrier.return_value = True
1038+
mock_get_mac.side_effect = [
1039+
'00:0c:29:8c:11:b1',
1040+
None,
1041+
]
10391042
interfaces = self.hardware.list_network_interfaces()
10401043
self.assertEqual(1, len(interfaces))
10411044
self.assertEqual('eth0', interfaces[0].name)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
fixes:
3+
- |
4+
No longer crashes if MAC address cannot be determined for one of the
5+
network interfaces.

0 commit comments

Comments
 (0)