Set-OPS-Public/wiki/Le-GUI-console-d-exploitation.md
Daniel Allaire 8c401f95cf wiki : intègre les 8 vues annotées à « Le GUI (console d'exploitation) »
La série d'illustrations (commit précédent) rejoint sa page. En fin de section
② de l'unité, une galerie « Les vues, annotées » présente les 8 figures — vues
éditables (Serveurs, Applications, Bases × 2, Domaines) puis dérivées (Flux,
Couches, Réseau) — chacune un SVG auto-contenu avec ses repères + légende.

Mécanique, sans duplication dans l'arbre source :
- symlink wiki/img -> ../docs/img : foyer unique dans docs/img/, refs relatives
  (img/*.svg) qui résolvent en local et sur le navigateur de dépôt ;
- make wiki-publier embarque désormais les docs/img/*-annote.svg (déréférencés)
  dans le wiki Forgejo publié — jusqu'ici seules les .md voyageaient, donc aucune
  image n'aurait rendu une fois publiée.

Preuves : 22 OK / 0 échec / 1 sauté (dont P22 « plan de recette à jour »).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 13:57:39 -04:00

132 lines
6.3 KiB
Markdown

# Le GUI (console d'exploitation)
> **Unité d'apprentissage.** Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.
---
## ① Le concept *(générique)*
Un moteur d'infrastructure a besoin d'une **interface humaine** — sinon il n'est utilisable que
par son auteur (ou une IA). Le principe fondateur : **un opérateur doit tout piloter seul**, sans
l'auteur et sans IA (« exploitable sans IA »).
Une bonne console d'exploitation obéit à trois règles :
- **Elle édite la SOURCE, pas l'artefact.** On modifie le *plan* (l'état voulu), jamais l'inventaire
généré. La console montre la vérité, elle ne la contourne pas.
- **Elle prévisualise avant d'agir.** *dry-run* (voir ce qui changerait) avant *apply* (changer).
- **Elle empêche l'invalide.** Le meilleur garde-fou n'est pas un message d'erreur : c'est une
interface où l'erreur est **impossible à saisir**.
---
## ② Comment Set-OPS le fait
`make inventaire-ui` lance une console web **locale** (`127.0.0.1`, protégée par un jeton). Ses vues :
| Vues **éditables** (le plan) | Vues **dérivées** (lecture seule) |
|---|---|
| Serveurs · Applications · Bases · Domaines · **Intrants** | Flux · Couches · **Réseau** (flotte + devis) |
Le flux d'exploitation, de bout en bout :
1. **Éditer** une vue du plan → **Sauvegarder** ;
2. **« Appliquer le plan »** → régénère l'inventaire (VMID/IP/VLAN **dérivés**) ;
3. **Vérifier** (dry-run) sur un hôte → prévisualise sans rien changer ;
4. **Déployer** → applique les rôles (confirmation **renforcée** si l'instance est en **PROD**) ;
5. **Créer la VM** → clone sur Proxmox depuis le plan.
**L'erreur rendue impossible.** Le champ « Hôte » d'une application est un `<select>` qui ne
propose que des **hôtes réels** : impossible de pointer vers un hôte fantôme. La console couvre le
schéma du plan — et la preuve **P19** le vérifie.
**La flotte, dans la vue Réseau.** Voir toutes les instances, **basculer** (« Activer »), **créer**
une instance depuis un modèle, repérer une **collision** d'index. Cf.
[Multi-instance & fédération](Multi-instance-et-fédération).
### Les vues, annotées
Chaque figure porte ses **repères** (pastilles + légende). Les vues **éditables** d'abord (le plan),
puis les vues **dérivées** (lecture seule) :
**Serveurs** *(éditable)* — inventaire actif et état de la flotte ; cartes serveur et tuiles
VMID/IP/VLAN **dérivées** du seed ; formulaire **Identité** = le seul endroit où l'on édite le plan.
![Vue Serveurs, annotée](img/Set-OPS-Serveurs-annote.svg)
**Applications** *(éditable)* — catalogue des applis, éditeur (rôle · hôte · port · FQDN exposé),
relations déclaratives (requiert · liens · bases), dépendances causales.
![Vue Applications, annotée](img/Set-OPS-Applications-annote.svg)
**Bases — serveur** *(éditable)* — les moteurs SGBD et les bases applicatives « nom @ serveur »,
avec les bases hébergées sur chaque serveur.
![Vue Bases (serveur BD), annotée](img/Set-OPS-Bases-annote.svg)
**Bases — fiche** *(éditable)* — portée · consommateur · serveur, **secret Vault** (jamais en clair,
un pointeur seulement) et le **DSN dérivé** (secret masqué).
![Vue Bases (fiche de base), annotée](img/Set-OPS-Bases-2-annote.svg)
**Domaines** *(éditable)* — zones DNS publique vs interne, autorité · edge · DNSSEC, expositions.
![Vue Domaines, annotée](img/Set-OPS-Domaines-annote.svg)
**Flux** *(dérivée)* — la **matrice d'audit** : la source de nftables *et* la justification lisible
de chaque flux (sens ingress/egress, chiffrement).
![Vue Flux, annotée](img/Set-OPS-Flux-annote.svg)
**Couches** *(dérivée)* — l'**ordre de déploiement** en 6 couches, du socle aux agents ; celui que
`make deployer-tout` déroule.
![Vue Couches, annotée](img/Set-OPS-Couches-annote.svg)
**Réseau** *(dérivée)* — la **flotte multi-instances** : adressage dérivé du seed, bascule
d'instance, devis de configuration des switches.
![Vue Réseau, annotée](img/Set-OPS-Reseau-annote.svg)
> Chaque figure est un **SVG auto-contenu** (la capture y est intégrée) : un seul fichier portable
> qui rend tel quel dans le wiki, un `.md` du dépôt, ou un navigateur.
---
## ③ Pourquoi c'est transférable
| Set-OPS | Équivalents ailleurs |
|---|---|
| GUI au-dessus d'Ansible | **AWX** / Ansible Automation Platform, **Semaphore** |
| éditer la source de vérité | l'UI de **NetBox** (IPAM/DCIM), une CMDB |
| dry-run → apply | `terraform plan/apply`, tout panneau IaC |
| l'invalide impossible à saisir | *validation à la source*, formulaires contraints |
Tu as appris **la console d'exploitation, éditer-la-source, dry-run-avant-apply, la validation à la
saisie** — pas « le GUI de Set-OPS ».
---
## ④ À toi de jouer
1. **Lance-la.** `make inventaire-ui`, ouvre l'URL affichée. Repère l'inventaire actif et l'état de
la flotte (en haut), les onglets, « Appliquer le plan », « Sauvegarder ».
2. **Édite → prévisualise.** Vue **Serveurs**, change la mémoire d'un hôte, **Sauvegarder**,
**Appliquer le plan**, puis **Vérifier** (dry-run) : tu vois ce qui *changerait* avant d'agir.
3. **Répare un hôte fantôme (l'erreur impossible).** Si une appli pointe un hôte inexistant, ouvre
la vue **Applications**, sélectionne-la : le `<select>` « Hôte » ne montre **que des hôtes
réels**. Choisis le bon, **Sauvegarder**, **Appliquer**. Tu ne *peux pas* re-saisir le fantôme.
4. **Bascule d'instance.** Vue **Réseau**, bouton **« Activer »** sur une autre instance. Toutes
les vues suivent, sans redémarrer.
5. **Sens le garde-fou.** Essaie de sauvegarder un plan incohérent (ex. une base dont le
consommateur n'existe pas) : la console **refuse** avec une raison. L'invalide ne passe pas.
6. **Casse & répare.** Édite `hosts.yml` à la main, reviens dans la GUI, « Appliquer le plan » : ta
modification est **écrasée** par le plan. La source de vérité, c'est le plan — pas l'inventaire.
---
## Pour aller plus loin *(dépôt)*
- Lancer : `make inventaire-ui` ; le code : `scripts/inventory_gui.py`.
- Ce que le GUI sait écrire (et la preuve) : `scripts/couverture_gui.py` (P19).
- Le flux plan → apply : unité **[Infra as Code & idempotence](Infra-as-Code-et-idempotence)**.
- La flotte : unité **[Multi-instance & fédération](Multi-instance-et-fédération)**.