diff options
| author | Christian Breunig <christian@breunig.cc> | 2024-04-03 00:01:13 +0200 | 
|---|---|---|
| committer | Christian Breunig <christian@breunig.cc> | 2024-04-03 00:01:13 +0200 | 
| commit | 4c7c168fe970b807750a05ceb66b70c0d8652535 (patch) | |
| tree | 945345f3f465d9647d10f7fde742756d2c77e435 /src | |
| parent | 86b632874288aa5707a94a4f28ca816e543823b9 (diff) | |
| download | vyos-1x-4c7c168fe970b807750a05ceb66b70c0d8652535.tar.gz vyos-1x-4c7c168fe970b807750a05ceb66b70c0d8652535.zip | |
T6199: replace netifaces.interfaces() with common custom helpers
* Use interface_exists() outside of verify()
* Use verify_interface_exists() in verify() to drop common error message
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/interfaces_bonding.py | 8 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_geneve.py | 8 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_l2tpv3.py | 8 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_macsec.py | 8 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_openvpn.py | 4 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_pppoe.py | 4 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_pseudo-ethernet.py | 9 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_tunnel.py | 11 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_virtual-ethernet.py | 9 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_vti.py | 3 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_vxlan.py | 8 | ||||
| -rwxr-xr-x | src/conf_mode/policy_local-route.py | 7 | ||||
| -rwxr-xr-x | src/conf_mode/protocols_igmp-proxy.py | 7 | ||||
| -rwxr-xr-x | src/conf_mode/qos.py | 7 | ||||
| -rwxr-xr-x | src/conf_mode/service_mdns_repeater.py | 8 | ||||
| -rwxr-xr-x | src/conf_mode/system_flow-accounting.py | 10 | ||||
| -rwxr-xr-x | src/conf_mode/system_option.py | 6 | ||||
| -rwxr-xr-x | src/conf_mode/vpn_ipsec.py | 4 | 
18 files changed, 54 insertions, 75 deletions
| diff --git a/src/conf_mode/interfaces_bonding.py b/src/conf_mode/interfaces_bonding.py index 8184d8415..d19de20c5 100755 --- a/src/conf_mode/interfaces_bonding.py +++ b/src/conf_mode/interfaces_bonding.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2023 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -17,7 +17,7 @@  import os  from sys import exit -from netifaces import interfaces +  from vyos.config import Config  from vyos.configdict import get_interface_dict  from vyos.configdict import is_node_changed @@ -29,7 +29,6 @@ from vyos.configverify import verify_bridge_delete  from vyos.configverify import verify_dhcpv6  from vyos.configverify import verify_mirror_redirect  from vyos.configverify import verify_mtu_ipv6 -from vyos.configverify import verify_source_interface  from vyos.configverify import verify_vlan_config  from vyos.configverify import verify_vrf  from vyos.ifconfig import BondIf @@ -38,6 +37,7 @@ from vyos.ifconfig import Section  from vyos.template import render_to_string  from vyos.utils.dict import dict_search  from vyos.utils.dict import dict_to_paths_values +from vyos.utils.network import interface_exists  from vyos.configdict import has_address_configured  from vyos.configdict import has_vrf_configured  from vyos.configdep import set_dependents, call_dependents @@ -209,7 +209,7 @@ def verify(bond):              if interface == 'lo':                  raise ConfigError('Loopback interface "lo" can not be added to a bond') -            if interface not in interfaces(): +            if not interface_exists(interface):                  raise ConfigError(error_msg + 'it does not exist!')              if 'is_bridge_member' in interface_config: diff --git a/src/conf_mode/interfaces_geneve.py b/src/conf_mode/interfaces_geneve.py index f6694ddde..769139e0f 100755 --- a/src/conf_mode/interfaces_geneve.py +++ b/src/conf_mode/interfaces_geneve.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2022 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -15,7 +15,6 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  from sys import exit -from netifaces import interfaces  from vyos.config import Config  from vyos.configdict import get_interface_dict @@ -26,6 +25,7 @@ from vyos.configverify import verify_bridge_delete  from vyos.configverify import verify_mirror_redirect  from vyos.configverify import verify_bond_bridge_member  from vyos.ifconfig import GeneveIf +from vyos.utils.network import interface_exists  from vyos import ConfigError  from vyos import airbag @@ -77,8 +77,8 @@ def generate(geneve):  def apply(geneve):      # Check if GENEVE interface already exists      if 'rebuild_required' in geneve or 'delete' in geneve: -        if geneve['ifname'] in interfaces(): -            g = GeneveIf(geneve['ifname']) +        if interface_exists(geneve['ifname']): +            g = GeneveIf(**geneve)              # GENEVE is super picky and the tunnel always needs to be recreated,              # thus we can simply always delete it first.              g.remove() diff --git a/src/conf_mode/interfaces_l2tpv3.py b/src/conf_mode/interfaces_l2tpv3.py index e1db3206e..e25793543 100755 --- a/src/conf_mode/interfaces_l2tpv3.py +++ b/src/conf_mode/interfaces_l2tpv3.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2020 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -14,10 +14,7 @@  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. -import os -  from sys import exit -from netifaces import interfaces  from vyos.config import Config  from vyos.configdict import get_interface_dict @@ -30,6 +27,7 @@ from vyos.configverify import verify_bond_bridge_member  from vyos.ifconfig import L2TPv3If  from vyos.utils.kernel import check_kmod  from vyos.utils.network import is_addr_assigned +from vyos.utils.network import interface_exists  from vyos import ConfigError  from vyos import airbag  airbag.enable() @@ -87,7 +85,7 @@ def generate(l2tpv3):  def apply(l2tpv3):      # Check if L2TPv3 interface already exists -    if l2tpv3['ifname'] in interfaces(): +    if interface_exists(l2tpv3['ifname']):          # L2TPv3 is picky when changing tunnels/sessions, thus we can simply          # always delete it first.          l = L2TPv3If(**l2tpv3) diff --git a/src/conf_mode/interfaces_macsec.py b/src/conf_mode/interfaces_macsec.py index 0a927ac88..eb0ca9a8b 100755 --- a/src/conf_mode/interfaces_macsec.py +++ b/src/conf_mode/interfaces_macsec.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2020-2023 VyOS maintainers and contributors +# Copyright (C) 2020-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -16,7 +16,6 @@  import os -from netifaces import interfaces  from sys import exit  from vyos.config import Config @@ -35,6 +34,7 @@ from vyos.ifconfig import Interface  from vyos.template import render  from vyos.utils.process import call  from vyos.utils.dict import dict_search +from vyos.utils.network import interface_exists  from vyos.utils.process import is_systemd_service_running  from vyos import ConfigError  from vyos import airbag @@ -172,8 +172,8 @@ def apply(macsec):      if 'deleted' in macsec or 'shutdown_required' in macsec:          call(f'systemctl stop {systemd_service}') -        if macsec['ifname'] in interfaces(): -            tmp = MACsecIf(macsec['ifname']) +        if interface_exists(macsec['ifname']): +            tmp = MACsecIf(**macsec)              tmp.remove()          if 'deleted' in macsec: diff --git a/src/conf_mode/interfaces_openvpn.py b/src/conf_mode/interfaces_openvpn.py index 45569dd21..402543a33 100755 --- a/src/conf_mode/interfaces_openvpn.py +++ b/src/conf_mode/interfaces_openvpn.py @@ -26,7 +26,6 @@ from ipaddress import IPv4Network  from ipaddress import IPv6Address  from ipaddress import IPv6Network  from ipaddress import summarize_address_range -from netifaces import interfaces  from secrets import SystemRandom  from shutil import rmtree @@ -63,6 +62,7 @@ from vyos.utils.process import call  from vyos.utils.permission import chown  from vyos.utils.process import cmd  from vyos.utils.network import is_addr_assigned +from vyos.utils.network import interface_exists  from vyos import ConfigError  from vyos import airbag @@ -683,7 +683,7 @@ def apply(openvpn):              if os.path.isfile(cleanup_file):                  os.unlink(cleanup_file) -        if interface in interfaces(): +        if interface_exists(interface):              VTunIf(interface).remove()      # dynamically load/unload DCO Kernel extension if requested diff --git a/src/conf_mode/interfaces_pppoe.py b/src/conf_mode/interfaces_pppoe.py index 42f084309..f315493cd 100755 --- a/src/conf_mode/interfaces_pppoe.py +++ b/src/conf_mode/interfaces_pppoe.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2021 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -18,7 +18,6 @@ import os  from sys import exit  from copy import deepcopy -from netifaces import interfaces  from vyos.config import Config  from vyos.configdict import get_interface_dict @@ -26,7 +25,6 @@ from vyos.configdict import is_node_changed  from vyos.configdict import get_pppoe_interfaces  from vyos.configverify import verify_authentication  from vyos.configverify import verify_source_interface -from vyos.configverify import verify_interface_exists  from vyos.configverify import verify_vrf  from vyos.configverify import verify_mtu_ipv6  from vyos.configverify import verify_mirror_redirect diff --git a/src/conf_mode/interfaces_pseudo-ethernet.py b/src/conf_mode/interfaces_pseudo-ethernet.py index dce5c2358..446beffd3 100755 --- a/src/conf_mode/interfaces_pseudo-ethernet.py +++ b/src/conf_mode/interfaces_pseudo-ethernet.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2022 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -15,7 +15,6 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  from sys import exit -from netifaces import interfaces  from vyos.config import Config  from vyos.configdict import get_interface_dict @@ -29,8 +28,8 @@ from vyos.configverify import verify_source_interface  from vyos.configverify import verify_vlan_config  from vyos.configverify import verify_mtu_parent  from vyos.configverify import verify_mirror_redirect -from vyos.configverify import verify_bond_bridge_member  from vyos.ifconfig import MACVLANIf +from vyos.utils.network import interface_exists  from vyos import ConfigError  from vyos import airbag @@ -84,8 +83,8 @@ def generate(peth):  def apply(peth):      # Check if the MACVLAN interface already exists      if 'rebuild_required' in peth or 'deleted' in peth: -        if peth['ifname'] in interfaces(): -            p = MACVLANIf(peth['ifname']) +        if interface_exists(peth['ifname']): +            p = MACVLANIf(**peth)              # MACVLAN is always needs to be recreated,              # thus we can simply always delete it first.              p.remove() diff --git a/src/conf_mode/interfaces_tunnel.py b/src/conf_mode/interfaces_tunnel.py index efa5ebc64..43ba72857 100755 --- a/src/conf_mode/interfaces_tunnel.py +++ b/src/conf_mode/interfaces_tunnel.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2018-2022 yOS maintainers and contributors +# Copyright (C) 2018-2024 yOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -14,10 +14,7 @@  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. -import os -  from sys import exit -from netifaces import interfaces  from vyos.config import Config  from vyos.configdict import get_interface_dict @@ -31,10 +28,10 @@ from vyos.configverify import verify_vrf  from vyos.configverify import verify_tunnel  from vyos.configverify import verify_bond_bridge_member  from vyos.ifconfig import Interface -from vyos.ifconfig import Section  from vyos.ifconfig import TunnelIf -from vyos.utils.network import get_interface_config  from vyos.utils.dict import dict_search +from vyos.utils.network import get_interface_config +from vyos.utils.network import interface_exists  from vyos import ConfigError  from vyos import airbag  airbag.enable() @@ -202,7 +199,7 @@ def apply(tunnel):      if ('deleted' in tunnel or 'encapsulation_changed' in tunnel or encap in          ['gretap', 'ip6gretap', 'erspan', 'ip6erspan'] or remote in ['any'] or          'key_changed' in tunnel): -        if interface in interfaces(): +        if interface_exists(interface):              tmp = Interface(interface)              tmp.remove()          if 'deleted' in tunnel: diff --git a/src/conf_mode/interfaces_virtual-ethernet.py b/src/conf_mode/interfaces_virtual-ethernet.py index 8efe89c41..cb6104f59 100755 --- a/src/conf_mode/interfaces_virtual-ethernet.py +++ b/src/conf_mode/interfaces_virtual-ethernet.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2022 VyOS maintainers and contributors +# Copyright (C) 2022-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -16,7 +16,6 @@  from sys import exit -from netifaces import interfaces  from vyos import ConfigError  from vyos import airbag  from vyos.config import Config @@ -25,7 +24,7 @@ from vyos.configverify import verify_address  from vyos.configverify import verify_bridge_delete  from vyos.configverify import verify_vrf  from vyos.ifconfig import VethIf - +from vyos.utils.network import interface_exists  airbag.enable()  def get_config(config=None): @@ -92,8 +91,8 @@ def generate(peth):  def apply(veth):      # Check if the Veth interface already exists      if 'rebuild_required' in veth or 'deleted' in veth: -        if veth['ifname'] in interfaces(): -            p = VethIf(veth['ifname']) +        if interface_exists(veth['ifname']): +            p = VethIf(**veth)              p.remove()      if 'deleted' not in veth: diff --git a/src/conf_mode/interfaces_vti.py b/src/conf_mode/interfaces_vti.py index 9871810ae..06a65a390 100755 --- a/src/conf_mode/interfaces_vti.py +++ b/src/conf_mode/interfaces_vti.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2021 VyOS maintainers and contributors +# Copyright (C) 2021-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -14,7 +14,6 @@  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. -from netifaces import interfaces  from sys import exit  from vyos.config import Config diff --git a/src/conf_mode/interfaces_vxlan.py b/src/conf_mode/interfaces_vxlan.py index 4251e611b..bf0a30a00 100755 --- a/src/conf_mode/interfaces_vxlan.py +++ b/src/conf_mode/interfaces_vxlan.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2023 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -17,7 +17,6 @@  import os  from sys import exit -from netifaces import interfaces  from vyos.base import Warning  from vyos.config import Config @@ -35,6 +34,7 @@ from vyos.ifconfig import Interface  from vyos.ifconfig import VXLANIf  from vyos.template import is_ipv6  from vyos.utils.dict import dict_search +from vyos.utils.network import interface_exists  from vyos import ConfigError  from vyos import airbag  airbag.enable() @@ -212,8 +212,8 @@ def generate(vxlan):  def apply(vxlan):      # Check if the VXLAN interface already exists      if 'rebuild_required' in vxlan or 'delete' in vxlan: -        if vxlan['ifname'] in interfaces(): -            v = VXLANIf(vxlan['ifname']) +        if interface_exists(vxlan['ifname']): +            v = VXLANIf(**vxlan)              # VXLAN is super picky and the tunnel always needs to be recreated,              # thus we can simply always delete it first.              v.remove() diff --git a/src/conf_mode/policy_local-route.py b/src/conf_mode/policy_local-route.py index 91e4fce2c..d19b23e18 100755 --- a/src/conf_mode/policy_local-route.py +++ b/src/conf_mode/policy_local-route.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2020-2023 VyOS maintainers and contributors +# Copyright (C) 2020-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -19,12 +19,12 @@ import os  from itertools import product  from sys import exit -from netifaces import interfaces  from vyos.config import Config  from vyos.configdict import dict_merge  from vyos.configdict import node_changed  from vyos.configdict import leaf_node_changed  from vyos.template import render +from vyos.configverify import verify_interface_exists  from vyos.utils.process import call  from vyos import ConfigError  from vyos import airbag @@ -227,8 +227,7 @@ def verify(pbr):                  if 'inbound_interface' in pbr_route['rule'][rule]:                      interface = pbr_route['rule'][rule]['inbound_interface'] -                    if interface not in interfaces(): -                        raise ConfigError(f'Interface "{interface}" does not exist') +                    verify_interface_exists(interface)      return None diff --git a/src/conf_mode/protocols_igmp-proxy.py b/src/conf_mode/protocols_igmp-proxy.py index 40db417dd..afcef0985 100755 --- a/src/conf_mode/protocols_igmp-proxy.py +++ b/src/conf_mode/protocols_igmp-proxy.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2018-2020 VyOS maintainers and contributors +# Copyright (C) 2018-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -17,10 +17,10 @@  import os  from sys import exit -from netifaces import interfaces  from vyos.base import Warning  from vyos.config import Config +from vyos.configverify import verify_interface_exists  from vyos.template import render  from vyos.utils.process import call  from vyos.utils.dict import dict_search @@ -65,8 +65,7 @@ def verify(igmp_proxy):      upstream = 0      for interface, config in igmp_proxy['interface'].items(): -        if interface not in interfaces(): -            raise ConfigError(f'Interface "{interface}" does not exist') +        verify_interface_exists(interface)          if dict_search('role', config) == 'upstream':              upstream += 1 diff --git a/src/conf_mode/qos.py b/src/conf_mode/qos.py index 2b4fcc1bf..818f9a7ac 100755 --- a/src/conf_mode/qos.py +++ b/src/conf_mode/qos.py @@ -23,6 +23,7 @@ from vyos.base import Warning  from vyos.config import Config  from vyos.configdep import set_dependents, call_dependents  from vyos.configdict import dict_merge +from vyos.configverify import verify_interface_exists  from vyos.ifconfig import Section  from vyos.qos import CAKE  from vyos.qos import DropTail @@ -37,7 +38,6 @@ from vyos.qos import RoundRobin  from vyos.qos import TrafficShaper  from vyos.qos import TrafficShaperHFSC  from vyos.utils.dict import dict_search_recursive -from vyos.utils.network import interface_exists  from vyos.utils.process import run  from vyos import ConfigError  from vyos import airbag @@ -215,11 +215,10 @@ def apply(qos):          return None      for interface, interface_config in qos['interface'].items(): -        if not interface_exists(interface): +        if not verify_interface_exists(interface, warning_only=True):              # When shaper is bound to a dialup (e.g. PPPoE) interface it is              # possible that it is yet not availbale when to QoS code runs. -            # Skip the configuration and inform the user -            Warning(f'Interface "{interface}" does not exist!') +            # Skip the configuration and inform the user via warning_only=True              continue          for direction in ['egress', 'ingress']: diff --git a/src/conf_mode/service_mdns_repeater.py b/src/conf_mode/service_mdns_repeater.py index 6526c23d1..207da5e03 100755 --- a/src/conf_mode/service_mdns_repeater.py +++ b/src/conf_mode/service_mdns_repeater.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2017-2022 VyOS maintainers and contributors +# Copyright (C) 2017-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -18,9 +18,10 @@ import os  from json import loads  from sys import exit -from netifaces import ifaddresses, interfaces, AF_INET, AF_INET6 +from netifaces import ifaddresses, AF_INET, AF_INET6  from vyos.config import Config +from vyos.configverify import verify_interface_exists  from vyos.ifconfig.vrrp import VRRP  from vyos.template import render  from vyos.utils.process import call @@ -64,8 +65,7 @@ def verify(mdns):      # For mdns-repeater to work it is essential that the interfaces has      # an IPv4 address assigned      for interface in mdns['interface']: -        if interface not in interfaces(): -            raise ConfigError(f'Interface "{interface}" does not exist!') +        verify_interface_exists(interface)          if mdns['ip_version'] in ['ipv4', 'both'] and AF_INET not in ifaddresses(interface):              raise ConfigError('mDNS repeater requires an IPv4 address to be ' diff --git a/src/conf_mode/system_flow-accounting.py b/src/conf_mode/system_flow-accounting.py index 206f513c8..2dacd92da 100755 --- a/src/conf_mode/system_flow-accounting.py +++ b/src/conf_mode/system_flow-accounting.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2018-2023 VyOS maintainers and contributors +# Copyright (C) 2018-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -20,11 +20,10 @@ import re  from sys import exit  from ipaddress import ip_address -from vyos.base import Warning  from vyos.config import Config  from vyos.config import config_dict_merge  from vyos.configverify import verify_vrf -from vyos.ifconfig import Section +from vyos.configverify import verify_interface_exists  from vyos.template import render  from vyos.utils.process import call  from vyos.utils.process import cmd @@ -184,10 +183,7 @@ def verify(flow_config):      # check that all configured interfaces exists in the system      for interface in flow_config['interface']: -        if interface not in Section.interfaces(): -            # Changed from error to warning to allow adding dynamic interfaces -            # and interface templates -            Warning(f'Interface "{interface}" is not presented in the system') +        verify_interface_exists(interface, warning_only=True)      # check sFlow configuration      if 'sflow' in flow_config: diff --git a/src/conf_mode/system_option.py b/src/conf_mode/system_option.py index 7ed451e16..a2e5db575 100755 --- a/src/conf_mode/system_option.py +++ b/src/conf_mode/system_option.py @@ -16,12 +16,12 @@  import os -from netifaces import interfaces  from sys import exit  from time import sleep  from vyos.config import Config  from vyos.configverify import verify_source_interface +from vyos.configverify import verify_interface_exists  from vyos.system import grub_util  from vyos.template import render  from vyos.utils.process import cmd @@ -56,9 +56,7 @@ def verify(options):      if 'http_client' in options:          config = options['http_client']          if 'source_interface' in config: -            if not config['source_interface'] in interfaces(): -                raise ConfigError(f'Source interface {source_interface} does not ' -                                  f'exist'.format(**config)) +            verify_interface_exists(config['source_interface'])          if {'source_address', 'source_interface'} <= set(config):              raise ConfigError('Can not define both HTTP source-interface and source-address') diff --git a/src/conf_mode/vpn_ipsec.py b/src/conf_mode/vpn_ipsec.py index 0c2f232df..d07aca979 100755 --- a/src/conf_mode/vpn_ipsec.py +++ b/src/conf_mode/vpn_ipsec.py @@ -168,9 +168,7 @@ def verify(ipsec):          for interface in ipsec['interface']:              # exclude check interface for dynamic interfaces              if tmp.match(interface): -                if not interface_exists(interface): -                    Warning(f'Interface "{interface}" does not exist yet and cannot be used ' -                            f'for IPsec until it is up!') +                verify_interface_exists(interface, warning_only=True)              else:                  verify_interface_exists(interface) | 
