--- # Role utilitaire (pas un groupe deployable) : resout l'URL PUBLIQUE du fournisseur # d'identite depuis l'exposition que le plan declare. # # Sorties (facts) : # resoudre_idp_hote — auth. (le FQDN publie, pas un nom fabrique) # resoudre_idp_base — https:///realms/ # resoudre_idp_discovery — .../.well-known/openid-configuration # # POURQUOI CE ROLE. Quatre roles fabriquaient `https://keycloak.` par # convention de nommage — un nom que RIEN ne publie : le plan expose Keycloak sous # `auth.`, et c'est ce nom que le DNS resout, que nginx sert et que # Keycloak annonce dans son issuer. Un client OIDC qui interroge l'autre nom # echoue, ou recoit un issuer qui ne correspond pas au sien. # # Corrige une premiere fois dans `serveur_oauth2_proxy` le 2026-08-07, puis # retrouve a l'identique dans forgejo, grafana et nextcloud. Une quatrieme copie # aurait diverge comme les trois premieres : d'ou ce role. - name: Charger les registres applications et domaines (expositions) ansible.builtin.include_vars: file: "{{ item }}" loop: - "{{ setops_plan_dir }}/applications.yml" - "{{ setops_plan_dir }}/domaines.yml" - name: Exiger que l'IdP declare une exposition ansible.builtin.assert: that: - ((applications | default({})).get(resoudre_idp_app, {}).get('expose', []) | length) > 0 fail_msg: >- L'application `{{ resoudre_idp_app }}` n'expose aucun FQDN dans instance/plan/applications.yml. Un client OIDC ne peut pas joindre un fournisseur qui n'est publie nulle part. - name: Deriver l'URL publique du fournisseur d'identite ansible.builtin.set_fact: resoudre_idp_hote: >- {{ (applications[resoudre_idp_app].expose | first) }} resoudre_idp_base: >- https://{{ (applications[resoudre_idp_app].expose | first) }}/realms/{{ resoudre_idp_realm }} resoudre_idp_discovery: >- https://{{ (applications[resoudre_idp_app].expose | first) }}/realms/{{ resoudre_idp_realm }}/.well-known/openid-configuration