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 | |
| 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']
| -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): | 
