Set-OPS-Public/roles/resoudre_idp/tasks/main.yml

43 lines
2 KiB
YAML
Raw Normal View History

---
# 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.<domaine> (le FQDN publie, pas un nom fabrique)
# resoudre_idp_base — https://<hote>/realms/<realm>
# resoudre_idp_discovery — .../.well-known/openid-configuration
#
# POURQUOI CE ROLE. Quatre roles fabriquaient `https://keycloak.<domaine>` par
# convention de nommage — un nom que RIEN ne publie : le plan expose Keycloak sous
# `auth.<domaine>`, 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