No description
Find a file
Daniel Allaire ed84494c40 GUI : le panneau d'intrants effacait la memoire ecrite du depot
Un enregistrement du panneau « Intrants de base », a 13:48, a emporte 121 lignes
d'explications dans quatre fichiers — dont celle qui disait POURQUOI la valeur qu'on
venait de changer avait ete choisie (le plan de gestion reste en 10.0.0.0/24 tant que la
frontiere ne sait pas classer un second CIDR, D-61). Ces phrases sont la seule trace de
raisonnements qu'aucun code ne redit. `safe_dump` les effacait toutes a chaque
sauvegarde, en retriant les clefs au passage.

LE DEPOT CONNAISSAIT DEJA LE GESTE JUSTE. `_ecrire_intrants_fabric` (underlay.yml) et
`_ecrire_index_nomenclature` remplacent LA LIGNE sans toucher au reste ; leur commentaire
dit meme « un safe_dump les effacerait toutes ». Les quatre fichiers d'intrants n'avaient
jamais recu ce traitement. Ce qui manquait pour l'etendre : savoir remplacer une valeur
de LISTE, qui tient sur plusieurs lignes.

`_fusion_chirurgicale`, trois regles :
- une clef dont la valeur ne change pas n'est PAS reecrite (zero bruit au diff) ;
- les commentaires internes a un bloc remplace sont conserves, jamais juges ;
- une clef absente du fichier est ajoutee a la fin, jamais inseree au hasard.

La deuxieme est assumee : une explication devenue fausse survit a la valeur qu'elle
explique. Corriger une phrase est un geste humain ; l'effacer parce qu'un champ a bouge,
non. Meme principe que la fusion des clefs posee le 2026-08-10.

EPROUVE SUR LE FICHIER REEL, pas sur un exemple : l'enregistrement de 13:48 rejoue sur la
version d'avant (tiree de git) rend 41 lignes -> 41, 30 commentaires -> 30, 0 perdu, et un
diff d'UNE ligne. Neuf tests dans scripts/tests/test_gui_intrants.py, branches sur
`make test`.

DEUX FOIS LE MEME GESTE DESTRUCTEUR, SUR LE MEME CHEMIN : le 10 aout ce panneau perdait
des CLEFS (dns_amorcage, amorcage_acces_courriel — une VM qui nait sans resolution), le
18 des COMMENTAIRES. La premiere fois avait valu une fusion, pas un test. C'est le test
qui manquait.

Non touche, et dit comme tel : les registres (bases, applications, serveurs, domaines)
passent toujours par safe_dump. Ils sont structures et n'ont pas perdu de commentaires au
meme enregistrement — a reprendre si l'un d'eux en porte un jour.

make test 9/9 sur le nouveau fichier ; prouver 37 OK, 0 echec, 0 saute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 15:05:12 -04:00
docs P03 : la preuve comparait chaque instance a l'inventaire d'UNE SEULE 2026-08-18 14:35:01 -04:00
exemples routage : plus aucun commutateur ne route, la frontière est le seul L3 (D-49 à D-51) 2026-08-04 14:23:57 -04:00
filter_plugins Set-OPS — moteur d'ecosystemes numeriques souverains (Alliance Boreale) 2026-06-24 20:17:46 -04:00
playbooks recette : la donnee REVIENT — restauration eprouvee, pas seulement sauvegarde 2026-08-12 09:50:51 -04:00
promo Aurore : opacites reduites ; etat de forge-01 elucide 2026-07-22 11:57:50 -04:00
roles reconstruction d'un trait : 43 groupes, 0 echec, 37 minutes 2026-08-13 08:49:12 -04:00
scripts GUI : le panneau d'intrants effacait la memoire ecrite du depot 2026-08-18 15:05:12 -04:00
wiki adressage : le decalage de +10 est retire, l'index se lit dans l'adresse 2026-08-12 16:16:08 -04:00
.ansible-lint Set-OPS — moteur d'ecosystemes numeriques souverains (Alliance Boreale) 2026-06-24 20:17:46 -04:00
.gitignore Underlay : fabric physique cluster-global (mgmt/iSCSI/Ceph) + preuve P23 2026-07-24 14:56:38 -04:00
AGENTS.md portabilite : Technolibre debout, six devis, et P35 2026-08-10 13:36:44 -04:00
ansible.cfg perf : forks=20 et creation des VM en parallele 2026-08-10 20:40:25 -04:00
CHANGELOG.md GUI : le panneau d'intrants effacait la memoire ecrite du depot 2026-08-18 15:05:12 -04:00
CLAUDE.md Mise en conformité prouvable : registre d'affirmations + make prouver 2026-07-20 19:53:18 -04:00
LICENSE Licence : CC BY-NC-SA 4.0 → AGPLv3 (verbatim) + modèle libre/services 2026-07-02 18:25:02 -04:00
Makefile GUI : le panneau d'intrants effacait la memoire ecrite du depot 2026-08-18 15:05:12 -04:00
QUICKSTART.md Mise en conformité prouvable : registre d'affirmations + make prouver 2026-07-20 19:53:18 -04:00
README.md doc : implanter un tenant sur un site neuf — le runbook de l'intervention 2026-08-13 12:31:20 -04:00
requirements.yml Set-OPS — moteur d'ecosystemes numeriques souverains (Alliance Boreale) 2026-06-24 20:17:46 -04:00
SOLUTION.md Mise en conformité prouvable : registre d'affirmations + make prouver 2026-07-20 19:53:18 -04:00
tl.ini Consolider : retirer la cruft (8 dossiers-catégories + 5 échafaudages morts) 2026-07-03 20:35:47 -04:00
underlay.yml.example underlay : le MTU du modèle était faux, et la garde le validait 2026-08-03 10:28:16 -04:00

Set-OPS — moteur d'écosystèmes numériques souverains

Set-OPS est un moteur Ansible générique qui permet à un hébergeur de construire et exploiter un écosystème numérique souverain — DNS interne, AC/PKI, identité (LDAP + SSO), relais courriel, bases de données, observabilité, applications — sur sa propre grappe Proxmox, à partir d'un plan déclaratif.

Le dépôt est le moteur (générique, partageable). Chaque déploiement réel est une instance (le plan + l'inventaire d'un hébergeur, dans son propre dépôt). Tu crées la tienne à partir d'un modèle prêt à déployer (exemples/modeles/).

Par où entrer — selon ce que tu viens faire

On n'arrive pas avec un sujet, on arrive avec une situation. Il y en a cinq :

Ta situation Ta porte
« Je veux monter mon écosystème sur ma grappe Proxmox » QUICKSTART.md
« Je prête mon matériel à quelqu'un qui déploiera dessus » docs/preparer-un-site-hebergeur.md
« Je vais implanter un tenant existant sur un site neuf » docs/implanter-un-tenant-sur-un-site.md
« Je viens d'hériter d'un écosystème déjà déployé, je dois l'exploiter » wiki/Reprendre-l-écosystème.md
« Je dois modifier le moteur » docs/carte-set-ops.md
« J'apprends le métier » wiki/Home.md

Et si tu veux d'abord savoir ce que c'est : continue simplement ci-dessous.

Le wiki (wiki/) est publié depuis ce dépôt vers la forge. Une page modifiée dans l'interface de la forge est détruite à la publication suivante : on lit là-bas, on écrit ici.

Souveraineté jusqu'au bout : Set-OPS s'exploite entièrement à la main — la doc, make et le GUI suffisent, sans aucune IA. L'outil libère de la dépendance aux géants ; il ne la remplace pas par une dépendance à une IA.


Mission (la vision derrière l'outil)

Set-OPS ne se limite plus à l'exploitation : il définit et construit un écosystème numérique souverain — une infrastructure interne auto-suffisante, sans dépendance SaaS, décrite en code et pilotée par des registres machine-lisibles qui font office de source unique de vérité (instance/plan/serveurs.yml, instance/plan/applications.yml, instance/plan/bases-donnees.yml, instance/plan/domaines.yml, instance/plan/nomenclature.yml, docs/dependances-groupes.yml).

Piliers de l'écosystème :

  • identité — machines (PKI / certificats) et utilisateurs (annuaire + SSO) ;
  • confiance — autorité de certification interne (ACME) ;
  • nommage et adressage — DNS interne et nomenclature dérivable ;
  • données — bases relationnelles et cache, avec registre des connexions ;
  • communication — relais courriel interne ;
  • observabilité et supervision — métriques, journaux, tableaux de bord, supervision active ;
  • applicatif — services internes (forge, etc.) et couche web.

L'état voulu est déclaratif et convergent (appliqué par les groupes Ansible), souverain par conception, mais piloté par l'opérateur (pas d'auto-remédiation : la boucle n'est pas fermée). Une grande partie est aujourd'hui définie et validée avant d'être déployée sur des VM réelles ; le template Debian 13 reste la fondation, pas la finalité.

Cadre et règles d'autorité : voir AGENTS.md (section « Mission et identité »).

Le plan : on édite, l'inventaire se génère

Set-OPS se pilote par un plan, pas par l'édition directe de l'inventaire. instance/inventories/production/hosts.yml est généré depuis le plan — ne pas l'éditer à la main.

éditer le PLAN  →  make instancier (revoir le diff)  →  make instancier-appliquer  →  make deployer
  • Plan : instance/plan/serveurs.yml (les VM), instance/plan/applications.yml (les services et leurs liens), instance/plan/bases-donnees.yml, instance/plan/domaines.yml, dérivés via instance/plan/nomenclature.yml.
  • GUI (make inventaire-ui) : vues Serveurs et Applications pour éditer, puis « Appliquer le plan » ; la vue Inventaire est en lecture seule.
  • VMID / IP / VLAN sont dérivés de la fonction ; les groupes d'une VM sont dérivés des applications qui y tournent.

Guide complet : docs/plan-et-generation.md.

Portée transverse

Au-delà des piliers ci-dessus, le dépôt couvre des préoccupations transverses, communes à toutes les VM :

  • templates de VM Proxmox (la fondation) ;
  • groupes de conformité et durcissement ;
  • maintenance ;
  • sauvegardes.

Premier chantier

Template Debian 13 Proxmox :

playbooks/modeles_vm/debian13_proxmox_preparer.yml
playbooks/modeles_vm/debian13_proxmox_verifier.yml
playbooks/modeles_vm/debian13_proxmox_nettoyer.yml

Principe

Le template contient seulement le socle commun.

Les services spécialisés seront installés ensuite sur les clones :

  • NGINX ;
  • PostgreSQL ;
  • MariaDB ;
  • Docker/Podman ;
  • monitoring complet ;
  • applications métier.

Exploitation courante

Un Makefile fournit les commandes d'exploitation principales.

Afficher l'aide :

make

Valider le dépôt :

make verifier

Produire une preuve de conformité horodatée (rejoue les preuves du registre des affirmations → docs/audit/preuve-<date>.md ; mode d'emploi : docs/audit/README.md) :

make prouver

Inspecter les inventaires :

make inventaire
make hote-afficher HOTE=web-frontal-01

Ouvrir l'interface locale de gestion d'inventaire :

make inventaire-ui

Planifier une VM passe désormais par le plan, pas par l'édition de l'inventaire :

  1. déclarer la VM dans instance/plan/serveurs.yml (vue Serveurs du GUI, ou make serveurs) — fonction, etat, placement ; VMID/IP/VLAN sont dérivés ;
  2. déclarer les services qui y tournent dans instance/plan/applications.yml (vue Applications) ;
  3. régénérer l'inventaire :
make instancier             # génère + diff sémantique (que va-t-il changer ?)
make instancier-appliquer   # régénère instance/inventories/production/hosts.yml

Les anciennes commandes make hote-planifier / hote-ajouter / hote-groupes éditaient l'inventaire directement ; elles sont supplantées par le plan (l'inventaire est généré, ne pas l'éditer à la main).

Chaque groupe opérationnel doit avoir son playbook homonyme dans playbooks/groupes/.

La conformité normale des VM passe par ces playbooks de groupes. Les rôles de socle et de durcissement sont appliqués par serveur_debian et serveur_durci, pas par des playbooks de couches séparés.

Les groupes opérationnels avec des hôtes, comme serveur_keycloak ou client_pki, sont validés contre playbooks/groupes/ par les commandes d'inventaire.

Le catalogue des services et intégrations prévus est dans docs/catalogue-services.md.

Les dépendances causales entre groupes sont dans docs/dependances-groupes.yml.

Le runbook du DNS interne initial est dans docs/dns-interne.md.

La nomenclature des noms de VM et des VMID est dans docs/nomenclature-vm.md.

Créer un clone depuis le modèle Debian 13 via l'API Proxmox :

make config
make creer-vm HOTE=web-frontal-01    # VMID/IP/VLAN/passerelle lus dans le plan
make deployer HOTE=web-frontal-01

L'hôte doit d'abord être déclaré dans instance/plan/serveurs.yml et l'inventaire régénéré (make instancier-appliquer) : creer-vm ne prend que HOTE, le reste est dérivé.

Les valeurs Cloud-Init communes déjà présentes dans le modèle Proxmox sont héritées par les clones.

Préparer le golden template Debian 13 Proxmox :

make preparer-modele
make verifier-modele

Le nettoyage final du template est protégé :

make nettoyer-modele CONFIRMER=true

Déployer ou remettre en conformité une VM Debian clonée depuis le template :

make deployer HOTE=web-frontal-01

Déployer ou remettre en conformité un groupe :

make deployer-groupe GROUPE=serveur_debian

Les déploiements de groupes ciblent automatiquement les hôtes actifs seulement.

Licence

Copyright (C) 2026 Daniel Allaire — Chezlepro / Alliance Boréale.

Set-OPS est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation, soit la version 3, soit (à votre choix) toute version ultérieure.

Set-OPS est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la GNU Affero General Public License pour plus de détails.

Le texte intégral fait foi dans le fichier LICENSE et sur https://www.gnu.org/licenses/agpl-3.0.html.

Pourquoi l'AGPLv3

Libre et copyleft fort. Chacun peut utiliser, exécuter, étudier et modifier Set-OPS — y compris commercialement. En contrepartie, quiconque l'offre comme service en réseau doit mettre à disposition ses modifications sous la même licence. Cela protège la souveraineté (pas de captation propriétaire) sans jamais interdire l'usage commercial — cohérent avec le principe fondateur : tout est libre.

Modèle : libre + services

Set-OPS est entièrement libre ; aucune fonctionnalité n'est réservée ni verrouillée. Les revenus, le cas échéant, proviennent de services autour du logiciel, jamais de sa fermeture :

  • support / SLA, hébergement géré, formation, intégration, développement sur mesure ;
  • certification d'écosystèmes (label Souverain / Résilient / Exemplaire).

Les artisans et coopératives peuvent exploiter Set-OPS pour leur propre infrastructure sans redevance : l'usage interne ne déclenche aucune obligation de partage. Le copyleft AGPL ne vise que la captation propriétaire (offrir Set-OPS en service fermé sans en partager les évolutions).