poste d'exploitation : patient 0 sait lire son propre genome

Fonction `ops` en zone Services-infra, machine ops-01 (10.29.19.41, VMID
129404101). Sans client_backup : le poste ne detient aucun etat propre, tout ce
qu'il porte se recompose depuis la forge.

Ajoute aussi le group_vars serveur_nginx qui manquait -- sans lui, l'edge
publiait la forge derriere un certificat auto-signe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-23 11:58:10 -04:00
parent 8c4a39b8b1
commit b2d087356c
6 changed files with 65 additions and 1 deletions

View file

@ -33,4 +33,19 @@ organisation: Alliance Boréale
# qu'on amorce — une adresse en @genese.internal serait un piege parfait.
amorcage_acces_courriel: sysadmin@chezlepro.ca
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
# LE PLAN SUIT L'INVENTAIRE, PAS LE SYMLINK (2026-08-23).
#
# La valeur precedente etait `{{ playbook_dir }}/../../instance/plan` : le lien
# `instance` du moteur, en dur. Tout role lisant le plan lisait donc celui de
# l'instance POINTEE PAR LE LIEN, et non celle qu'on deploie.
#
# CE QUE CA A DONNE. En deployant patient 0 avec `SETOPS_INSTANCE`, le plancher
# /etc/hosts de `ops-01` a recu les FQDN de CHEZLEPRO -- auth.chezlepro.internal,
# forge.chezlepro.internal... -- pointes sur l'edge de patient 0. Un ecosysteme
# annoncait les noms d'un autre. Neuf roles lisent cette variable ; le plancher est
# simplement celui qui l'a rendu visible.
#
# `inventory_dir` est le dossier de l'inventaire REELLEMENT charge. Le plan qui a
# engendre cet inventaire est son voisin : les deux ne peuvent plus se contredire,
# et l'expression reste juste qu'on passe par le symlink ou par SETOPS_INSTANCE.
setops_plan_dir: "{{ inventory_dir }}/../../plan"

View file

@ -0,0 +1,20 @@
---
# L'EDGE DOIT PORTER LES NOMS QU'IL PUBLIE (2026-08-23).
#
# Sans ce fichier, `client_pki` n'emet le certificat de l'edge qu'avec ses propres noms
# (`infra-edge-01.genese.internal`), et nginx retombe sur le certificat auto-signe de
# Debian pour tout FQDN expose. Le service repond, la page s'affiche apres un
# avertissement — et rien ne signale la panne. C'est ce qui s'est passe ici : la forge de
# patient 0 etait publiee derriere un `ssl-cert-snakeoil.pem`, et `git clone` a ete le
# premier a refuser, a juste titre.
#
# `sans_exposition` est derive du plan (les `expose:` des applications).
client_pki_sans: >-
{{ ([ansible_fqdn | default(ansible_hostname), ansible_hostname, ansible_host]
+ (sans_exposition | default([])))
| select | unique | list }}
serveur_nginx_certificat: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.crt"
serveur_nginx_cle: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.key"
# Un cert renouvele sur disque reste PERIME en memoire tant que nginx n'a pas recharge.
client_pki_reload_services:
- nginx

View file

@ -13,11 +13,13 @@ all:
infra-dns-01: null
infra-edge-01: null
infra-pki-01: null
ops-01: null
client_unbound:
hosts:
forge-01: null
infra-edge-01: null
infra-pki-01: null
ops-01: null
hotes_actifs:
hosts:
forge-01:
@ -74,6 +76,19 @@ all:
proxmox_vlan: 1294
proxmox_vmid: 129402101
setops_supernet: 10.29.0.0/16
ops-01:
ansible_host: 10.29.19.41
ansible_user: ansible
proxmox_cidr: 24
proxmox_coeurs: 2
proxmox_disque_taille: 20G
proxmox_etiquette_vlan: ''
proxmox_memoire: 3072
proxmox_passerelle: 10.29.19.1
proxmox_pont: t29serv
proxmox_vlan: 1294
proxmox_vmid: 129404101
setops_supernet: 10.29.0.0/16
hotes_planifies:
hosts: {}
modeles_vm:
@ -84,18 +99,23 @@ all:
infra-dns-01: null
infra-edge-01: null
infra-pki-01: null
ops-01: null
serveur_durci:
hosts:
forge-01: null
infra-dns-01: null
infra-edge-01: null
infra-pki-01: null
ops-01: null
serveur_forgejo:
hosts:
forge-01: null
serveur_nginx:
hosts:
infra-edge-01: null
serveur_ops:
hosts:
ops-01: null
serveur_powerdns:
hosts:
infra-dns-01: null

View file

@ -4,3 +4,4 @@ applications:
nginx: { groupe: serveur_nginx, hote: infra-edge-01 }
powerdns: { groupe: serveur_powerdns, hote: infra-dns-01 }
forgejo: { groupe: serveur_forgejo, hote: forge-01, port: 3000, expose: [forge.genese.internal] }
ops: { groupe: serveur_ops, hote: ops-01 }

View file

@ -38,3 +38,7 @@ fonctions:
infra-dns: { categorie: 4, service: 1 }
infra-edge: { categorie: 1, service: 1 }
infra-pki: { categorie: 4, service: 2 }
# LE POSTE D'EXPLOITATION. Zone Services-infra : il ne sert personne, mais il est
# l'infrastructure de l'infrastructure — la machine par laquelle l'ecosysteme se
# reconstruit sans dependre du poste de son mainteneur.
ops: { categorie: 4, service: 4 }

View file

@ -14,3 +14,7 @@ serveurs:
# LA MACHINE QUI PORTE LE GENOME. Son disque n'est pas celui du modele : elle
# hebergera les depots de TOUS les ecosystemes de la lignee, pas seulement les siens.
forge-01: { fonction: forge, etat: actif, disque: 80G, integrations: [client_backup] }
# Le poste d'exploitation ne detient AUCUN etat propre : tout ce qu'il porte se
# recompose depuis la forge. Il n'a donc pas de `client_backup` — le sauvegarder
# serait sauvegarder une copie de ce qui est deja sauvegarde ailleurs.
ops-01: { fonction: ops, etat: actif, disque: 20G }