diff options
| author | John Estabrook <jestabro@vyos.io> | 2026-06-12 13:02:22 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2026-06-12 15:35:38 -0500 |
| commit | d2438ac233ae4202ce068dc367517334270b9beb (patch) | |
| tree | 877c84fcb0275eec7c79232303e8478bb9e0cdea /src | |
| parent | 548dcd5b1471ed2877e53a9663869903a6d02f8f (diff) | |
| download | vyos-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.py | 21 |
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 |
