From ca13d19bd9c94a03276bb5fdbefd72bee682af59 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Mon, 20 Mar 2023 18:27:47 +0100 Subject: [PATCH] filter non-eth physical interfaces --- resource_management/alembic.ini | 1 - resource_management/juniper.py | 10 ++++++++++ test/test_parse_router.py | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/resource_management/alembic.ini b/resource_management/alembic.ini index 0aad7a6..22d9b90 100644 --- a/resource_management/alembic.ini +++ b/resource_management/alembic.ini @@ -4,6 +4,5 @@ # a migration for script_location = migrations sqlalchemy.url = sqlite:////absolute/path/to/foo.db -sqlalchemy.url = sqlite:////Users/reid/workspace/nat/resource-management/resource_management/foo.db # or here is an example of a mysql dsn # sqlalchemy.url = mysql://dummy:dummy-pass@localhost/resources_db_name diff --git a/resource_management/juniper.py b/resource_management/juniper.py index 4c3eb4d..6eba0d7 100644 --- a/resource_management/juniper.py +++ b/resource_management/juniper.py @@ -77,6 +77,12 @@ LINE_CARDS_LIST_SCHEMA = { } +def _is_physical_ifc_name(name): + # TODO: is there a better way to filter out lags? other interfaces? + # cf. https://github.com/Juniper/py-junos-eznc/blob/master/lib/jnpr/junos/op/ethport.yml#L6 # noqa: E501 + return re.match('[fgxe][et]-', name) is not None + + def _slot_number(name): """ parses names like 'FPC 2', 'PIC 17' and returns @@ -371,6 +377,8 @@ def load_logical_interfaces(router: 'jnpr.junos.Device'): interfaces = {} for lu in LogicalInterfacesTable(router).get(): assert lu.logical.startswith(lu.physical) # sanity + if not _is_physical_ifc_name(lu.physical): + continue interfaces.setdefault(lu.physical, set()).add(lu.logical) return interfaces @@ -416,6 +424,8 @@ def load_installed_ethernet_ports(router: 'jnpr.junos.Device'): interfaces = {} for ifc in PhysicalInterfacesTable(router).get(): + if not _is_physical_ifc_name(ifc.interface): + continue interfaces[ifc.interface] = { 'admin': ifc.admin == 'up', 'oper': ifc.admin == 'up' diff --git a/test/test_parse_router.py b/test/test_parse_router.py index dfe39da..1d0fb0e 100644 --- a/test/test_parse_router.py +++ b/test/test_parse_router.py @@ -94,7 +94,7 @@ def test_physical_no_lag(mocked_router): ssh_config=ssh) as dev: physical = juniper.load_installed_ethernet_ports(dev) - assert all(p['name'].startswith('ae') is False for p in physical) + assert all(p.startswith('ae') is False for p in physical.keys()) -- GitLab