diff options
| author | Christian Breunig <christian@breunig.cc> | 2024-03-23 15:37:51 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-23 15:37:51 +0100 | 
| commit | 43b206c0fdf03fe236bf7715e2e45992284885f1 (patch) | |
| tree | 7d34bc04873662722e0d9d43451477b627e1f690 | |
| parent | db08b6bd2300b125541e7eaa35e98ae5a2225111 (diff) | |
| parent | f7250ecf1d119f14d72f99ee379deaaae0790f0e (diff) | |
| download | vyos-1x-43b206c0fdf03fe236bf7715e2e45992284885f1.tar.gz vyos-1x-43b206c0fdf03fe236bf7715e2e45992284885f1.zip | |
Merge pull request #3173 from c-po/configverify-T6131
vyos.configverify: T6131: verify_interface_exists() checks CLI interfaces, too
| -rw-r--r-- | python/vyos/configverify.py | 27 | 
1 files changed, 23 insertions, 4 deletions
| diff --git a/python/vyos/configverify.py b/python/vyos/configverify.py index 5d3723876..6508ccdd9 100644 --- a/python/vyos/configverify.py +++ b/python/vyos/configverify.py @@ -269,14 +269,33 @@ def verify_bridge_delete(config):          raise ConfigError(f'Interface "{interface}" cannot be deleted as it '                            f'is a member of bridge "{bridge_name}"!') -def verify_interface_exists(ifname): +def verify_interface_exists(ifname, warning_only=False):      """      Common helper function used by interface implementations to perform -    recurring validation if an interface actually exists. +    recurring validation if an interface actually exists. We first probe +    if the interface is defined on the CLI, if it's not found we try if +    it exists at the OS level.      """      import os -    if not os.path.exists(f'/sys/class/net/{ifname}'): -        raise ConfigError(f'Interface "{ifname}" does not exist!') +    from vyos.base import Warning +    from vyos.configquery import ConfigTreeQuery +    from vyos.utils.dict import dict_search_recursive + +    # Check if interface is present in CLI config +    config = ConfigTreeQuery() +    tmp = config.get_config_dict(['interfaces'], get_first_key=True) +    if bool(list(dict_search_recursive(tmp, ifname))): +        return True + +    # Interface not found on CLI, try Linux Kernel +    if os.path.exists(f'/sys/class/net/{ifname}'): +        return True + +    message = f'Interface "{ifname}" does not exist!' +    if warning_only: +        Warning(message) +        return False +    raise ConfigError(message)  def verify_source_interface(config):      """ | 
