Some checks are pending
verifier / verifier (push) Waiting to run
Un ecosysteme pouvait DETENIR son genome sans savoir l'executer. Le poste d'exploitation porte Ansible epingle, le genome clone depuis SA PROPRE forge, et une cle SSH qui n'appartient qu'a lui. Il n'emporte ni la voute ni son mot de passe : la structure se reconstruit depuis la forge, les secrets depuis la sauvegarde. Deux sources qu'un meme incident n'atteint pas ensemble. Une machine neuve traverse tout le moteur sans rien heriter, et revele ce qu'un etat anterieur masquait. Deux defauts silencieux en sont sortis. setops_plan_dir pointait le lien `instance` en dur : neuf roles lisaient donc le plan d'une AUTRE instance. Le plancher de patient 0 portait les FQDN de Chezlepro, et son edge publiait server_name forge.chezlepro.internal. La variable suit desormais l'inventaire reellement charge. Trois instances sur quatre declaraient les SAN d'exposition de leur edge ; la quatrieme et le modele public ne les avaient pas. La forge de patient 0 etait donc publiee derriere le certificat auto-signe de Debian, sans que rien ne le signale -- `git clone` fut le premier a refuser, a juste titre. P42 le reclame maintenant pour tout ecosysteme qui declare un edge. Le harnais a ecrit la moitie de ce role : 5 echecs sur la piece neuve, aucun n'empechait le code de tourner, tous la rendaient invisible a la carte, au graphe et au lecteur. 42 preuves, 0 echec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
2.5 KiB
Django/Jinja
58 lines
2.5 KiB
Django/Jinja
# Poste d'exploitation de {{ organisation | default('cet écosystème') }}
|
|
|
|
> Fichier **généré** par le rôle `serveur_ops`. Ne pas éditer à la main.
|
|
|
|
Cette machine sait reconstruire l'écosystème. Elle porte le moteur Set-OPS, le plan, et
|
|
un Ansible épinglé sur la même famille que celle qui a servi à le construire.
|
|
|
|
## Ce qu'elle contient
|
|
|
|
```text
|
|
{{ serveur_ops_racine }}/
|
|
{% for d in serveur_ops_depots %}
|
|
{{ "%-22s" | format(d.dest) }} {{ d.role }} — cloné depuis {{ serveur_ops_forge_url }}/{{ serveur_ops_forge_organisation }}/{{ d.depot }}.git
|
|
{% endfor %}
|
|
venv/ Ansible {{ serveur_ops_ansible }}
|
|
.ssh/id_{{ serveur_ops_cle_type }} la clé propre au poste
|
|
```
|
|
|
|
Le génome vient de **la forge de cet écosystème**, pas de son parent. Ces dépôts y sont
|
|
des miroirs, resynchronisés automatiquement : le poste lit donc une copie vivante.
|
|
|
|
## S'en servir
|
|
|
|
```bash
|
|
sudo -iu {{ serveur_ops_utilisateur }}
|
|
cd {{ serveur_ops_racine }}/{{ (serveur_ops_depots | selectattr('role', 'eq', 'moteur') | first).dest }}
|
|
export PATH={{ serveur_ops_venv }}/bin:$PATH
|
|
export ANSIBLE_COLLECTIONS_PATH={{ serveur_ops_racine }}/.ansible/collections
|
|
make aide
|
|
```
|
|
|
|
L'instance pilotée est désignée par le lien `instance` → actuellement
|
|
`{{ serveur_ops_instance }}`. On la bascule comme sur n'importe quel poste Set-OPS.
|
|
|
|
## Les deux choses qu'il n'a PAS, et pourquoi
|
|
|
|
**Le mot de passe de la voûte.** Il se saisit à l'exécution. Une machine qui détiendrait
|
|
à la fois le plan, l'accès SSH à toute la flotte et la clé des secrets n'aurait plus
|
|
aucune profondeur : la compromettre, ce serait compromettre l'écosystème entier. Le mot
|
|
de passe reste dans une tête, ou dans un coffre hors de cette machine.
|
|
|
|
**Le fichier de voûte lui-même.** Les dépôts d'instance excluent `vault.yml` de git —
|
|
c'est la règle « aucun secret en clair ». Le génome cloné ici porte donc le plan **sans
|
|
les secrets**. Pour un déploiement réel, la voûte se restaure depuis la sauvegarde
|
|
(`restic`), pas depuis la forge.
|
|
|
|
Autrement dit : ce poste reproduit la **structure** de l'écosystème de mémoire, et ses
|
|
**secrets** depuis la sauvegarde. Deux sources distinctes, et c'est voulu.
|
|
|
|
## Sa clé doit être autorisée
|
|
|
|
Le poste s'est fabriqué sa propre paire SSH, distincte de celle du mainteneur — deux
|
|
exploitants, deux révocations possibles. Tant que sa clé publique n'est pas dans les
|
|
intrants SSH du plan, il ne joint aucun hôte. La clé publique :
|
|
|
|
```bash
|
|
cat {{ serveur_ops_racine }}/.ssh/id_{{ serveur_ops_cle_type }}.pub
|
|
```
|