summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-08-19 20:57:03 -0500
committerJohn Estabrook <jestabro@vyos.io>2025-08-20 09:19:26 -0500
commit84f8c540967721030be20c510314e417391ca7c2 (patch)
treef6ba2ae2cfeb189293ff6f28059a45c919b2b810 /python
parentb0006c043ba6e28b3013766c930acdfba50b8b42 (diff)
downloadvyos-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.py24
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])