summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2026-06-12 10:13:38 -0500
committerJohn Estabrook <jestabro@vyos.io>2026-06-12 15:35:38 -0500
commitfa674c1256c53e5998ecf7e9351f8c164e012f5c (patch)
treec4fe97d097a4e468ee8f470a8d0be4b4a0aac390 /python
parentc2f87f243a1f813fbdd319b1004fd3a26397ab3e (diff)
downloadvyos-1x-fa674c1256c53e5998ecf7e9351f8c164e012f5c.tar.gz
vyos-1x-fa674c1256c53e5998ecf7e9351f8c164e012f5c.zip
T8980: add util get_saved_config_tree
Add util for commonly used retrieval of ConfigTree of the saved config.
Diffstat (limited to 'python')
-rw-r--r--python/vyos/configtree.py15
-rw-r--r--python/vyos/utils/config.py12
2 files changed, 27 insertions, 0 deletions
diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py
index 9c5d69ad1..24b3252fd 100644
--- a/python/vyos/configtree.py
+++ b/python/vyos/configtree.py
@@ -19,6 +19,8 @@ import logging
from ctypes import cdll, c_char_p, c_void_p, c_int, c_bool
from typing import TYPE_CHECKING
+from pathlib import Path
+
# https://peps.python.org/pep-0484/#forward-references
# for type 'ConfigDict'
@@ -265,6 +267,19 @@ class ConfigTree:
if self.__migration:
self.migration_log = logging.getLogger('vyos.migrate')
+ @classmethod
+ def load_file(cls, location):
+ # pylint: disable=raise-missing-from
+ config_file = Path(location)
+ if not config_file.exists():
+ raise ConfigTreeError(f'Missing config file at {location}')
+ try:
+ config_tree = cls(config_file.read_text())
+ except (OSError, ValueError, TypeError) as e:
+ raise ConfigTreeError(f'Corrupted config file at {location}: {e}')
+
+ return config_tree
+
def __del__(self):
if self.__config is not None:
self.__destroy(self.__config)
diff --git a/python/vyos/utils/config.py b/python/vyos/utils/config.py
index 1032e22dc..004d64bbd 100644
--- a/python/vyos/utils/config.py
+++ b/python/vyos/utils/config.py
@@ -75,6 +75,18 @@ def write_saved_value(path: list, value=None, config_path: str=config_file):
write_file(config_path, ct.to_string())
+
+def get_saved_config_tree() -> 'ConfigTree':
+ # pylint: disable=import-outside-toplevel
+ """Return config tree of saved config.
+
+ Raises ConfigTreeError.
+ """
+ from vyos.configtree import ConfigTree
+
+ return ConfigTree.load_file(config_file)
+
+
def flag(l: list) -> list:
res = [l[0:i] for i,_ in enumerate(l, start=1)]
return res