Merge "Populate switch_info with lldp system name"

This commit is contained in:
Zuul
2025-08-05 18:09:02 +00:00
committed by Gerrit Code Review
2 changed files with 27 additions and 0 deletions

View File

@@ -26,6 +26,7 @@ import ironic.objects.port as ironic_port
LOG = logging.getLogger(__name__)
PORT_ID_ITEM_NAME = "port_id"
SWITCH_ID_ITEM_NAME = "switch_id"
SWITCH_INFO_ITEM_NAME = "switch_info"
class LocalLinkConnectionHook(base.InspectionHook):
@@ -69,6 +70,16 @@ class LocalLinkConnectionHook(base.InspectionHook):
if 'mac_address' in chassis_id.subtype:
item = SWITCH_ID_ITEM_NAME
value = chassis_id.value.value
elif tlv_type == tlv.LLDP_TLV_SYS_NAME:
try:
switch_info = tlv.SysName.parse(data)
except (core.MappingError, netaddr.AddrFormatError) as e:
LOG.warning('TLV parse error for Sys Name for node %s: '
'%s', node_uuid, e)
return
item = SWITCH_INFO_ITEM_NAME
value = switch_info.value
if item is None or value is None:
continue

View File

@@ -176,3 +176,19 @@ class LocalLinkConnectionTestCase(db_base.DbTestCase):
self.assertTrue(mock_port_save.called)
self.assertEqual({'port_id': 'Ethernet1/18'},
self.port.local_link_connection)
@mock.patch.object(port.Port, 'save', autospec=True)
@mock.patch.object(port.Port, 'get_by_address', autospec=True)
def test_valid_system_info(self, mock_get_port, mock_port_save):
# Add a system name to the LLDP data
self.inventory['interfaces'][0]['lldp'].append(
(5, "737730312d646973742d31622d623132"))
mock_get_port.return_value = self.port
with task_manager.acquire(self.context, self.node.id) as task:
hook.LocalLinkConnectionHook().__call__(task, self.inventory,
self.plugin_data)
self.assertTrue(mock_port_save.called)
self.assertEqual(self.port.local_link_connection,
{'port_id': 'Ethernet1/18',
'switch_id': '88:5a:92:ec:54:59',
'switch_info': 'sw01-dist-1b-b12'})