diff options
| author | John Estabrook <jestabro@vyos.io> | 2025-08-20 14:58:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-20 14:58:29 -0500 |
| commit | d104ac2c0c5e94316f3d5825df73b93c639ec0cc (patch) | |
| tree | 6282e737d16585806d7e30f7657c3354f0870299 /python | |
| parent | b0006c043ba6e28b3013766c930acdfba50b8b42 (diff) | |
| parent | f37a62d6cb0ff0de068f7efe87b1b44ff38d44e8 (diff) | |
| download | vyos-1x-d104ac2c0c5e94316f3d5825df73b93c639ec0cc.tar.gz vyos-1x-d104ac2c0c5e94316f3d5825df73b93c639ec0cc.zip | |
Merge pull request #4670 from jestabro/commit-confirm
T7493: add vyconf support for commit-confirm
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/config_mgmt.py | 6 | ||||
| -rw-r--r-- | python/vyos/configsession.py | 34 |
2 files changed, 29 insertions, 11 deletions
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 diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py index 50f93f890..cd0088b60 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 = [] @@ -309,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 @@ -339,11 +343,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 +362,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]) |
