From ec23c669710a1f98fd1bd2095ffb861007374bda Mon Sep 17 00:00:00 2001
From: Christian Breunig <christian@breunig.cc>
Date: Wed, 23 Aug 2023 20:14:14 +0200
Subject: vrf: T5428: move helpers to common vyos.utils.network module

Helper functions can and will be re-use din different code places.
---
 src/op_mode/neighbor.py |  5 +----
 src/op_mode/vrf.py      | 21 ++++-----------------
 2 files changed, 5 insertions(+), 21 deletions(-)

(limited to 'src/op_mode')

diff --git a/src/op_mode/neighbor.py b/src/op_mode/neighbor.py
index 1edeb0045..8b3c45c7c 100755
--- a/src/op_mode/neighbor.py
+++ b/src/op_mode/neighbor.py
@@ -31,14 +31,11 @@ import sys
 import typing
 
 import vyos.opmode
+from vyos.utils.network import interface_exists
 
 ArgFamily = typing.Literal['inet', 'inet6']
 ArgState = typing.Literal['reachable', 'stale', 'failed', 'permanent']
 
-def interface_exists(interface):
-    import os
-    return os.path.exists(f'/sys/class/net/{interface}')
-
 def get_raw_data(family, interface=None, state=None):
     from json import loads
     from vyos.utils.process import cmd
diff --git a/src/op_mode/vrf.py b/src/op_mode/vrf.py
index 1f0bbbaeb..51032a4b5 100755
--- a/src/op_mode/vrf.py
+++ b/src/op_mode/vrf.py
@@ -20,11 +20,11 @@ import sys
 import typing
 
 from tabulate import tabulate
+from vyos.utils.network import get_vrf_members
 from vyos.utils.process import cmd
 
 import vyos.opmode
 
-
 def _get_raw_data(name=None):
     """
     If vrf name is not set - get all VRFs
@@ -45,21 +45,6 @@ def _get_raw_data(name=None):
     return data
 
 
-def _get_vrf_members(vrf: str) -> list:
-    """
-    Get list of interface VRF members
-    :param vrf: str
-    :return: list
-    """
-    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'))
-    return interfaces if len(interfaces) > 0 else ['n/a']
-
-
 def _get_formatted_output(raw_data):
     data_entries = []
     for vrf in raw_data:
@@ -67,7 +52,9 @@ def _get_formatted_output(raw_data):
         state = vrf.get('operstate').lower()
         hw_address = vrf.get('address')
         flags = ','.join(vrf.get('flags')).lower()
-        members = ','.join(_get_vrf_members(name))
+        tmp = get_vrf_members(name)
+        if tmp: members = ','.join(get_vrf_members(name))
+        else: members = 'n/a'
         data_entries.append([name, state, hw_address, flags, members])
 
     headers = ["Name", "State", "MAC address", "Flags", "Interfaces"]
-- 
cgit v1.2.3