summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2026-10-01 17:46:46 +0100
committerGitHub <noreply@github.com>2026-10-01 17:46:46 +0100
commit954afbf43c52460c4c7385a8b5cb44af66835064 (patch)
tree9861c7b729d4fd3eea56a601e4910e8856684e8c /python
parentdfe2203a7fe7fa24de3fa2d8e82fa85dbb0eba52 (diff)
parentb3a6256c10ebb65df3937a9d32cffe8e9b51795a (diff)
downloadvyos-1x-954afbf43c52460c4c7385a8b5cb44af66835064.tar.gz
vyos-1x-954afbf43c52460c4c7385a8b5cb44af66835064.zip
Merge pull request #5493 from jestabro/trim-reftree-caches
T9341: Fix consistency of legacy templates, xml_ref cache, and reference tree
Diffstat (limited to 'python')
-rw-r--r--python/vyos/configtree.py9
-rw-r--r--python/vyos/referencetree.py8
-rwxr-xr-xpython/vyos/xml_ref/generate_cache.py18
3 files changed, 31 insertions, 4 deletions
diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py
index a6ba408a8..dceb205ab 100644
--- a/python/vyos/configtree.py
+++ b/python/vyos/configtree.py
@@ -829,12 +829,17 @@ def subtree_values_of_path(
return list(map(tuple, lst))
-def reference_tree_to_json(from_dir, to_file, internal_cache='', libpath=LIBPATH):
+def reference_tree_to_json(
+ from_dir, to_file, internal_cache='', exclude_paths='[]', libpath=LIBPATH
+):
# pylint: disable=raise-missing-from
try:
lib = get_lib(libpath)
res = lib.reference_tree_to_json(
- internal_cache.encode(), from_dir.encode(), to_file.encode()
+ internal_cache.encode(),
+ exclude_paths.encode(),
+ from_dir.encode(),
+ to_file.encode(),
)
except Exception as e:
raise ConfigTreeError(e)
diff --git a/python/vyos/referencetree.py b/python/vyos/referencetree.py
index 1ffa690bc..2f50b19d4 100644
--- a/python/vyos/referencetree.py
+++ b/python/vyos/referencetree.py
@@ -18,6 +18,7 @@ from pathlib import Path
from vyos.defaults import reference_tree_cache
from vyos.configtree import LIBPATH
from vyos.configtree import get_lib
+from vyos.configtree import check_path
class ReferenceTreeError(Exception):
@@ -62,6 +63,13 @@ class ReferenceTree:
def to_json(self):
return self.__lib.to_json_reference_tree(self.__pointer).decode()
+ def exists(self, path):
+ check_path(path)
+ path_str = ' '.join(map(str, path)).encode()
+
+ res = self.__lib.exists(self.__pointer, path_str)
+ return bool(res)
+
def get_owner(self, path):
return self.__lib.get_owner(self.__pointer, path.encode()).decode()
diff --git a/python/vyos/xml_ref/generate_cache.py b/python/vyos/xml_ref/generate_cache.py
index daea50dc9..44514f708 100755
--- a/python/vyos/xml_ref/generate_cache.py
+++ b/python/vyos/xml_ref/generate_cache.py
@@ -60,6 +60,9 @@ def main():
parser.add_argument('--package-name', type=non_trivial, default='vyos-1x',
help='name of current package')
parser.add_argument('--output-path', help='path to generated cache')
+ parser.add_argument(
+ '--exclude-paths', action='extend', nargs='+', help='exclude paths from cache'
+ )
args = vars(parser.parse_args())
xml_dir = abspath(args['xml_dir'])
@@ -69,10 +72,21 @@ def main():
path = out_path if out_path is not None else pkg_cache
xml_cache = abspath(join(path, cache_name))
internal_cache = args['internal_cache']
+ exclude_paths = args['exclude_paths'] or []
+ # we accept paths as directory path strings, with possible 'node.tag'
+ # entries, for comparison with removal in template dirs in the Makefile
+ exclude_paths = list(
+ map(lambda l: [c for c in l.split('/') if c and c != 'node.tag'], exclude_paths)
+ )
+ json_exclude_paths = json.dumps(exclude_paths)
try:
- reference_tree_to_json(xml_dir, xml_tmp,
- internal_cache=internal_cache)
+ reference_tree_to_json(
+ xml_dir,
+ xml_tmp,
+ internal_cache=internal_cache,
+ exclude_paths=json_exclude_paths,
+ )
except ConfigTreeError as e:
print(e)
sys.exit(1)