diff options
author | John Estabrook <jestabro@vyos.io> | 2025-03-31 14:28:37 -0500 |
---|---|---|
committer | John Estabrook <jestabro@vyos.io> | 2025-04-08 09:29:42 -0500 |
commit | 1e5077c8f5ac28eade4d2ad8898ed8bd3f79edc7 (patch) | |
tree | 4c3b4f5002626c0ee331be234f89467c5fcd5953 | |
parent | ada2cac0324dd3fa668b9af58f119b8a64b4e9e1 (diff) | |
download | vyos-1x-1e5077c8f5ac28eade4d2ad8898ed8bd3f79edc7.tar.gz vyos-1x-1e5077c8f5ac28eade4d2ad8898ed8bd3f79edc7.zip |
T7302: implement commit dry-run for vyconfd/commitd
-rw-r--r-- | python/vyos/config.py | 12 | ||||
-rw-r--r-- | python/vyos/configdep.py | 9 | ||||
-rwxr-xr-x | src/services/vyos-commitd | 14 |
3 files changed, 29 insertions, 6 deletions
diff --git a/python/vyos/config.py b/python/vyos/config.py index 1fab46761..546eeceab 100644 --- a/python/vyos/config.py +++ b/python/vyos/config.py @@ -149,6 +149,18 @@ class Config(object): return self._running_config return self._session_config + def get_bool_attr(self, attr) -> bool: + if not hasattr(self, attr): + return False + else: + tmp = getattr(self, attr) + if not isinstance(tmp, bool): + return False + return tmp + + def set_bool_attr(self, attr, val): + setattr(self, attr, val) + def _make_path(self, path): # Backwards-compatibility stuff: original implementation used string paths # libvyosconfig paths are lists, but since node names cannot contain whitespace, diff --git a/python/vyos/configdep.py b/python/vyos/configdep.py index cf7c9d543..747af8dbe 100644 --- a/python/vyos/configdep.py +++ b/python/vyos/configdep.py @@ -102,11 +102,16 @@ def run_config_mode_script(target: str, config: 'Config'): mod = load_as_module(name, path) config.set_level([]) + dry_run = config.get_bool_attr('dry_run') try: c = mod.get_config(config) mod.verify(c) - mod.generate(c) - mod.apply(c) + if not dry_run: + mod.generate(c) + mod.apply(c) + else: + if hasattr(mod, 'call_dependents'): + mod.call_dependents() except (VyOSError, ConfigError) as e: raise ConfigError(str(e)) from e diff --git a/src/services/vyos-commitd b/src/services/vyos-commitd index 55f0c8741..e7f2d82c7 100755 --- a/src/services/vyos-commitd +++ b/src/services/vyos-commitd @@ -233,8 +233,9 @@ def initialization(session: Session) -> Session: scripts_called = [] setattr(config, 'scripts_called', scripts_called) - dry_run = False - setattr(config, 'dry_run', dry_run) + dry_run = session.dry_run + config.set_bool_attr('dry_run', dry_run) + logger.debug(f'commit dry_run is {dry_run}') session.config = config @@ -247,11 +248,16 @@ def run_script(script_name: str, config: Config, args: list) -> tuple[bool, str] script = conf_mode_scripts[script_name] script.argv = args config.set_level([]) + dry_run = config.get_bool_attr('dry_run') try: c = script.get_config(config) script.verify(c) - script.generate(c) - script.apply(c) + if not dry_run: + script.generate(c) + script.apply(c) + else: + if hasattr(script, 'call_dependents'): + script.call_dependents() except ConfigError as e: logger.error(e) return False, str(e) |