diff options
| author | John Estabrook <jestabro@vyos.io> | 2025-08-19 20:57:03 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2025-08-20 09:19:26 -0500 |
| commit | 84f8c540967721030be20c510314e417391ca7c2 (patch) | |
| tree | f6ba2ae2cfeb189293ff6f28059a45c919b2b810 /python | |
| parent | b0006c043ba6e28b3013766c930acdfba50b8b42 (diff) | |
| download | vyos-1x-84f8c540967721030be20c510314e417391ca7c2.tar.gz vyos-1x-84f8c540967721030be20c510314e417391ca7c2.zip | |
T7493: add load_config_obj to load into vyconfd
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/configsession.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py index 50f93f890..55b13d472 100644 --- a/python/vyos/configsession.py +++ b/python/vyos/configsession.py @@ -17,6 +17,9 @@ import os import re import sys import subprocess +from tempfile import NamedTemporaryFile +from typing import TypeAlias +from typing import Union from vyos.defaults import directories from vyos.utils.process import is_systemd_service_running @@ -26,6 +29,10 @@ from vyos.utils.backend import vyconf_backend from vyos.vyconf_session import VyconfSession from vyos.base import Warning as Warn from vyos.defaults import DEFAULT_COMMIT_CONFIRM_MINUTES +from vyos.configtree import ConfigTree + +# type of config file path or configtree +ConfigObj: TypeAlias = Union[str, ConfigTree] CLI_SHELL_API = '/bin/cli-shell-api' @@ -238,6 +245,9 @@ class ConfigSession(object): def get_session_env(self): return self.__session_env + def vyconf_backend(self) -> bool: + return bool(self._vyconf_session) + def set(self, path, value=None): if not value: value = [] @@ -339,11 +349,13 @@ class ConfigSession(object): if format == 'raw': return config_data - def load_config(self, file_path): + def load_config(self, file_path, cached: bool = False): if self._vyconf_session is None: out = self.__run_command(LOAD_CONFIG + [file_path]) else: - out, _ = self._vyconf_session.load_config(file_name=file_path) + out, _ = self._vyconf_session.load_config( + file_name=file_path, cached=cached + ) return out @@ -356,6 +368,14 @@ class ConfigSession(object): except LoadConfigError as e: raise ConfigSessionError(e) from e + def load_config_obj(self, config_obj: ConfigObj): + if isinstance(config_obj, ConfigTree): + with NamedTemporaryFile() as f: + config_obj.write_cache(f.name) + self.load_config(f.name, cached=True) + else: + self.load_config(config_obj) + def migrate_and_load_config(self, file_path): if self._vyconf_session is None: out = self.__run_command(MIGRATE_LOAD_CONFIG + [file_path]) |
