diff options
author | Christian Breunig <christian@breunig.cc> | 2023-11-27 11:23:22 +0100 |
---|---|---|
committer | Christian Breunig <christian@breunig.cc> | 2023-11-27 11:28:06 +0100 |
commit | e02546655adefe1a6fb3660402e697f872d3ffe7 (patch) | |
tree | 562c3eed41cd3d603ee12ad4fe02a6a43b1c6ce7 /python | |
parent | b1a6d770e2d391119b318bcd7fa7ae438555440b (diff) | |
download | vyos-1x-e02546655adefe1a6fb3660402e697f872d3ffe7.tar.gz vyos-1x-e02546655adefe1a6fb3660402e697f872d3ffe7.zip |
vyos.utils: T5749: fix get_vrf_members() call to iproute2
The iproute2 master argument is used for both a VRF and a bridge device. Using
this in the VRF context would retrieve and report back the wrong interfaces:
Old implementation:
===================
>>> from vyos.utils.network import get_vrf_members
>>> get_vrf_members('br1')
['eth1', 'eth2', 'vxlan1']
>>> get_vrf_members('black')
['br1.3002', 'br1.4000', 'pim6reg10200']
The new implementation:
=======================
>>> from vyos.utils.network import get_vrf_members
>>> get_vrf_members('br1')
[]
>>> get_vrf_members('black')
['br1.3002', 'br1.4000', 'pim6reg10200']
Diffstat (limited to 'python')
-rw-r--r-- | python/vyos/utils/network.py | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/python/vyos/utils/network.py b/python/vyos/utils/network.py index 6a5de5423..2a0808fca 100644 --- a/python/vyos/utils/network.py +++ b/python/vyos/utils/network.py @@ -61,14 +61,17 @@ def get_vrf_members(vrf: str) -> list: """ import json from vyos.utils.process import cmd - if not interface_exists(vrf): - raise ValueError(f'VRF "{vrf}" does not exist!') - output = cmd(f'ip --json --brief link show master {vrf}') - answer = json.loads(output) interfaces = [] - for data in answer: - if 'ifname' in data: - interfaces.append(data.get('ifname')) + try: + if not interface_exists(vrf): + raise ValueError(f'VRF "{vrf}" does not exist!') + output = cmd(f'ip --json --brief link show vrf {vrf}') + answer = json.loads(output) + for data in answer: + if 'ifname' in data: + interfaces.append(data.get('ifname')) + except: + pass return interfaces def get_interface_vrf(interface): |