summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2026-06-12 13:02:22 -0500
committerJohn Estabrook <jestabro@vyos.io>2026-06-12 15:35:38 -0500
commitd2438ac233ae4202ce068dc367517334270b9beb (patch)
tree877c84fcb0275eec7c79232303e8478bb9e0cdea /src
parent548dcd5b1471ed2877e53a9663869903a6d02f8f (diff)
downloadvyos-1x-d2438ac233ae4202ce068dc367517334270b9beb.tar.gz
vyos-1x-d2438ac233ae4202ce068dc367517334270b9beb.zip
T8980: apply exclusion mask before taking difference of trees
Diffstat (limited to 'src')
-rw-r--r--src/op_mode/config_sync.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/op_mode/config_sync.py b/src/op_mode/config_sync.py
index fb344767e..8d473cc70 100644
--- a/src/op_mode/config_sync.py
+++ b/src/op_mode/config_sync.py
@@ -28,6 +28,9 @@ from vyos.configtree import ConfigTree
from vyos.configtree import ConfigTreeError
from vyos.configtree import DiffTree
from vyos.config import Config
+from vyos.derivedtree import apply_exclusion_list
+from vyos.derivedtree import DerivedTreeError
+from vyos.defaults import config_sync_exclusion_list
CONFIG_FILE = Path('/run/config_sync_conf.conf')
@@ -121,6 +124,14 @@ class ConfigSyncDiffManager:
except ConfigTreeError as e:
raise opmode.InternalError(f'Unable to build remote ConfigTree: {e}') from e
+ def _get_exclude_list(self) -> list[list[str]]:
+ # add as instance method, for future access to CLI settings from self.Config
+ exclude_file = Path(config_sync_exclusion_list)
+ if not exclude_file.exists():
+ raise opmode.InternalError('Config-sync exclusion list file not available')
+
+ return read_json(exclude_file, defaultonfailure=[])
+
def _format_remote_diff(self, diff_tree: DiffTree, path: list, commands: bool):
add_tree = diff_tree.add
del_tree = diff_tree.delete
@@ -192,8 +203,16 @@ class ConfigSyncDiffManager:
'Invalid source, must be one of: running, candidate, saved'
)
+ exclude_list = self._get_exclude_list()
+
+ try:
+ masked_local = apply_exclusion_list(local_tree, exclude_list)
+ masked_remote = apply_exclusion_list(remote_tree, exclude_list)
+ except DerivedTreeError as e:
+ raise opmode.InternalError(str(e)) from e
+
try:
- diff_tree = DiffTree(remote_tree, local_tree)
+ diff_tree = DiffTree(masked_remote, masked_local)
except ConfigTreeError as e:
raise opmode.InternalError(str(e)) from e