summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-07-25 00:39:14 +0200
committerChristian Poessinger <christian@poessinger.com>2020-07-25 17:30:12 +0200
commite70a304e36fc6456e16fea81ace4a0a5fd8bd1df (patch)
tree3959df9b7a5509b84ea92fd1fb577a8e0038d004
parent72c0ac35b4acf049de29ce1ea67af28659793098 (diff)
downloadvyos-1x-e70a304e36fc6456e16fea81ace4a0a5fd8bd1df.tar.gz
vyos-1x-e70a304e36fc6456e16fea81ace4a0a5fd8bd1df.zip
ifconfig: T2653: make ifname an optional argument to get_interface_dict()
Further reduce the boiler-plate code to determine interface tag node or not. It can be passed into get_interface_dict() if explicitly required - else it is taken from the environment.
-rw-r--r--python/vyos/configdict.py11
-rwxr-xr-xsrc/conf_mode/interfaces-bonding.py10
-rwxr-xr-xsrc/conf_mode/interfaces-bridge.py11
-rwxr-xr-xsrc/conf_mode/interfaces-dummy.py8
-rwxr-xr-xsrc/conf_mode/interfaces-ethernet.py8
-rwxr-xr-xsrc/conf_mode/interfaces-geneve.py9
-rwxr-xr-xsrc/conf_mode/interfaces-loopback.py8
-rwxr-xr-xsrc/conf_mode/interfaces-macsec.py8
-rwxr-xr-xsrc/conf_mode/interfaces-pppoe.py8
-rwxr-xr-xsrc/conf_mode/interfaces-pseudo-ethernet.py8
-rwxr-xr-xsrc/conf_mode/interfaces-wireless.py8
-rwxr-xr-xsrc/conf_mode/interfaces-wirelessmodem.py9
12 files changed, 21 insertions, 85 deletions
diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py
index 53b5f9492..126d6195a 100644
--- a/python/vyos/configdict.py
+++ b/python/vyos/configdict.py
@@ -15,8 +15,8 @@
"""
A library for retrieving value dicts from VyOS configs in a declarative fashion.
-
"""
+import os
import jmespath
from enum import Enum
@@ -24,7 +24,6 @@ from copy import deepcopy
from vyos import ConfigError
from vyos.validate import is_member
-from vyos.util import ifname_from_config
def retrieve_config(path_hash, base_path, config):
"""
@@ -195,7 +194,7 @@ def get_removed_vlans(conf, dict):
return dict
-def get_interface_dict(config, base, ifname):
+def get_interface_dict(config, base, ifname=''):
"""
Common utility function to retrieve and mandgle the interfaces available
in CLI configuration. All interfaces have a common base ground where the
@@ -205,6 +204,12 @@ def get_interface_dict(config, base, ifname):
"""
from vyos.xml import defaults
+ if not ifname:
+ # determine tagNode instance
+ if 'VYOS_TAGNODE_VALUE' not in os.environ:
+ raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
+ ifname = os.environ['VYOS_TAGNODE_VALUE']
+
# retrieve interface default values
default_values = defaults(base)
diff --git a/src/conf_mode/interfaces-bonding.py b/src/conf_mode/interfaces-bonding.py
index 8e87a0059..3b238f1ea 100755
--- a/src/conf_mode/interfaces-bonding.py
+++ b/src/conf_mode/interfaces-bonding.py
@@ -60,13 +60,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'bonding']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- bond = get_interface_dict(conf, base, ifname)
+ bond = get_interface_dict(conf, base)
# To make our own life easier transfor the list of member interfaces
# into a dictionary - we will use this to add additional information
@@ -107,7 +101,7 @@ def get_config():
# Check if we are a member of a bond device
tmp = is_member(conf, interface, 'bonding')
- if tmp and tmp != ifname:
+ if tmp and tmp != bond['ifname']:
interface_config.update({'is_bond_member' : tmp})
# bond members must not have an assigned address
diff --git a/src/conf_mode/interfaces-bridge.py b/src/conf_mode/interfaces-bridge.py
index 9c43d1983..ee8e85e73 100755
--- a/src/conf_mode/interfaces-bridge.py
+++ b/src/conf_mode/interfaces-bridge.py
@@ -41,13 +41,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'bridge']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- bridge = get_interface_dict(conf, base, ifname)
+ bridge = get_interface_dict(conf, base)
# determine which members have been removed
tmp = node_changed(conf, ['member', 'interface'])
@@ -69,13 +63,12 @@ def get_config():
# the default dictionary is not properly paged into the dict (see T2665)
# thus we will ammend it ourself
default_member_values = defaults(base + ['member', 'interface'])
-
for interface, interface_config in bridge['member']['interface'].items():
interface_config.update(default_member_values)
# Check if we are a member of another bridge device
tmp = is_member(conf, interface, 'bridge')
- if tmp and tmp != ifname:
+ if tmp and tmp != bridge['ifname']:
interface_config.update({'is_bridge_member' : tmp})
# Check if we are a member of a bond device
diff --git a/src/conf_mode/interfaces-dummy.py b/src/conf_mode/interfaces-dummy.py
index 6d2a78e30..8df86c8ea 100755
--- a/src/conf_mode/interfaces-dummy.py
+++ b/src/conf_mode/interfaces-dummy.py
@@ -35,13 +35,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'dummy']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- dummy = get_interface_dict(conf, base, ifname)
+ dummy = get_interface_dict(conf, base)
return dummy
def verify(dummy):
diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py
index 24ea0af7c..10758e35a 100755
--- a/src/conf_mode/interfaces-ethernet.py
+++ b/src/conf_mode/interfaces-ethernet.py
@@ -37,13 +37,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'ethernet']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- ethernet = get_interface_dict(conf, base, ifname)
+ ethernet = get_interface_dict(conf, base)
return ethernet
def verify(ethernet):
diff --git a/src/conf_mode/interfaces-geneve.py b/src/conf_mode/interfaces-geneve.py
index 868ab5ccf..1104bd3c0 100755
--- a/src/conf_mode/interfaces-geneve.py
+++ b/src/conf_mode/interfaces-geneve.py
@@ -37,14 +37,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'geneve']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- geneve = get_interface_dict(conf, base, ifname)
-
+ geneve = get_interface_dict(conf, base)
return geneve
def verify(geneve):
diff --git a/src/conf_mode/interfaces-loopback.py b/src/conf_mode/interfaces-loopback.py
index 68a1392ff..0398cd591 100755
--- a/src/conf_mode/interfaces-loopback.py
+++ b/src/conf_mode/interfaces-loopback.py
@@ -32,13 +32,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'loopback']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- loopback = get_interface_dict(conf, base, ifname)
+ loopback = get_interface_dict(conf, base)
return loopback
def verify(loopback):
diff --git a/src/conf_mode/interfaces-macsec.py b/src/conf_mode/interfaces-macsec.py
index 06aee9ea0..ca15212d4 100755
--- a/src/conf_mode/interfaces-macsec.py
+++ b/src/conf_mode/interfaces-macsec.py
@@ -42,13 +42,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'macsec']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- macsec = get_interface_dict(conf, base, ifname)
+ macsec = get_interface_dict(conf, base)
# Check if interface has been removed
if 'deleted' in macsec:
diff --git a/src/conf_mode/interfaces-pppoe.py b/src/conf_mode/interfaces-pppoe.py
index 6947cc1e2..b9a88a949 100755
--- a/src/conf_mode/interfaces-pppoe.py
+++ b/src/conf_mode/interfaces-pppoe.py
@@ -38,13 +38,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'pppoe']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- pppoe = get_interface_dict(conf, base, ifname)
+ pppoe = get_interface_dict(conf, base)
# PPPoE is "special" the default MTU is 1492 - update accordingly
# as the config_level is already st in get_interface_dict() - we can use []
diff --git a/src/conf_mode/interfaces-pseudo-ethernet.py b/src/conf_mode/interfaces-pseudo-ethernet.py
index 55f11e65e..4afea2b3a 100755
--- a/src/conf_mode/interfaces-pseudo-ethernet.py
+++ b/src/conf_mode/interfaces-pseudo-ethernet.py
@@ -40,13 +40,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'pseudo-ethernet']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- peth = get_interface_dict(conf, base, ifname)
+ peth = get_interface_dict(conf, base)
mode = leaf_node_changed(conf, ['mode'])
if mode:
diff --git a/src/conf_mode/interfaces-wireless.py b/src/conf_mode/interfaces-wireless.py
index 42b55ee6a..b6f247952 100755
--- a/src/conf_mode/interfaces-wireless.py
+++ b/src/conf_mode/interfaces-wireless.py
@@ -71,13 +71,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'wireless']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- wifi = get_interface_dict(conf, base, ifname)
+ wifi = get_interface_dict(conf, base)
if 'security' in wifi and 'wpa' in wifi['security']:
wpa_cipher = wifi['security']['wpa'].get('cipher')
diff --git a/src/conf_mode/interfaces-wirelessmodem.py b/src/conf_mode/interfaces-wirelessmodem.py
index 9a5dae9e0..4081be3c9 100755
--- a/src/conf_mode/interfaces-wirelessmodem.py
+++ b/src/conf_mode/interfaces-wirelessmodem.py
@@ -48,14 +48,7 @@ def get_config():
"""
conf = Config()
base = ['interfaces', 'wirelessmodem']
-
- # determine tagNode instance
- if 'VYOS_TAGNODE_VALUE' not in os.environ:
- raise ConfigError('Interface (VYOS_TAGNODE_VALUE) not specified')
-
- ifname = os.environ['VYOS_TAGNODE_VALUE']
- wwan = get_interface_dict(conf, base, ifname)
-
+ wwan = get_interface_dict(conf, base)
return wwan
def verify(wwan):