summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-08-20 14:58:29 -0500
committerGitHub <noreply@github.com>2025-08-20 14:58:29 -0500
commitd104ac2c0c5e94316f3d5825df73b93c639ec0cc (patch)
tree6282e737d16585806d7e30f7657c3354f0870299 /python
parentb0006c043ba6e28b3013766c930acdfba50b8b42 (diff)
parentf37a62d6cb0ff0de068f7efe87b1b44ff38d44e8 (diff)
downloadvyos-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.py6
-rw-r--r--python/vyos/configsession.py34
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])