J'ai repete toute la journee qu'un SITE n'est pas un plan. C'etait faux : j'en
reconstruisais un morceau par morceau dans underlay.yml sans le nommer. Ce qui est vrai,
c'est qu'un site ne DERIVE pas — il declare ses adresses parce qu'il EST le terrain — et
ne passe donc pas par `instancier`. Mais ne pas deriver n'est pas ne pas avoir de plan.
SITE-Chezlepro/plan/{10-intrants,serveurs,applications}.yml ; underlay.yml ne garde que
la fabric. Ce qui est MESURE d'un cote, ce qui est VOULU de l'autre. Les groupes viennent
du registre des applications, les gardes ont suivi le plan (4 controles negatifs).
Huit defauts, tous invisibles chez un tenant parce qu'il a toujours tout :
- client_pki codait `infra-pki-01` EN DUR — vrai par coincidence de nomenclature ;
- aucun moyen pour un service non-root de lire la cle (Forgejo tourne en `git`) ;
- le certificat, PUBLIC par nature, restait en 0600 ;
- l'unite Forgejo n'avait pas d'ExecReload : un cert renouvele aurait ete servi perime ;
- le role ne savait pas servir TLS lui-meme (il y avait toujours un edge) ;
- le cert ne couvrait pas le nom de SERVICE, faute d'`expose:` ;
- les registres se chargeaient en tout-ou-rien : sans domaines.yml, plancher vide ;
- le flux declarait 3000 en dur.
Le message accusait presque toujours autre chose : le DNS quand c'etait un nom faux, une
permission de fichier quand c'etait un port privilegie, rien du tout quand le plancher
s'ecrivait vide.
ROOT_URL est gravee dans les URL de clonage : la forge sert desormais sur 443, avec
CAP_NET_BIND_SERVICE, et son URL n'a plus de port.
Verifie depuis le reseau : Verify return code 0, https://forge.genese.internal/ -> 200.
42 preuves vertes, flux coherents (34 roles, 92 flux).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| defaults | ||
| tasks | ||
| templates | ||
| README.md | ||
hosts_statiques
Plancher de résolution : génère /etc/hosts depuis l'inventaire, pour que tout
l'écosystème se résolve par nom même DNS éteint.
Rôle
- Génère
/etc/hosts(templatehosts.j2) à partir des hôtes actifs de l'inventaire : IP, nom court, FQDN interne. - Alias d'exposition (optionnel, actif par défaut) : pose
<IP de l'edge> <FQDN exposé>pour chaque application qui déclare unexposedans le plan — la résolution des services publiés ne dépend donc pas non plus du DNS.
Pourquoi
C'est ce qui rend l'ordre de reconstruction possible : appliqué dans la couche socle
(via playbooks/groupes/serveur_debian.yml), il donne la résolution par nom avant que
serveur_powerdns n'existe. Sans lui, tout service référençant un FQDN interne
(resoudre_base, resoudre_annuaire, certificats step_ca…) échouerait au premier
déploiement d'une instance neuve.
Les trois couches de résolution : ce plancher → PowerDNS autoritatif → Unbound local
(client_resolveur, opt-in). Cf. docs/dns-interne.md.
Variables
| Variable | Défaut | Rôle |
|---|---|---|
hosts_statiques_actif |
true |
Génère (ou non) /etc/hosts |
hosts_statiques_domaine |
{{ domaine_interne }} |
Suffixe des FQDN |
hosts_statiques_publier_expositions |
true |
Ajoute les alias expose → edge |
hosts_statiques_expositions |
[] |
Calculé par le rôle (filtre expositions_des_applications) |
Notes / limites
- Les alias d'exposition sont best-effort : le rôle lit
applications.ymletdomaines.ymlsur le nœud de contrôle (delegate_to: localhost,statd'abord). Plan absent (ex. préparation du golden template) → alias simplement omis, pas d'échec. - Le fichier est entièrement géré par Ansible : toute ligne ajoutée à la main sur un nœud est écrasée au prochain passage. C'est voulu (source unique = le plan).
- Postfix tourne en chroot :
serveur_postfixrecopie ce/etc/hostsdans/var/spool/postfix/etc/pour que le MTA bénéficie du même plancher.
Prérequis
domaine_internedéfini ;setops_plan_dirpour les alias d'exposition.- Filtre
expositions_des_applications(filter_plugins/).