Some checks are pending
verifier / verifier (push) Waiting to run
Le plancher /etc/hosts ne savait nommer que ce que l'ecosysteme contient. Or un ecosysteme enfant doit atteindre la forge dont il descend, et ce nom-la resout vers l'adresse publique depuis l'overlay -- pas vers l'adresse du LAN, que la frontiere bloque a juste titre. hosts_statiques_externes accueille ces declarations. Le fichier etant regenere integralement a chaque passage, une entree posee a la main ne tiendrait pas. La poignee TCP disait "ouvert" sur l'adresse bloquee alors qu'aucune donnee ne passait -- seule la livraison compte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 lines
2.1 KiB
Django/Jinja
37 lines
2.1 KiB
Django/Jinja
# /etc/hosts — GÉNÉRÉ par Set-OPS (rôle hosts_statiques) depuis l'inventaire.
|
|
# Plancher de résolution interne, indépendant du serveur DNS. NE PAS éditer à la main.
|
|
127.0.0.1 localhost
|
|
::1 localhost ip6-localhost ip6-loopback
|
|
ff02::1 ip6-allnodes
|
|
ff02::2 ip6-allrouters
|
|
|
|
# --- Écosystème (dérivé du plan ; chaque hôte → son IP réelle) ---
|
|
# LE FQDN EN PREMIER, le nom court en alias. `hostname -f` rend le PREMIER nom trouve
|
|
# pour l'adresse de la machine : avec le nom court en tete, toute la flotte se croyait
|
|
# appelee « mon-01 » et non « mon-01.chezlepro.internal ». Consequence mesuree le
|
|
# 2026-08-12 : `icinga2 api setup` emettait un certificat CN=mon-01/SAN=mon-01, que
|
|
# personne ne pouvait verifier en appelant par le FQDN. Le meme piege attend tout ce qui
|
|
# se nomme par `hostname -f` — Postfix (myhostname), les journaux, les certificats.
|
|
{% set fleet = (groups.get('hotes_actifs', []) + groups.get('hotes_planifies', [])) | unique | sort %}
|
|
{% for h in fleet if hostvars[h].ansible_host is defined %}
|
|
{{ "%-15s" | format(hostvars[h].ansible_host) }} {{ (h ~ '.' ~ hosts_statiques_domaine ~ ' ') if hosts_statiques_domaine else '' }}{{ h }}
|
|
{% endfor %}
|
|
{% if hosts_statiques_publier_expositions | default(false) and hosts_statiques_expositions %}
|
|
|
|
# --- Alias d'exposition (FQDN publics → l'edge qui les sert) ---
|
|
{% for expo in hosts_statiques_expositions %}
|
|
{% set edge_hosts = groups.get(expo.edge, []) %}
|
|
{% if edge_hosts and hostvars[edge_hosts[0]].ansible_host is defined %}
|
|
{{ "%-15s" | format(hostvars[edge_hosts[0]].ansible_host) }} {{ expo.fqdn }}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% if hosts_statiques_externes %}
|
|
|
|
# --- Hôtes EXTERNES à l'écosystème (déclarés au plan) ---
|
|
# Un nom qui existe hors de l'écosystème peut résoudre vers une adresse PUBLIQUE que
|
|
# l'écosystème ne sait pas atteindre depuis l'intérieur. Ces entrées le corrigent.
|
|
{% for ext in hosts_statiques_externes %}
|
|
{{ "%-15s" | format(ext.ip) }} {{ ext.noms | join(' ') }}{{ (' # ' ~ ext.pourquoi) if ext.pourquoi is defined else '' }}
|
|
{% endfor %}
|
|
{% endif %}
|