summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/vyos/template.py21
-rw-r--r--python/vyos/tpm.py2
-rw-r--r--python/vyos/xml_ref/__init__.py6
-rw-r--r--python/vyos/xml_ref/definition.py27
4 files changed, 43 insertions, 13 deletions
diff --git a/python/vyos/template.py b/python/vyos/template.py
index ac77e8a3d..fbc5f1456 100644
--- a/python/vyos/template.py
+++ b/python/vyos/template.py
@@ -25,6 +25,14 @@ from vyos.utils.file import makedir
from vyos.utils.permission import chmod
from vyos.utils.permission import chown
+# We use a mutable global variable for the default template directory
+# to make it possible to call scripts from this repository
+# outside of live VyOS systems.
+# If something (like the image build scripts)
+# want to call a script, they can modify the default location
+# to the repository path.
+DEFAULT_TEMPLATE_DIR = directories["templates"]
+
# Holds template filters registered via register_filter()
_FILTERS = {}
_TESTS = {}
@@ -35,18 +43,7 @@ def _get_environment(location=None):
from os import getenv
if location is None:
- # Sometimes functions that rely on templates need to be executed outside of VyOS installations:
- # for example, installer functions are executed for image builds,
- # and anything may be invoked for testing from a developer's machine.
- # This environment variable allows running any unmodified code
- # with a custom template location.
- location_env_var = getenv("VYOS_TEMPLATE_DIR")
- if location_env_var:
- print(f"Using environment variable {location_env_var}")
- template_dir = location_env_var
- else:
- template_dir = directories["templates"]
- loc_loader=FileSystemLoader(template_dir)
+ loc_loader=FileSystemLoader(DEFAULT_TEMPLATE_DIR)
else:
loc_loader=FileSystemLoader(location)
env = Environment(
diff --git a/python/vyos/tpm.py b/python/vyos/tpm.py
index b9f28546f..a24f149fd 100644
--- a/python/vyos/tpm.py
+++ b/python/vyos/tpm.py
@@ -15,7 +15,7 @@
import os
import tempfile
-from vyos.util import rc_cmd
+from vyos.utils.process import rc_cmd
default_pcrs = ['0','2','4','7']
tpm_handle = 0x81000000
diff --git a/python/vyos/xml_ref/__init__.py b/python/vyos/xml_ref/__init__.py
index bf434865d..2ba3da4e8 100644
--- a/python/vyos/xml_ref/__init__.py
+++ b/python/vyos/xml_ref/__init__.py
@@ -53,6 +53,12 @@ def is_valueless(path: list) -> bool:
def is_leaf(path: list) -> bool:
return load_reference().is_leaf(path)
+def owner(path: list) -> str:
+ return load_reference().owner(path)
+
+def priority(path: list) -> str:
+ return load_reference().priority(path)
+
def cli_defined(path: list, node: str, non_local=False) -> bool:
return load_reference().cli_defined(path, node, non_local=non_local)
diff --git a/python/vyos/xml_ref/definition.py b/python/vyos/xml_ref/definition.py
index c90c5ddbc..c85835ffd 100644
--- a/python/vyos/xml_ref/definition.py
+++ b/python/vyos/xml_ref/definition.py
@@ -135,6 +135,33 @@ class Xml:
d = self._get_ref_path(path)
return self._is_leaf_node(d)
+ def _least_upper_data(self, path: list, name: str) -> str:
+ ref_path = path.copy()
+ d = self.ref
+ data = ''
+ while ref_path and d:
+ d = d.get(ref_path[0], {})
+ ref_path.pop(0)
+ if self._is_tag_node(d) and ref_path:
+ ref_path.pop(0)
+ if self._is_leaf_node(d) and ref_path:
+ ref_path.pop(0)
+ res = self._get_ref_node_data(d, name)
+ if res is not None:
+ data = res
+
+ return data
+
+ def owner(self, path: list) -> str:
+ from pathlib import Path
+ data = self._least_upper_data(path, 'owner')
+ if data:
+ data = Path(data.split()[0]).name
+ return data
+
+ def priority(self, path: list) -> str:
+ return self._least_upper_data(path, 'priority')
+
@staticmethod
def _dict_get(d: dict, path: list) -> dict:
for i in path: