poste : le second symlink, celui qui separe exploiter d'engendrer
Some checks are pending
verifier / verifier (push) Waiting to run

Le poste ne clonait que le moteur et son plan : il savait configurer des machines
existantes, pas en creer. Placer une VM demande de savoir sur quelle fabric la
poser.

Patient 0 n'a pas d'underlay a lui -- il est TENANT de SITE-Chezlepro. Son poste
porte donc les deux symlinks de D-80, et quatre depots : le moteur, son plan, la
fabric qui le porte, les modeles.

underlay.vault.yml reste hors du genome : le poste lit la CARTE du monde
physique, jamais ses cles. Mesure depuis ops-01 : `make instancier` rend un diff
vide sans aucun secret, `make underlay-plan` refuse faute de voute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-23 12:24:28 -04:00
parent 665b07ba82
commit d94fca490f
3 changed files with 72 additions and 1 deletions

View file

@ -121,6 +121,47 @@ make aide -> « Set-OPS — moteur d ecosystemes numeriques souverains »
L'écosystème lit son propre génome, depuis sa propre forge, avec son propre Ansible.
### Le second symlink : exploiter n'est pas engendrer
Le poste ne clonait que le moteur et son plan. Il savait donc **configurer** des machines
existantes, pas en **créer** : placer une VM demande de savoir sur quel nœud, quel
stockage, quel pont — c'est-à-dire l'underlay.
Patient 0 n'a pas de fabric à lui : il est **tenant de `SITE-Chezlepro`**, au même titre
qu'OPS-Chezlepro. Son poste porte donc désormais les deux symlinks de D-80 :
```
Set-OPS-public/instance -> /opt/setops/OPS-Patient0
Set-OPS-public/underlay.yml -> /opt/setops/SITE-Chezlepro/underlay.yml
```
et quatre dépôts au lieu de deux — le moteur, son plan, la fabric qui le porte, et les
modèles (un descendant ne se crée pas à partir de rien).
`ops-chezlepro` reste volontairement **non cloné** : c'est le plan d'un tenant voisin,
que patient 0 n'a aucune raison de détenir. Il est présent sur sa forge par le poussage
initial du génome — à revoir.
### Où passe exactement la ligne
Mesuré depuis `ops-01`, sous son propre compte :
```
make instancier DIFF VIDE : le plan reproduit exactement l'inventaire actuel
make underlay-plan Aucune voute sous /opt/setops/SITE-Chezlepro
```
Patient 0 régénère sa propre structure, sur sa propre machine, **sans aucun secret**. Et
dès qu'il s'agit de toucher la fabric, il est arrêté faute de voûte — `underlay.vault.yml`
est hors dépôt, donc absent du génome. Le poste lit la **carte** du monde physique, jamais
ses **clés**.
Ce que cette carte expose, en revanche, mérite d'être dit : `underlay.yml` décrit les
quinze équipements du site, le VLAN de gestion `10.17.0.0/24` — celui-là même où la
frontière interdit à patient 0 d'entrer — et les accès OOB/IPMI. Aucun justificatif, mais
toute la topologie. C'est le prix de l'autonomie d'un tenant sur la fabric d'autrui, et il
se paie en connaissance.
### Patient 0
Fonction `ops` (zone Services-infra), machine `ops-01` — adressage dérivé `10.29.19.41`,

View file

@ -55,8 +55,22 @@ serveur_ops_depots:
- { depot: "set-ops-public", dest: "Set-OPS-public", role: "moteur" }
- { depot: "ops-patient0", dest: "OPS-Patient0", role: "instance" }
# L'instance que le poste pilote par défaut (symlink `instance` du moteur).
# --- LES DEUX SYMLINKS (D-80) ------------------------------------------------
#
# `instance` dit QUEL tenant on pilote.
# `underlay.yml` dit SUR QUELLE FABRIC il repose.
#
# Les deux sont independants, et le second manquait. Un poste qui ne connaît que son
# plan sait CONFIGURER des machines existantes ; il ne sait pas en CREER. Placer une VM
# demande de savoir sur quel nœud, quel stockage, quel pont — c'est-à-dire l'underlay.
# Sans lui, le poste est un exploitant, pas un géniteur.
#
# CE QUE LE POSTE N'AURA PAS POUR AUTANT : `underlay.vault.yml`, qui porte les secrets du
# monde physique. Il est hors dépôt (gitignore), donc absent du génome. Le poste lit la
# CARTE de la fabric, pas ses clés.
serveur_ops_instance: "OPS-Patient0"
# Vide = le poste ne pose pas de lien `underlay.yml` (il configure, il n'engendre pas).
serveur_ops_underlay: ""
# --- CLÉ SSH DU POSTE --------------------------------------------------------
#

View file

@ -166,6 +166,22 @@
force: true
when: not ansible_check_mode
# LE SECOND SYMLINK. Sans lui, le poste sait configurer des machines qui existent ; il ne
# sait pas en creer, faute de savoir sur quelle fabric les poser. C'est la difference
# entre exploiter et engendrer.
- name: Désigner la fabric sur laquelle l'écosystème repose
ansible.builtin.file:
src: "{{ serveur_ops_racine }}/{{ serveur_ops_underlay }}/underlay.yml"
dest: >-
{{ serveur_ops_racine }}/{{ (serveur_ops_depots | selectattr('role', 'eq', 'moteur') | first).dest }}/underlay.yml
state: link
owner: "{{ serveur_ops_utilisateur }}"
group: "{{ serveur_ops_utilisateur }}"
force: true
when:
- serveur_ops_underlay | length > 0
- not ansible_check_mode
# --- LA CLÉ DU POSTE ---------------------------------------------------------
#
# Le poste se fabrique sa propre paire, distincte de celle du mainteneur. Deux