mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-26 21:45:20 +02:00
fix(domain-filters): support dependency expansion via seed param
- Added missing 'Iterable' import in 'canonical_domains_map' to avoid NameError. - Introduced 'seed' parameter so the filter can start traversal from current play apps while still emitting canonical domains for discovered dependencies (e.g. web-svc-collabora). - Updated 01_constructor.yml to pass full 'applications' and a clean 'seed' list (using dict2items → key) instead of '.keys()' method calls, fixing integration test error: 'reference to application keys is invalid'. This resolves issues where collabora domains were missing and integration tests failed. Ref: https://chatgpt.com/share/68a51f9b-3924-800f-a41b-803d8dd10397
This commit is contained in:
parent
b867a52471
commit
6d70f78989
@ -5,6 +5,7 @@ import os
|
|||||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||||
from module_utils.entity_name_utils import get_entity_name
|
from module_utils.entity_name_utils import get_entity_name
|
||||||
from module_utils.role_dependency_resolver import RoleDependencyResolver
|
from module_utils.role_dependency_resolver import RoleDependencyResolver
|
||||||
|
from typing import Iterable
|
||||||
|
|
||||||
|
|
||||||
class FilterModule(object):
|
class FilterModule(object):
|
||||||
@ -18,6 +19,7 @@ class FilterModule(object):
|
|||||||
*,
|
*,
|
||||||
recursive: bool = False,
|
recursive: bool = False,
|
||||||
roles_base_dir: str | None = None,
|
roles_base_dir: str | None = None,
|
||||||
|
seed: Iterable[str] | None = None,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Build { app_id: [canonical domains...] }.
|
Build { app_id: [canonical domains...] }.
|
||||||
@ -28,7 +30,8 @@ class FilterModule(object):
|
|||||||
if not isinstance(apps, dict):
|
if not isinstance(apps, dict):
|
||||||
raise AnsibleFilterError(f"'apps' must be a dict, got {type(apps).__name__}")
|
raise AnsibleFilterError(f"'apps' must be a dict, got {type(apps).__name__}")
|
||||||
|
|
||||||
app_keys = set(apps.keys())
|
app_keys = set(apps.keys())
|
||||||
|
seed_keys = set(seed) if seed is not None else app_keys
|
||||||
|
|
||||||
if recursive:
|
if recursive:
|
||||||
roles_base_dir = roles_base_dir or os.path.join(os.getcwd(), "roles")
|
roles_base_dir = roles_base_dir or os.path.join(os.getcwd(), "roles")
|
||||||
@ -38,18 +41,18 @@ class FilterModule(object):
|
|||||||
)
|
)
|
||||||
|
|
||||||
resolver = RoleDependencyResolver(roles_base_dir)
|
resolver = RoleDependencyResolver(roles_base_dir)
|
||||||
# WICHTIG: resolve_run_after=False (hart)
|
|
||||||
discovered_roles = resolver.resolve_transitively(
|
discovered_roles = resolver.resolve_transitively(
|
||||||
start_roles=app_keys,
|
start_roles=seed_keys,
|
||||||
resolve_include_role=True,
|
resolve_include_role=True,
|
||||||
resolve_import_role=True,
|
resolve_import_role=True,
|
||||||
resolve_dependencies=True,
|
resolve_dependencies=True,
|
||||||
resolve_run_after=False,
|
resolve_run_after=False,
|
||||||
max_depth=None,
|
max_depth=None,
|
||||||
)
|
)
|
||||||
|
# all discovered roles that actually have config entries in `apps`
|
||||||
target_apps = discovered_roles & app_keys
|
target_apps = discovered_roles & app_keys
|
||||||
else:
|
else:
|
||||||
target_apps = app_keys
|
target_apps = seed_keys
|
||||||
|
|
||||||
result = {}
|
result = {}
|
||||||
seen_domains = {}
|
seen_domains = {}
|
||||||
|
@ -41,10 +41,16 @@
|
|||||||
|
|
||||||
- name: Merge current play domain definitions
|
- name: Merge current play domain definitions
|
||||||
set_fact:
|
set_fact:
|
||||||
current_play_domains: >-
|
current_play_domains: >-
|
||||||
{{ current_play_applications |
|
{{
|
||||||
canonical_domains_map(PRIMARY_DOMAIN) |
|
applications
|
||||||
combine(domains | default({}, true), recursive=True)
|
| canonical_domains_map(
|
||||||
|
PRIMARY_DOMAIN,
|
||||||
|
recursive=True,
|
||||||
|
roles_base_dir=([ playbook_dir, 'roles' ] | path_join),
|
||||||
|
seed=(current_play_applications | dict2items | map(attribute='key') | list)
|
||||||
|
)
|
||||||
|
| combine(domains | default({}, true), recursive=True)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
- name: Merge domain definitions for all domains
|
- name: Merge domain definitions for all domains
|
||||||
|
Loading…
x
Reference in New Issue
Block a user