diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2025-09-24 10:45:08 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-24 10:45:08 +0300 |
| commit | 97ca055ba1179faec7b260ee83efbfe83a370987 (patch) | |
| tree | 761b47b232c3c9243c49f1a29d82dd2f4c6a9e80 /python | |
| parent | bf1c29aa71980158a4e820d69351660e863cf219 (diff) | |
| parent | bb5797b834151aab46909b7a7cb45060687e70f2 (diff) | |
| download | vyos-1x-97ca055ba1179faec7b260ee83efbfe83a370987.tar.gz vyos-1x-97ca055ba1179faec7b260ee83efbfe83a370987.zip | |
Merge pull request #4737 from jestabro/edit-level-op-mode-dict
T7850: make op_mode_config_dict edit level aware
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/configquery.py | 13 | ||||
| -rw-r--r-- | python/vyos/utils/list.py | 23 |
2 files changed, 35 insertions, 1 deletions
diff --git a/python/vyos/configquery.py b/python/vyos/configquery.py index b661b1a9e..3f385d97b 100644 --- a/python/vyos/configquery.py +++ b/python/vyos/configquery.py @@ -39,6 +39,7 @@ from vyos.xml_ref import is_tag from vyos.base import Warning from vyos.utils.backend import vyconf_backend from vyos.configsource import ConfigSourceVyconfSession +from vyos.utils.list import list_strip config_file = os.path.join(directories['config'], 'config.boot') @@ -199,9 +200,19 @@ def op_mode_config_dict( ): if path is None: path = [] + command = ['/bin/cli-shell-api', '--show-active-only', 'showConfig'] - rc, out = op_mode_run(command + path) + edit_level = os.environ.get('VYATTA_EDIT_LEVEL', '') + if edit_level: + tmp = edit_level.split('/') + edit_path = [el for el in tmp if el] + relative_path = list_strip(path, edit_path) + else: + relative_path = path + + rc, out = op_mode_run(command + relative_path) + if rc == cli_shell_api_err.VYOS_EMPTY_CONFIG: out = '' if rc == cli_shell_api_err.VYOS_INVALID_PATH: diff --git a/python/vyos/utils/list.py b/python/vyos/utils/list.py index 931084e7c..ea4bcd3ba 100644 --- a/python/vyos/utils/list.py +++ b/python/vyos/utils/list.py @@ -18,3 +18,26 @@ def is_list_equal(first: list, second: list) -> bool: if len(first) != len(second) or len(first) == 0: return False return sorted(first) == sorted(second) + + +def list_strip(lst: list, sub: list, right: bool = False) -> list: + """Remove list 'sub' from beginning (right=False), resp., end of list 'lst'""" + + if not right: + while sub: + if lst[:1] == sub[:1]: + lst = lst[1:] + sub = sub[1:] + else: + lst = [] + sub = [] + else: + while sub: + if lst[-1:] == sub[-1:]: + lst = lst[:-1] + sub = sub[:-1] + else: + lst = [] + sub = [] + + return lst |
