Le plancher pose <IP edge> <FQDN exposé> sur chaque nœud, dérivé de expose + domaines.edge (même source que nginx/PowerDNS). DNS-indépendant, aucun risque. Chargement du plan best-effort (stat delegate_to localhost + become false). Prouvé : /etc/hosts d'obs-01 régénéré avec keycloak/grafana → edge (ligne manuelle éliminée), SSO Grafana fonctionne via le plancher (login: testmail). Boucle Phase 3 fermée : expose → vhost + SAN cert + A PowerDNS + alias plancher. Bugs corrigés : serveur_loki (groupe loki manquant) déjà committé ; stat sur cible→contrôle ; become inutile sur le contrôle. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
48 lines
1.8 KiB
YAML
48 lines
1.8 KiB
YAML
---
|
|
# Alias d'exposition (best-effort) : dérivés du plan si celui-ci est disponible.
|
|
- name: Vérifier la présence des registres du plan (sur le nœud de contrôle)
|
|
ansible.builtin.stat:
|
|
path: "{{ item }}"
|
|
register: hosts_statiques_plan
|
|
delegate_to: localhost # les registres du plan vivent sur le nœud de contrôle
|
|
become: false # lire un fichier ne nécessite pas de privilèges
|
|
loop:
|
|
- "{{ setops_plan_dir }}/applications.yml"
|
|
- "{{ setops_plan_dir }}/domaines.yml"
|
|
loop_control:
|
|
label: "{{ item | basename }}"
|
|
when:
|
|
- hosts_statiques_actif | bool
|
|
- hosts_statiques_publier_expositions | bool
|
|
- setops_plan_dir is defined
|
|
|
|
- name: Charger les registres applications et domaines (si présents)
|
|
ansible.builtin.include_vars:
|
|
file: "{{ item }}"
|
|
loop:
|
|
- "{{ setops_plan_dir }}/applications.yml"
|
|
- "{{ setops_plan_dir }}/domaines.yml"
|
|
loop_control:
|
|
label: "{{ item | basename }}"
|
|
when:
|
|
- hosts_statiques_actif | bool
|
|
- hosts_statiques_publier_expositions | bool
|
|
- (hosts_statiques_plan.results | default([]) | selectattr('stat.exists', 'defined') | selectattr('stat.exists') | list | length) == 2
|
|
|
|
- name: Dériver les alias d'exposition (FQDN exposés → edge qui les sert)
|
|
ansible.builtin.set_fact:
|
|
hosts_statiques_expositions: >-
|
|
{{ {'applications': applications | default({})}
|
|
| expositions_des_applications({'domaines_publics': domaines_publics | default({})}) }}
|
|
when:
|
|
- hosts_statiques_actif | bool
|
|
- hosts_statiques_publier_expositions | bool
|
|
|
|
- name: Générer /etc/hosts depuis l'inventaire (plancher de résolution, indépendant du DNS)
|
|
ansible.builtin.template:
|
|
src: hosts.j2
|
|
dest: /etc/hosts
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
when: hosts_statiques_actif | bool
|