From 84f8c540967721030be20c510314e417391ca7c2 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Tue, 19 Aug 2025 20:57:03 -0500 Subject: T7493: add load_config_obj to load into vyconfd --- python/vyos/configsession.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'python') 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]) -- cgit v1.2.3 From 3b1e60b4a8f21e16e720ed32a1dda6e57139ac49 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Tue, 19 Aug 2025 20:57:25 -0500 Subject: T7493: use method load_config_obj in revert_soft --- python/vyos/config_mgmt.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'python') diff --git a/python/vyos/config_mgmt.py b/python/vyos/config_mgmt.py index 51c6f2241..b549b3005 100644 --- a/python/vyos/config_mgmt.py +++ b/python/vyos/config_mgmt.py @@ -307,7 +307,11 @@ Proceed ?""" session = ConfigSession(os.getpid(), app='config-mgmt') try: - session.load_explicit(revert_ct) + if session.vyconf_backend(): + session.load_config_obj(revert_ct) + else: + session.load_explicit(revert_ct) + session.commit() except ConfigSessionError as e: raise ConfigMgmtError(e) from e -- cgit v1.2.3 From f30d561fd5323634ab2d5b13884a72325b7fe218 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Tue, 19 Aug 2025 20:57:44 -0500 Subject: T7493: config_mgmt console_scripts available in vyconf context --- python/vyos/configsession.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'python') diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py index 55b13d472..cd0088b60 100644 --- a/python/vyos/configsession.py +++ b/python/vyos/configsession.py @@ -319,18 +319,12 @@ class ConfigSession(object): return out def commit_confirm(self, minutes: int = DEFAULT_COMMIT_CONFIRM_MINUTES): - if self._vyconf_session is None: - out = self.__run_command(COMMIT_CONFIRM + [f'-t {minutes}']) - else: - out = 'unimplemented' + out = self.__run_command(COMMIT_CONFIRM + [f'-t {minutes}']) return out def confirm(self): - if self._vyconf_session is None: - out = self.__run_command(CONFIRM) - else: - out = 'unimplemented' + out = self.__run_command(CONFIRM) return out -- cgit v1.2.3