From e174523fc6f9df07a8cb817fbf78c7335807a2af Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Sat, 12 Jul 2025 13:42:45 +0200 Subject: [PATCH] Solved collection dependency bug --- group_vars/all/15_about.yml | 8 +- roles/desk-bluray-player/vars/main.yml | 2 +- roles/desk-chromium/vars/main.yml | 2 +- roles/desk-firefox/vars/main.yml | 2 +- roles/desk-gnome-caffeine/vars/main.yml | 2 +- roles/desk-gnome-extensions/vars/main.yml | 2 +- roles/desk-gnome-terminal/vars/main.yml | 2 +- roles/desk-gnome/vars/main.yml | 2 +- roles/desk-gnucash/vars/main.yml | 2 +- roles/desk-jrnl/vars/main.yml | 2 +- roles/desk-keepassxc/vars/main.yml | 2 +- roles/desk-libreoffice/tasks/main.yml | 4 +- roles/desk-libreoffice/vars/main.yml | 2 +- roles/desk-nextcloud-client/vars/main.yml | 2 +- roles/desk-obs/vars/main.yml | 2 +- roles/desk-qbittorrent/vars/main.yml | 2 +- roles/desk-retroarch/vars/main.yml | 2 +- roles/desk-spotify/vars/main.yml | 2 +- roles/desk-ssh/vars/main.yml | 2 +- roles/desk-torbrowser/vars/main.yml | 2 +- roles/desk-virtual-box/vars/main.yml | 2 +- roles/desk-zoom/vars/main.yml | 2 +- roles/dev-java/vars/main.yml | 2 +- roles/dev-make/vars/main.yml | 2 +- roles/gen-hunspell/vars/main.yml | 2 +- roles/net-wireguard-core/vars/main.yml | 2 +- roles/net-wireguard-firewalled/vars/main.yml | 2 +- roles/net-wireguard-plain/vars/main.yml | 2 +- roles/util-desk-browser/vars/main.yml | 2 +- roles/util-desk-design/vars/main.yml | 2 +- roles/util-desk-dev-arduino/vars/main.yml | 2 +- roles/util-desk-dev-core/vars/main.yml | 2 +- roles/util-desk-dev-java/vars/main.yml | 2 +- roles/util-desk-dev-php/vars/main.yml | 2 +- roles/util-desk-dev-python/vars/main.yml | 2 +- roles/util-desk-dev-shell/vars/main.yml | 2 +- roles/util-desk-game-compose/vars/main.yml | 2 +- roles/util-desk-game-os/vars/main.yml | 2 +- roles/util-desk-game-windows/vars/main.yml | 2 +- roles/util-desk-office-tools/vars/main.yml | 2 +- roles/util-dev-admin-network/vars/main.yml | 2 +- roles/util-dev-admin/vars/main.yml | 2 +- .../util-srv-corporate-identity/vars/main.yml | 2 +- roles/web-app-portfolio/vars/main.yml | 2 +- roles/web-svc-asset/vars/main.yml | 2 +- roles/web-svc-file/config/main.yml | 2 + roles/web-svc-file/vars/main.yml | 2 +- roles/web-svc-html/vars/main.yml | 6 +- roles/web-svc-legal/vars/main.yml | 2 +- tasks/stages/01_constructor.yml | 2 +- .../test_dependency_application_id.py | 79 +++++++++++++++++++ .../test_applications_filter_for_html.py | 26 +++--- 52 files changed, 148 insertions(+), 69 deletions(-) create mode 100644 tests/integration/test_dependency_application_id.py diff --git a/group_vars/all/15_about.yml b/group_vars/all/15_about.yml index 390dbff6..2b9331a3 100644 --- a/group_vars/all/15_about.yml +++ b/group_vars/all/15_about.yml @@ -9,12 +9,12 @@ defaults_service_provider: city: "Cybertown" postal_code: "00001" country: "Nexusland" - logo: "{{ applications['asset'].url ~ '/img/logo.png' }}" + logo: "{{ applications['web-svc-asset'].url ~ '/img/logo.png' }}" platform: titel: "CyMaIS" subtitel: "One login. Infinite applications." - logo: "{{ applications['asset'].url ~ '/img/logo.png' }}" - favicon: "{{ applications['asset'].url ~ '/img/favicon.ico' }}" + logo: "{{ applications['web-svc-asset'].url ~ '/img/logo.png' }}" + favicon: "{{ applications['web-svc-asset'].url ~ '/img/favicon.ico' }}" contact: bluesky: >- {{ ('@' ~ users.contact.username ~ '.' ~ domains.bluesky.api) @@ -30,4 +30,4 @@ defaults_service_provider: legal: editorial_responsible: "Johannes Gutenberg" source_code: "https://github.com/kevinveenbirkenbach/cymais" - imprint: "{{web_protocol}}://{{ domains | get_domain('html') }}/imprint.html" \ No newline at end of file + imprint: "{{web_protocol}}://{{ domains | get_domain('web-svc-html') }}/imprint.html" \ No newline at end of file diff --git a/roles/desk-bluray-player/vars/main.yml b/roles/desk-bluray-player/vars/main.yml index 35f9e9ca..9b953e46 100644 --- a/roles/desk-bluray-player/vars/main.yml +++ b/roles/desk-bluray-player/vars/main.yml @@ -1 +1 @@ -application_id: bluray-player +application_id: desk-bluray-player diff --git a/roles/desk-chromium/vars/main.yml b/roles/desk-chromium/vars/main.yml index 91e76a5f..9efb57c0 100644 --- a/roles/desk-chromium/vars/main.yml +++ b/roles/desk-chromium/vars/main.yml @@ -1,5 +1,5 @@ --- -application_id: "chromium" +application_id: "desk-chromium" chromium_package: "{{ 'chromium-browser' if ansible_os_family == 'Debian' else 'chromium' }}" \ No newline at end of file diff --git a/roles/desk-firefox/vars/main.yml b/roles/desk-firefox/vars/main.yml index 6dc96382..15105977 100644 --- a/roles/desk-firefox/vars/main.yml +++ b/roles/desk-firefox/vars/main.yml @@ -1,7 +1,7 @@ --- # Default variables for the pc-firefox role -application_id: "firefox" +application_id: "desk-firefox" # Package name for Firefox on Arch Linux firefox_package: firefox diff --git a/roles/desk-gnome-caffeine/vars/main.yml b/roles/desk-gnome-caffeine/vars/main.yml index f8ee7118..1bdd4679 100644 --- a/roles/desk-gnome-caffeine/vars/main.yml +++ b/roles/desk-gnome-caffeine/vars/main.yml @@ -1,2 +1,2 @@ auto_start_directory: /home/{{users.client.username}}/.config/autostart/ -application_id: gnome-caffeine +application_id: desk-gnome-caffeine diff --git a/roles/desk-gnome-extensions/vars/main.yml b/roles/desk-gnome-extensions/vars/main.yml index 5770d926..869da763 100644 --- a/roles/desk-gnome-extensions/vars/main.yml +++ b/roles/desk-gnome-extensions/vars/main.yml @@ -1 +1 @@ -application_id: gnome-extensions +application_id: desk-gnome-extensions diff --git a/roles/desk-gnome-terminal/vars/main.yml b/roles/desk-gnome-terminal/vars/main.yml index d883c4d0..7a1de73e 100644 --- a/roles/desk-gnome-terminal/vars/main.yml +++ b/roles/desk-gnome-terminal/vars/main.yml @@ -1 +1 @@ -application_id: gnome-terminal +application_id: desk-gnome-terminal diff --git a/roles/desk-gnome/vars/main.yml b/roles/desk-gnome/vars/main.yml index 08d787fc..e09c169c 100644 --- a/roles/desk-gnome/vars/main.yml +++ b/roles/desk-gnome/vars/main.yml @@ -1 +1 @@ -application_id: gnome \ No newline at end of file +application_id: desk-gnome \ No newline at end of file diff --git a/roles/desk-gnucash/vars/main.yml b/roles/desk-gnucash/vars/main.yml index e43f7482..e8a78c5b 100644 --- a/roles/desk-gnucash/vars/main.yml +++ b/roles/desk-gnucash/vars/main.yml @@ -1 +1 @@ -application_id: gnucash +application_id: desk-gnucash diff --git a/roles/desk-jrnl/vars/main.yml b/roles/desk-jrnl/vars/main.yml index 8b52c5ca..e53dba6d 100644 --- a/roles/desk-jrnl/vars/main.yml +++ b/roles/desk-jrnl/vars/main.yml @@ -1 +1 @@ -application_id: jrnl +application_id: desk-jrnl diff --git a/roles/desk-keepassxc/vars/main.yml b/roles/desk-keepassxc/vars/main.yml index ee3e4b38..2c1d2023 100644 --- a/roles/desk-keepassxc/vars/main.yml +++ b/roles/desk-keepassxc/vars/main.yml @@ -1 +1 @@ -application_id: keepassxc +application_id: desk-keepassxc diff --git a/roles/desk-libreoffice/tasks/main.yml b/roles/desk-libreoffice/tasks/main.yml index fa36a18f..97579759 100644 --- a/roles/desk-libreoffice/tasks/main.yml +++ b/roles/desk-libreoffice/tasks/main.yml @@ -2,11 +2,11 @@ community.general.pacman: name: - ttf-liberation - - "libreoffice-{{ applications.libreoffice.flavor }}" + - "libreoffice-{{ applications['desk-libreoffice'].flavor }}" state: present - name: install libreoffice language packages community.general.pacman: - name: "libreoffice-{{ applications.libreoffice.flavor }}-{{ item }}" + name: "libreoffice-{{ applications['desk-libreoffice'].flavor }}-{{ item }}" state: present loop: "{{libreoffice_languages}}" diff --git a/roles/desk-libreoffice/vars/main.yml b/roles/desk-libreoffice/vars/main.yml index 6e09709a..02ab6a77 100644 --- a/roles/desk-libreoffice/vars/main.yml +++ b/roles/desk-libreoffice/vars/main.yml @@ -1 +1 @@ -application_id: "libreoffice" \ No newline at end of file +application_id: "desk-libreoffice" \ No newline at end of file diff --git a/roles/desk-nextcloud-client/vars/main.yml b/roles/desk-nextcloud-client/vars/main.yml index b25c94e9..1f755e97 100644 --- a/roles/desk-nextcloud-client/vars/main.yml +++ b/roles/desk-nextcloud-client/vars/main.yml @@ -1,3 +1,3 @@ user_home_directory: /home/{{users.client.username}}/ cloud_directory: '{{user_home_directory}}Clouds/{{cloud_fqdn}}/{{users.client.username}}/' -application_id: nextcloud-client +application_id: desk-nextcloud-client diff --git a/roles/desk-obs/vars/main.yml b/roles/desk-obs/vars/main.yml index 5456b8db..2e7a6f5a 100644 --- a/roles/desk-obs/vars/main.yml +++ b/roles/desk-obs/vars/main.yml @@ -1 +1 @@ -application_id: obs +application_id: desk-obs diff --git a/roles/desk-qbittorrent/vars/main.yml b/roles/desk-qbittorrent/vars/main.yml index 544c925c..eedf34ff 100644 --- a/roles/desk-qbittorrent/vars/main.yml +++ b/roles/desk-qbittorrent/vars/main.yml @@ -1 +1 @@ -application_id: qbittorrent +application_id: desk-qbittorrent diff --git a/roles/desk-retroarch/vars/main.yml b/roles/desk-retroarch/vars/main.yml index d3bb7682..ed2ae0d5 100644 --- a/roles/desk-retroarch/vars/main.yml +++ b/roles/desk-retroarch/vars/main.yml @@ -2,4 +2,4 @@ retroarch_packages: - retroarch - retroarch-assets-xmb - retroarch-assets-ozone -application_id: retroarch +application_id: desk-retroarch diff --git a/roles/desk-spotify/vars/main.yml b/roles/desk-spotify/vars/main.yml index c33d742e..bda2c780 100644 --- a/roles/desk-spotify/vars/main.yml +++ b/roles/desk-spotify/vars/main.yml @@ -1 +1 @@ -application_id: spotify +application_id: desk-spotify diff --git a/roles/desk-ssh/vars/main.yml b/roles/desk-ssh/vars/main.yml index b8caa346..bf1a6f09 100644 --- a/roles/desk-ssh/vars/main.yml +++ b/roles/desk-ssh/vars/main.yml @@ -1 +1 @@ -application_id: ssh +application_id: desk-ssh diff --git a/roles/desk-torbrowser/vars/main.yml b/roles/desk-torbrowser/vars/main.yml index f03cab6e..f608c1b9 100644 --- a/roles/desk-torbrowser/vars/main.yml +++ b/roles/desk-torbrowser/vars/main.yml @@ -1 +1 @@ -application_id: torbrowser +application_id: desk-torbrowser diff --git a/roles/desk-virtual-box/vars/main.yml b/roles/desk-virtual-box/vars/main.yml index 90a30d88..2f8ac3bd 100644 --- a/roles/desk-virtual-box/vars/main.yml +++ b/roles/desk-virtual-box/vars/main.yml @@ -1 +1 @@ -application_id: virtual-box +application_id: desk-virtual-box diff --git a/roles/desk-zoom/vars/main.yml b/roles/desk-zoom/vars/main.yml index 239d64d8..b0abd538 100644 --- a/roles/desk-zoom/vars/main.yml +++ b/roles/desk-zoom/vars/main.yml @@ -1 +1 @@ -application_id: zoom +application_id: desk-zoom diff --git a/roles/dev-java/vars/main.yml b/roles/dev-java/vars/main.yml index c6c00de3..30ccb57a 100644 --- a/roles/dev-java/vars/main.yml +++ b/roles/dev-java/vars/main.yml @@ -1 +1 @@ -application_id: java +application_id: dev-java diff --git a/roles/dev-make/vars/main.yml b/roles/dev-make/vars/main.yml index 42ce7798..fa0499a7 100644 --- a/roles/dev-make/vars/main.yml +++ b/roles/dev-make/vars/main.yml @@ -1 +1 @@ -application_id: make +application_id: dev-make \ No newline at end of file diff --git a/roles/gen-hunspell/vars/main.yml b/roles/gen-hunspell/vars/main.yml index b72d0597..3897df00 100644 --- a/roles/gen-hunspell/vars/main.yml +++ b/roles/gen-hunspell/vars/main.yml @@ -1 +1 @@ -application_id: hunspell +application_id: gen-hunspell diff --git a/roles/net-wireguard-core/vars/main.yml b/roles/net-wireguard-core/vars/main.yml index 6b0914ae..6f81fb05 100644 --- a/roles/net-wireguard-core/vars/main.yml +++ b/roles/net-wireguard-core/vars/main.yml @@ -1 +1 @@ -application_id: wireguard-core +application_id: net-wireguard-core diff --git a/roles/net-wireguard-firewalled/vars/main.yml b/roles/net-wireguard-firewalled/vars/main.yml index 203cb361..b4dd857f 100644 --- a/roles/net-wireguard-firewalled/vars/main.yml +++ b/roles/net-wireguard-firewalled/vars/main.yml @@ -1 +1 @@ -application_id: wireguard-firewalled +application_id: net-wireguard-firewalled diff --git a/roles/net-wireguard-plain/vars/main.yml b/roles/net-wireguard-plain/vars/main.yml index 088a7e62..ef1d7f46 100644 --- a/roles/net-wireguard-plain/vars/main.yml +++ b/roles/net-wireguard-plain/vars/main.yml @@ -1 +1 @@ -application_id: wireguard-plain +application_id: net-wireguard-plain diff --git a/roles/util-desk-browser/vars/main.yml b/roles/util-desk-browser/vars/main.yml index 51d5f7bb..8c5f7806 100644 --- a/roles/util-desk-browser/vars/main.yml +++ b/roles/util-desk-browser/vars/main.yml @@ -1 +1 @@ -application_id: browser +application_id: util-desk-browser diff --git a/roles/util-desk-design/vars/main.yml b/roles/util-desk-design/vars/main.yml index 6fcae65a..d7ddacf5 100644 --- a/roles/util-desk-design/vars/main.yml +++ b/roles/util-desk-design/vars/main.yml @@ -1 +1 @@ -application_id: design +application_id: util-desk-design diff --git a/roles/util-desk-dev-arduino/vars/main.yml b/roles/util-desk-dev-arduino/vars/main.yml index bcf5f714..174e5fa3 100644 --- a/roles/util-desk-dev-arduino/vars/main.yml +++ b/roles/util-desk-dev-arduino/vars/main.yml @@ -1 +1 @@ -application_id: dev-arduino +application_id: util-desk-dev-arduino diff --git a/roles/util-desk-dev-core/vars/main.yml b/roles/util-desk-dev-core/vars/main.yml index 6fbc07d1..765351e6 100644 --- a/roles/util-desk-dev-core/vars/main.yml +++ b/roles/util-desk-dev-core/vars/main.yml @@ -1 +1 @@ -application_id: dev-core +application_id: util-desk-dev-core diff --git a/roles/util-desk-dev-java/vars/main.yml b/roles/util-desk-dev-java/vars/main.yml index 30ccb57a..957ce65f 100644 --- a/roles/util-desk-dev-java/vars/main.yml +++ b/roles/util-desk-dev-java/vars/main.yml @@ -1 +1 @@ -application_id: dev-java +application_id: util-desk-dev-java diff --git a/roles/util-desk-dev-php/vars/main.yml b/roles/util-desk-dev-php/vars/main.yml index dff452f2..d03e4a72 100644 --- a/roles/util-desk-dev-php/vars/main.yml +++ b/roles/util-desk-dev-php/vars/main.yml @@ -1 +1 @@ -application_id: dev-php +application_id: util-desk-dev-php diff --git a/roles/util-desk-dev-python/vars/main.yml b/roles/util-desk-dev-python/vars/main.yml index a32c219f..f85570d5 100644 --- a/roles/util-desk-dev-python/vars/main.yml +++ b/roles/util-desk-dev-python/vars/main.yml @@ -1 +1 @@ -application_id: dev-python +application_id: util-desk-dev-python \ No newline at end of file diff --git a/roles/util-desk-dev-shell/vars/main.yml b/roles/util-desk-dev-shell/vars/main.yml index 940b9e93..a15076ef 100644 --- a/roles/util-desk-dev-shell/vars/main.yml +++ b/roles/util-desk-dev-shell/vars/main.yml @@ -1 +1 @@ -application_id: dev-shell +application_id: util-desk-dev-shell diff --git a/roles/util-desk-game-compose/vars/main.yml b/roles/util-desk-game-compose/vars/main.yml index dfed4cc8..18183e41 100644 --- a/roles/util-desk-game-compose/vars/main.yml +++ b/roles/util-desk-game-compose/vars/main.yml @@ -1 +1 @@ -application_id: game-compose +application_id: util-desk-game-compose diff --git a/roles/util-desk-game-os/vars/main.yml b/roles/util-desk-game-os/vars/main.yml index ad55dd6a..d13cd997 100644 --- a/roles/util-desk-game-os/vars/main.yml +++ b/roles/util-desk-game-os/vars/main.yml @@ -5,4 +5,4 @@ gamer_default_games: - gnuchess - sauerbraten - mari0 -application_id: game-os +application_id: util-desk-game-os diff --git a/roles/util-desk-game-windows/vars/main.yml b/roles/util-desk-game-windows/vars/main.yml index 08245eb1..1bc56e3a 100644 --- a/roles/util-desk-game-windows/vars/main.yml +++ b/roles/util-desk-game-windows/vars/main.yml @@ -1 +1 @@ -application_id: game-windows +application_id: util-desk-game-windows diff --git a/roles/util-desk-office-tools/vars/main.yml b/roles/util-desk-office-tools/vars/main.yml index 722b72fe..bea619a6 100644 --- a/roles/util-desk-office-tools/vars/main.yml +++ b/roles/util-desk-office-tools/vars/main.yml @@ -1 +1 @@ -application_id: office-tools +application_id: util-desk-office-tools diff --git a/roles/util-dev-admin-network/vars/main.yml b/roles/util-dev-admin-network/vars/main.yml index c5aa8efc..65b61611 100644 --- a/roles/util-dev-admin-network/vars/main.yml +++ b/roles/util-dev-admin-network/vars/main.yml @@ -1 +1 @@ -application_id: dev-admin-network +application_id: util-dev-admin-network diff --git a/roles/util-dev-admin/vars/main.yml b/roles/util-dev-admin/vars/main.yml index 65bbd919..f85add79 100644 --- a/roles/util-dev-admin/vars/main.yml +++ b/roles/util-dev-admin/vars/main.yml @@ -1 +1 @@ -application_id: dev-admin +application_id: util-dev-admin diff --git a/roles/util-srv-corporate-identity/vars/main.yml b/roles/util-srv-corporate-identity/vars/main.yml index dab70566..53c6950b 100644 --- a/roles/util-srv-corporate-identity/vars/main.yml +++ b/roles/util-srv-corporate-identity/vars/main.yml @@ -1 +1 @@ -application_id: corporate-identity +application_id: util-srv-corporate-identity diff --git a/roles/web-app-portfolio/vars/main.yml b/roles/web-app-portfolio/vars/main.yml index ef07b1bb..01b87752 100644 --- a/roles/web-app-portfolio/vars/main.yml +++ b/roles/web-app-portfolio/vars/main.yml @@ -1,4 +1,4 @@ -application_id: "portfolio" +application_id: "web-app-portfolio" docker_repository_address: "https://github.com/kevinveenbirkenbach/portfolio" config_inventory_path: "{{ inventory_dir }}/files/{{ inventory_hostname }}/docker/portfolio/config.yaml.j2" docker_repository: true \ No newline at end of file diff --git a/roles/web-svc-asset/vars/main.yml b/roles/web-svc-asset/vars/main.yml index c94bccf7..25904c74 100644 --- a/roles/web-svc-asset/vars/main.yml +++ b/roles/web-svc-asset/vars/main.yml @@ -1,3 +1,3 @@ -application_id: "asset" # Application identifier +application_id: "web-svc-asset" # Application identifier source_directory: "{{ applications[application_id].source_directory }}/" # Source directory from which the files are coming from target_directory: "{{ nginx.directories.data.files }}assets" # Directory to which the files will be copied diff --git a/roles/web-svc-file/config/main.yml b/roles/web-svc-file/config/main.yml index 3be8d0e3..ea685d79 100644 --- a/roles/web-svc-file/config/main.yml +++ b/roles/web-svc-file/config/main.yml @@ -4,4 +4,6 @@ features: portfolio_iframe: true domains: canonical: + - "file.{{ primary_domain }}" + alias: - "files.{{ primary_domain }}" diff --git a/roles/web-svc-file/vars/main.yml b/roles/web-svc-file/vars/main.yml index de6538c1..5ef12d6c 100644 --- a/roles/web-svc-file/vars/main.yml +++ b/roles/web-svc-file/vars/main.yml @@ -1,2 +1,2 @@ -application_id: "file" +application_id: "web-svc-file" domain: "{{ domains | get_domain(application_id) }}" diff --git a/roles/web-svc-html/vars/main.yml b/roles/web-svc-html/vars/main.yml index d008760a..31724162 100644 --- a/roles/web-svc-html/vars/main.yml +++ b/roles/web-svc-html/vars/main.yml @@ -1,4 +1,2 @@ -application_id: "html" -domain: "{{domains | get_domain(application_id)}}" -features: - portfolio_iframe: true # Necessary for imprint loading \ No newline at end of file +application_id: "web-svc-html" +domain: "{{domains | get_domain(application_id)}}" \ No newline at end of file diff --git a/roles/web-svc-legal/vars/main.yml b/roles/web-svc-legal/vars/main.yml index 6993e56a..e0ab57a2 100644 --- a/roles/web-svc-legal/vars/main.yml +++ b/roles/web-svc-legal/vars/main.yml @@ -1 +1 @@ -application_id: "legal" \ No newline at end of file +application_id: "web-svc-legal" \ No newline at end of file diff --git a/tasks/stages/01_constructor.yml b/tasks/stages/01_constructor.yml index e481d56d..51fd0840 100644 --- a/tasks/stages/01_constructor.yml +++ b/tasks/stages/01_constructor.yml @@ -48,7 +48,7 @@ # The following mapping is necessary to define the exceptions for domains which are created, but which aren't used redirect_domain_mappings: "{{ [] | - add_redirect_if_group('asset', domains | get_domain('asset'), domains | get_domain('file'), group_names) | + add_redirect_if_group('web-svc-asset', domains | get_domain('web-svc-asset'), domains | get_domain('web-svc-file'), group_names) | merge_mapping(redirect_domain_mappings| default([]), 'source') }}" diff --git a/tests/integration/test_dependency_application_id.py b/tests/integration/test_dependency_application_id.py new file mode 100644 index 00000000..666c965a --- /dev/null +++ b/tests/integration/test_dependency_application_id.py @@ -0,0 +1,79 @@ +import os +import unittest +import yaml +import glob + +class TestDependencyApplicationId(unittest.TestCase): + def test_application_id_matches_folder_for_dependent_roles(self): + """ + For any role A that depends on role B (listed under A/meta/main.yml → dependencies), + if both A and B have vars/main.yml with application_id defined, + then application_id must equal the role's folder name for both. + """ + base_dir = os.path.dirname(__file__) + roles_dir = os.path.abspath(os.path.join(base_dir, '..', '..', 'roles')) + + violations = [] + + # Helper to load application_id if present + def load_app_id(role_path): + vars_file = os.path.join(role_path, 'vars', 'main.yml') + if not os.path.isfile(vars_file): + return None + data = yaml.safe_load(open(vars_file, encoding='utf-8')) or {} + return data.get('application_id') + + # Iterate all roles + for role_path in glob.glob(os.path.join(roles_dir, '*')): + if not os.path.isdir(role_path): + continue + + role_name = os.path.basename(role_path) + meta_file = os.path.join(role_path, 'meta', 'main.yml') + if not os.path.isfile(meta_file): + continue + + meta = yaml.safe_load(open(meta_file, encoding='utf-8')) or {} + deps = meta.get('dependencies', []) + if not isinstance(deps, list): + continue + + # collect just the role names this role depends on + dep_names = [] + for item in deps: + if isinstance(item, dict) and 'role' in item: + dep_names.append(item['role']) + elif isinstance(item, str): + dep_names.append(item) + + # load application_id for this role once + app_id_role = load_app_id(role_path) + for dep_name in dep_names: + dep_path = os.path.join(roles_dir, dep_name) + if not os.path.isdir(dep_path): + continue + + app_id_dep = load_app_id(dep_path) + # only check if both app_ids are defined + if app_id_role is None or app_id_dep is None: + continue + + # check role A + if app_id_role != role_name: + violations.append( + f"{role_name}: application_id='{app_id_role}' ≠ folder name '{role_name}'" + ) + # check role B + if app_id_dep != dep_name: + violations.append( + f"{dep_name}: application_id='{app_id_dep}' ≠ folder name '{dep_name}'" + ) + + if violations: + self.fail( + "application_id mismatches between role folder names and vars/main.yml:\n" + + "\n".join(violations) + ) + +if __name__ == '__main__': + unittest.main() diff --git a/tests/unit/filter_plugins/test_applications_filter_for_html.py b/tests/unit/filter_plugins/test_applications_filter_for_html.py index 2e29a420..4fe1d080 100644 --- a/tests/unit/filter_plugins/test_applications_filter_for_html.py +++ b/tests/unit/filter_plugins/test_applications_filter_for_html.py @@ -18,25 +18,25 @@ class TestApplicationsIfGroupAndDeps(unittest.TestCase): def setUp(self): self.filter = FilterModule().applications_if_group_and_deps self.sample_apps = { - 'html': {}, - 'legal': {}, - 'file': {}, - 'asset': {}, - 'portfolio': {}, - 'corporate-identity': {}, + 'web-svc-html': {}, + 'web-svc-legal': {}, + 'web-svc-file': {}, + 'web-svc-asset': {}, + 'web-app-portfolio': {}, + 'util-srv-corporate-identity': {}, } def test_direct_group(self): - result = self.filter(self.sample_apps, ['html']) - self.assertIn('html', result) - self.assertNotIn('legal', result) + result = self.filter(self.sample_apps, ['web-svc-html']) + self.assertIn('web-svc-html', result) + self.assertNotIn('web-svc-legal', result) def test_recursive_deps(self): - # html -> depends on none, but corporate-identity pulls in web-svc-legal -> web-svc-html -> legal + # html -> depends on none, but util-srv-corporate-identity pulls in web-svc-legal -> web-svc-html -> legal result = self.filter(self.sample_apps, ['util-srv-corporate-identity']) - self.assertIn('corporate-identity', result) - self.assertIn('legal', result) # via web-svc-legal - self.assertIn('html', result) # via web-svc-legal -> html + self.assertIn('util-srv-corporate-identity', result) + self.assertIn('web-svc-legal', result) # via web-svc-legal + self.assertIn('web-svc-html', result) # via web-svc-legal -> html def test_real_vars_files(self): # load real vars to get application_id