diff options
| author | Christian Breunig <christian@breunig.cc> | 2024-08-26 07:23:59 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-26 07:23:59 +0200 |
| commit | 42191a8f6a4efc248e973c1bc3a974474835b15e (patch) | |
| tree | 80fa64b91d8a3dcf16e286178433232be5b4f46c /python/vyos/configdep.py | |
| parent | da64a7246e9b12d5bd84287517cfbfa59e364c28 (diff) | |
| parent | 9ff620c50625c81733020f399c7f5a14e07c4d09 (diff) | |
| download | veeos-1x-42191a8f6a4efc248e973c1bc3a974474835b15e.tar.gz veeos-1x-42191a8f6a4efc248e973c1bc3a974474835b15e.zip | |
Merge pull request #4015 from jestabro/configdep-prio
T6671: defer config dependency if scheduled in priority queue
Diffstat (limited to 'python/vyos/configdep.py')
| -rw-r--r-- | python/vyos/configdep.py | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/python/vyos/configdep.py b/python/vyos/configdep.py index e0fe1ddac..cf7c9d543 100644 --- a/python/vyos/configdep.py +++ b/python/vyos/configdep.py @@ -95,7 +95,8 @@ def get_dependency_dict(config: 'Config') -> dict: setattr(config, 'cached_dependency_dict', d) return d -def run_config_mode_script(script: str, config: 'Config'): +def run_config_mode_script(target: str, config: 'Config'): + script = target + '.py' path = os.path.join(directories['conf_mode'], script) name = canon_name(script) mod = load_as_module(name, path) @@ -109,15 +110,34 @@ def run_config_mode_script(script: str, config: 'Config'): except (VyOSError, ConfigError) as e: raise ConfigError(str(e)) from e +def run_conditionally(target: str, tagnode: str, config: 'Config'): + tag_ext = f'_{tagnode}' if tagnode else '' + script_name = f'{target}{tag_ext}' + + scripts_called = getattr(config, 'scripts_called', []) + commit_scripts = getattr(config, 'commit_scripts', []) + + debug_print(f'scripts_called: {scripts_called}') + debug_print(f'commit_scripts: {commit_scripts}') + + if script_name in commit_scripts and script_name not in scripts_called: + debug_print(f'dependency {script_name} deferred to priority') + return + + run_config_mode_script(target, config) + def def_closure(target: str, config: 'Config', tagnode: typing.Optional[str] = None) -> typing.Callable: - script = target + '.py' def func_impl(): + tag_value = '' if tagnode is not None: os.environ['VYOS_TAGNODE_VALUE'] = tagnode - run_config_mode_script(script, config) + tag_value = tagnode + run_conditionally(target, tag_value, config) + tag_ext = f'_{tagnode}' if tagnode is not None else '' func_impl.__name__ = f'{target}{tag_ext}' + return func_impl def set_dependents(case: str, config: 'Config', |
