summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/vyos/utils/session.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/python/vyos/utils/session.py b/python/vyos/utils/session.py
index bc5240fc7..80691a378 100644
--- a/python/vyos/utils/session.py
+++ b/python/vyos/utils/session.py
@@ -15,6 +15,9 @@
# pylint: disable=import-outside-toplevel
+import os
+from inspect import stack
+
def in_config_session():
"""Vyatta bash completion uses the following environment variable for
@@ -23,3 +26,45 @@ def in_config_session():
from os import environ
return '_OFR_CONFIGURE' in environ
+
+
+# utility for functions below
+def get_caller_name() -> str:
+ filename = stack()[2].filename
+ return os.path.basename(filename)
+
+
+# OOB operations used (rarely) to update the session config during commit
+# execution of config mode scripts.
+# The standard use is for replacing plaintext with encrypted passwords in
+# the session config during commit.
+def delete_cli_node(cli_path: list):
+ from vyos.vyconf_session import VyconfSession
+ from vyos.configsession import ConfigSessionError
+
+ pid = os.environ.get('SESSION_PID', '')
+ if not pid:
+ raise ValueError('Missing env var SESSION_PID')
+
+ script_name = get_caller_name()
+ tag_value = os.environ.get('VYOS_TAGNODE_VALUE', None)
+
+ vs = VyconfSession(pid=pid, on_error=ConfigSessionError)
+ vs.aux_delete(cli_path, script_name, tag_value)
+
+
+def add_cli_node(cli_path: list, value: str = None):
+ from vyos.vyconf_session import VyconfSession
+ from vyos.configsession import ConfigSessionError
+
+ pid = os.environ.get('SESSION_PID', '')
+ if not pid:
+ raise ValueError('Missing env var SESSION_PID')
+
+ script_name = get_caller_name()
+ tag_value = os.environ.get('VYOS_TAGNODE_VALUE', None)
+
+ cli_path = cli_path + [value] if value else cli_path
+
+ vs = VyconfSession(pid=pid, on_error=ConfigSessionError)
+ vs.aux_set(cli_path, script_name, tag_value)