2026-06-24 20:17:46 -04:00
# CHANGELOG — Set-OPS
2026-06-30 10:07:17 -04:00
## 2026-06-30
2026-06-30 15:59:37 -04:00
### Ajouté
2026-06-30 16:08:25 -04:00
- **Inventaire d'instance neutre et configurable (`principal` / `SETOPS_INVENTAIRE` ).**
Le moteur (Makefile + `inventory_gui` , `instancier` , `config_proxmox` , `serveurs` ,
`applications` ) ne code plus en dur `inventories/lab` / `inventories/production` :
il vise **un inventaire par instance** , détecté de façon **rétro-compatible**
(`principal` > `production` > `lab` ) et surchargeable par `SETOPS_INVENTAIRE` . Les
instances existantes (découpage lab/production) continuent de fonctionner à
l'identique ; les nouvelles peuvent adopter `inventories/principal/` . Deuxième pierre
de la séparation **par instance** (la 1re étant le drapeau `setops_production` ).
2026-06-30 16:20:18 -04:00
- **Garde-fou de prudence par instance (`setops_production`).** Le déploiement réel
est désormais possible sur **toute instance** (un bac à sable déploie sur *son*
infra lab — il est isolé **et** fonctionnel). Le drapeau `setops_production` dans
`group_vars/all/` ne **bloque** plus rien : il marque la PRODUCTION pour exiger une
**confirmation renforcée** au déploiement (bannière/badge rouge « PROD », bouton
Déployer en rouge, re-saisie du nom d'hôte) ; un bac à sable (`false`) affiche
« bac à sable » et déploie sans cette étape. Rétro-compatible (à défaut de drapeau,
ancien repère « inventaire production »). Le GUI affiche toujours quel type
d'instance est monté.
2026-06-30 15:59:37 -04:00
2026-06-30 15:42:12 -04:00
### Modifié
- **Voûte de secrets unique par environnement.** Fini les voûtes éparpillées : tous
les secrets de l'instance (token Proxmox + 17 `vault_*` pour PKI, LDAP/SSO, bases,
forge, observabilité) vivent dans **un seul fichier chiffré** ,
`inventories/<env>/group_vars/all/vault.yml` . Gabarit committé
`exemples/vault.exemple.yml` . `make config` (`config_proxmox.py`) écrit/édite
désormais cette voûte (semée depuis le gabarit si absente). `.gitignore` durci
(`**/vault.yml`). Docs mises à jour (config-proxmox.md avec étapes de migration,
intrants-communs.md §H, QUICKSTART). Le GUI ne stocke toujours aucun secret.
2026-06-30 15:36:08 -04:00
### Corrigé
- **`chezlepro_timezone` n'était appliqué nulle part.** Cet intrant de base global
était défini mais aucun rôle ne s'en servait. Le rôle `chrony` (appliqué à tout
hôte via `serveur_debian` ) règle désormais le fuseau horaire à partir de
`chezlepro_timezone` (`chrony_timezone` par défaut, vide = ne pas toucher). Les
autres défauts globaux (nœud / stockage / pont Proxmox) étaient déjà réutilisés
comme valeurs par défaut, surchargeables par hôte.
GUI : atelier maître-détail unifié + fusion Serveur/Hôte
Toutes les vues adoptent le même motif que l'Inventaire : tuiles à
gauche, détail + saisie à droite, panneau droit contextuel (fin du
panneau figé au changement de vue). Applications et Bases passent en
maître-détail ; liens cliquables entre objets.
Les vues Inventaire (hôtes) et Serveurs (plan) faisaient doublon : elles
sont fusionnées en une vue Serveurs unique — tuile avec statut de
réconciliation, détail réunissant identité éditable, dérivés, groupes,
applications/bases hébergées et Vérifier/Déployer. Navigation clavier et
filtre rebranchés sur les serveurs ; bandeau « Comment lire ce parc ».
Code mort retiré (carte, renduChaine, ONGLETS, champLecture, sélection
d'hôte, chips de filtre).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 15:22:11 -04:00
### Modifié
2026-06-30 15:36:08 -04:00
- **Nettoyage CSS/HTML du GUI** après la refonte : retrait des règles et éléments
morts (`.message`, `.chips-filtre` /`.chip-f`, `.onglet*` , `.base-ligne` ,
`.bases-liste` , `.ch-grp*` /`.ch-fleche`/`.ch-roles`, `.champ-val` , divs `#message`
et `#chips` ).
GUI : atelier maître-détail unifié + fusion Serveur/Hôte
Toutes les vues adoptent le même motif que l'Inventaire : tuiles à
gauche, détail + saisie à droite, panneau droit contextuel (fin du
panneau figé au changement de vue). Applications et Bases passent en
maître-détail ; liens cliquables entre objets.
Les vues Inventaire (hôtes) et Serveurs (plan) faisaient doublon : elles
sont fusionnées en une vue Serveurs unique — tuile avec statut de
réconciliation, détail réunissant identité éditable, dérivés, groupes,
applications/bases hébergées et Vérifier/Déployer. Navigation clavier et
filtre rebranchés sur les serveurs ; bandeau « Comment lire ce parc ».
Code mort retiré (carte, renduChaine, ONGLETS, champLecture, sélection
d'hôte, chips de filtre).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 15:22:11 -04:00
- **GUI refondu en atelier maître-détail unifié.** Toutes les vues suivent le même
motif : tuiles à gauche, **détail + saisie à droite** , le panneau droit reflétant
la sélection de la vue courante (fin du panneau « figé » au changement de vue).
Les vues **Applications** et **Bases** passent de tableaux pleine largeur à ce
motif ; la saisie se fait dans le panneau droit, avec **liens cliquables** entre
objets (serveur → application → base). Le panneau droit est élargi (~38 %).
- **Fusion Serveur/Hôte.** Les vues « Inventaire » (hôtes, lecture seule) et
« Serveurs » (plan) faisaient doublon : elles sont fusionnées en **une seule vue
Serveurs**. Sa tuile porte le statut de réconciliation (réconcilié / divergent /
non instancié) ; son détail réunit l'**identité éditable** (plan), les **dérivés**
(VMID/IP/VLAN), les **groupes** , les **applications et bases hébergées** , et
**Vérifier/Déployer** . La navigation clavier (`1-3`, `j/k` , `v/d` , `/` ) et le
filtre opèrent désormais sur les serveurs. Un bandeau « Comment lire ce parc »
explicite le modèle serveur·hôte·groupe·application·base. Code mort retiré
(`carte`, `renduChaine` , `ONGLETS` , `champLecture` , sélection d'hôte, etc.).
2026-06-30 10:07:17 -04:00
### Ajouté
2026-06-30 12:19:26 -04:00
- **Fluidité d'exploitation du GUI** (sans dépendance, stdlib pure) :
- **Notifications empilées (toasts)** auto-effaçables au lieu d'une bannière unique
écrasée ; les erreurs restent plus longtemps, les opérations longues mettent à
jour leur propre toast.
- **Durée d'exécution** affichée en direct dans la console (Vérifier / Déployer) et
suivi vivant de « Appliquer le plan ».
- **Navigation clavier** : `1-5` changent de vue, `j/k` parcourent les hôtes,
`v` /`d` vérifient/déploient l'hôte sélectionné, `/` cible le filtre, `Ctrl+S`
sauvegarde la vue éditable courante (ignorés pendant la saisie).
- **Validation inline** des champs du plan (vue Serveurs) : nom `fonction-NN` ,
mémoire, cœurs, disque — liseré rouge et blocage avant l'envoi.
- **Garde-fou anti-perte** : confirmation `beforeunload` si des éditions de plan ne
sont pas sauvegardées.
- Le bouton **Sauvegarder** de l'en-tête devient contextuel (sauve la vue éditable,
désactivé en lecture seule) — fin de l'impasse 409 ; suppression du code mort.
2026-06-30 12:36:51 -04:00
### Ajouté
- **Vue Serveurs : champs alimentés par les paramètres globaux.** À `+ Serveur` ,
**Nœud** et **Stockage** deviennent des listes déroulantes (catalogues
`proxmox_noeuds` / `proxmox_stockages` , vide = défaut global) et **Intégrations**
une rangée de cases à cocher des rôles `client_*` disponibles (au lieu d'une saisie
texte). Les catalogues Nœuds / Stockages / Ponts sont de nouveaux intrants
(classe « Catalogue ») éditables dans le panneau « Intrants de base » et stockés
dans `group_vars/proxmox.yml` ; l'API expose `integrations_disponibles` (scan de
`roles/client_*` ). Le type `liste` (chaîne virgulée → liste YAML dédoublonnée) est
ajouté au schéma des intrants.
2026-06-30 13:28:04 -04:00
### Supprimé
- **Vue « Chaîne » du bandeau (redondante).** Son contenu (`renduChaine`) était déjà
rendu, par hôte, dans l'onglet « Chaîne » du détail de la vue Inventaire ; la vue ne
faisait que le répéter pour tous les hôtes à la fois, sans réseau/proxmox ni boutons
d'opération. Retirée (bouton, rendu `dessinerArbre` , CSS `.arbre-*` ) ; la chaîne
reste consultable hôte par hôte. Raccourcis clavier ramenés à 1-4.
2026-06-30 12:19:26 -04:00
### Modifié
- **Vue Inventaire (cartes) : détail converti en inspection lecture seule.** La vue
affichait « généré depuis le plan (lecture seule) » tout en exposant une surface
d'édition (+ Hôte, ✕, bascule actif/planifié, ✨ Proposer, champs et cases de
groupes éditables) qui ne pouvait pas être persistée (l'inventaire est généré ;
`/api/inventaire` renvoie 409). Ces contrôles orphelins sont retirés : nom, champs
Réseau/Proxmox et groupes en lecture seule, état affiché en badge. **Vérifier /
Déployer** et les onglets d'inspection sont conservés. L'édition reste dans les vues
**Serveurs / Applications / Bases** . Code mort supprimé (`ajouterHote`,
`supprimerHote` , `definir` , `definirNom` , `definirEtat` , `basculerGroupe` ,
`proposer` , `autoProposer` , `prochainSeqLibre` , `marquerModifie` , état `modifie` ).
- **Référence des paramètres de `make config` ** (`docs/config-proxmox.md`).
Explique un par un les 16 paramètres Proxmox non sensibles + les secrets API
demandés par l'assistant : sens, valeur par défaut, quoi saisir, et quels champs
sont des constantes vs des défauts surchargeables par hôte. Renvois ajoutés depuis
`make help` et `QUICKSTART.md` . Comble un trou : ces invites n'étaient expliquées
nulle part de façon pérenne (impératif « exploitable sans IA »).
2026-06-30 10:07:17 -04:00
- **Panneau « Intrants de base » dans le GUI.** Un bouton ⚙ Intrants ouvre une fenêtre
unique pour saisir les valeurs communes à tout l'écosystème, avec une distinction
visible entre **constantes** (valeur unique, non surchargeable) et **défauts**
(valeurs proposées, surchargeables dans les instances). Les secrets ne sont **jamais**
saisis ni affichés ici (garde-fou `INTRANTS_CLES_INTERDITES` + filtrage par schéma) :
ils restent dans le Vault Ansible, édités en CLI ; le panneau les liste seulement à
titre informatif. Un changement de `domaine_interne` (clé de voûte) demande une
confirmation explicite ; un `domaine_interne` vide est refusé côté serveur. La
nomenclature reste en lecture seule (modifiable dans le plan). Voir
`docs/intrants-communs.md` et `docs/intrants-base-gui-conception.md` .
- **Source unique d'identité partagée.** `domaine_interne` et `chezlepro_timezone`
vivent désormais dans `inventories/partage/intrants-identite.yml` , référencé par
symlink depuis chaque environnement (`group_vars/all/10-intrants.yml`) — fin de la
duplication lab/production.
- **Info-bulles d'aide sur les champs du GUI.** Survoler la description d'un champ à
saisir affiche une bulle avec des instructions sommaires.
## 2026-06-28
### Ajouté
- **Document de présentation de l'écosystème Chezlepro** (`docs/ecosysteme-chezlepro.md`).
Description vulgarisée à destination client/partenaire : les piliers de l'écosystème
souverain, le modèle reproductible (plan → génération → clonage → conformité), et un
inventaire des **mesures de renforcement** réellement en place (SSH durci, fail2ban,
sysctl, nftables, AppArmor, auditd, mises à jour automatiques, gestion des secrets,
garde-fous destructifs, sécurité par l'architecture). Honnête sur le statut
« défini/validé vs déployé ».
### Ajouté
- **Dimensionnement dérivé des ressources VM.** Les cœurs/RAM/disque d'une VM sont
désormais **estimés depuis les logiciels hébergés + le socle SE** , au lieu d'hériter
des specs du golden template (CPU/RAM identiques pour toutes les VM auparavant).
Chaque rôle déclare son empreinte (`roles/< rôle > /meta/empreinte.yml`) ; le
générateur somme par hôte (marge + arrondis) et écrit `proxmox_coeurs` /
`proxmox_memoire` /`proxmox_disque_taille` ; le clonage passe `cores` /`memory` à
Proxmox (`omit` si absent → aucune régression). Override par hôte possible dans le
plan (`serveurs.yml`). Voir `docs/dimensionnement-ressources.md` .
2026-06-25 09:29:08 -04:00
### Corrigé
- **`make instancier-appliquer FORCE=1` n'honorait pas `--force` .** La recette Makefile lançait `instancier.py appliquer` sans relayer `FORCE` ; le message « Utilise FORCE=1 » était donc trompeur (un changement de plan intentionnel restait bloqué). La recette passe désormais `$(if $(FORCE),--force)` . Trouvé en dogfooding.
2026-06-24 20:17:46 -04:00
## 2026-06-24 — Première publication publique
Première mise à disposition publique de **Set-OPS** , moteur Ansible d'écosystèmes
numériques souverains sur Proxmox — offert à la communauté québécoise par
l'**Alliance Boréale**, à la Saint-Jean-Baptiste 2026.
- **Moteur générique, piloté par un plan déclaratif** : on édite le plan
(`instance/plan/*.yml`), l'inventaire Ansible se génère, les VM se clonent depuis
un golden template Debian 13, les rôles s'appliquent par groupes. Tout passe par
`make` , le GUI local et la documentation.
- **Piliers d'un écosystème souverain** : socle Debian durci, AC/PKI interne, DNS
interne, identité (LDAP + SSO), relais courriel, bases de données, observabilité,
forge.
- **Catalogue de modèles prêts à déployer** (`exemples/modeles/`) : un hébergeur
copie un modèle, le renseigne à ses couleurs, et instancie.
- **Souveraineté jusqu'au bout** : Set-OPS s'exploite entièrement à la main, sans
aucune IA.
Pour démarrer : ** `QUICKSTART.md` **.