Commit graph

24 commits

Author SHA1 Message Date
a943fa6222 GUI : boutons cohérents (Créer la VM / Déployer), fin de « Pousser » ambigu
Audit des boutons : « Pousser » était surchargé — servait à cloner la VM
(🖥 Pousser = creer-vm) ET à déployer (= make deployer, identique à
« Déployer »). Corrigé :
- 🖥 Pousser -> « 🖥 Créer la VM » (il clone) ;
- tous les Pousser/Déployer -> « Déployer » (une action = un mot) ;
- dry-run obligatoire AUSSI sur le déploiement des pieds (évite un
  déploiement à l'aveugle ; cohérent avec un seul « Déployer ») ;
- titres/messages/console : Poussée -> Déploiement.

Chaque bouton fait désormais ce qu'il dit. GUI déjà entièrement francisée.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:40:02 -04:00
d95b26c243 bindings Phase 1 : résolveur de liens dans instancier (relations déclaratives)
Une application déclare ses liens ([{vers, role}]) dans applications.yml ;
chaque rôle décrit les liens acceptés dans meta/liens.yml. instancier
résout la cible (FQDN interne dérivé de la nomenclature) et injecte les
variables en host_vars du consommateur.

Migration prouvée : les liens mail Postfix→Dovecot (mailstore) et
Postfix→rspamd (milter) passent de group_vars codés en dur à des liens
déclaratifs — make instancier donne DIFF VIDE (mêmes vars générées).

Cf. docs/bindings-conception.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 08:33:30 -04:00
68af9172c3 deployer : socle en premier dans l'ordre des playbooks
Les groupes etaient deployes en ordre alphabetique -> client_pki (c)
passait AVANT serveur_debian (s), donc avant que hosts_statiques ne pose
/etc/hosts. Sur un noeud frais, client_pki ne pouvait pas resoudre l'AC
interne (« no such host ») et echouait au bootstrap.

L'ordre force desormais le socle en tete (serveur_debian, serveur_durci)
puis le reste : socle -> client_* -> services. Trouve en deployant un
noeud identite frais (client_pki avant socle).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 09:32:20 -04:00
1edd205d13 serveur_openldap : TLS via step_ca + organisation en intrant (code prod)
- TLS LDAPS/STARTTLS : pont du cert step_ca (client_pki, root:root 600)
  vers /etc/ldap/tls lisible par openldap ; script + unité path systemd
  qui re-synchronise et recharge slapd au renouvellement ; olcTLS* dans
  cn=config ; SLAPD_SERVICES expose ldaps://. Dégrade proprement sans cert.
- Organisation : intrant chezlepro_organisation (remplace « Exemple Inc »).

Validé statiquement (ansible-lint, syntax) ; déploiement réel à suivre.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 07:27:43 -04:00
937ac700b9 instancier : déchiffrer la voûte pour ansible-inventory (exit 4)
Une voûte chiffrée group_vars/all/vault.yml fait échouer
ansible-inventory --list (comparaison du plan) sans mot de passe →
« Appliquer le plan » cassé dès qu'une voûte existe. instancier utilise
maintenant ~/.config/setops-vault-pass si ANSIBLE_VAULT_PASSWORD_FILE
n'est pas déjà fourni. Validé : plus d'exit 4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 22:17:45 -04:00
4d26c15104 GUI : « Vérifier » demande (optionnellement) le mot de passe vault
Sans lui, le dry-run ne peut pas déchiffrer les secrets → les rôles à
secrets (step_ca, etc.) échouaient au Vérifier même avec des secrets
présents, et une voûte chiffrée aurait bloqué TOUT Vérifier. La modale
autorise un mot de passe vide (hôtes sans secrets = comportement actuel).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 21:18:10 -04:00
213724f566 GUI : réparer « Appliquer le plan » (forçait pas) + rendre l'auto-actif visible
Bug racine : /api/instancier appelait « instancier appliquer » SANS
--force → refus silencieux dès que le plan divergeait de l'inventaire.
Après une édition (disque, état, auto-actif), l'inventaire n'était jamais
régénéré → compteurs figés (« 0 actifs » alors qu'un hôte était actif au
plan). Le clic « Appliquer » = intention explicite → on force.

Aussi :
- après matérialisation (creer/deployer/pousser), le frontend régénère
  l'inventaire (appliquerPlan) au lieu d'un simple rechargement ;
- compteur « vivantes » dans l'en-tête (depuis la sonde).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 17:52:39 -04:00
347e739818 GUI : état réel (sonde de vie) + auto-actif
Le badge planifié/actif = intention du plan, pas existence de la VM.
- Sonde de vie : /api/sondes teste la joignabilité SSH de chaque hôte
  (parallèle, non bloquant) → point ● vivante/injoignable sur les tuiles
  et dans le détail (« Plan : … · Réel : … »).
- Auto-actif : un hôte cloné (creer) ou déployé passe actif dans le plan
  automatiquement (matérialisé = actif).

Répond au constat « serveur planifié alors qu'il est vivant ».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 17:39:44 -04:00
7a98678bd9 GUI : bouton « Pousser » (flux 100 % cliquable)
Chaque objet du détail se matérialise sur son hôte, en streaming console
(vault + confirmation prod) :
- Serveur → 🖥 Pousser clone la VM (make creer-vm), même sur un planifié —
  comble le trou : le GUI ne clonait pas.
- Application → Pousser déploie l'hôte porteur.
- Base → Pousser déploie l'hôte du serveur de BD (crée la base).
Nouveaux modes creer/pousser dans executer_flux + routes /api/creer et
/api/pousser. Flux complet : éditer → Appliquer → Pousser → Vérifier →
Déployer, sans quitter le navigateur.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 15:58:32 -04:00
614cebcc55 GUI : retirer la section « Groupes » du détail (redondante)
Depuis la fusion maître-détail, elle ne répétait que le socle (universel),
les rôles des applications (déjà listées) et les intégrations (déjà
cochées). Le prérequis bloquant — son seul signal unique — est désormais
nommé dans le pied. Code mort retiré (renduGroupe, detailGroupe,
titreGroupe, CSS .groupe*).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:01:39 -04:00
8029083536 Adressage fédéré : index d'instance (préfixe VMID + supernet)
Le VMID n'est plus codé 9CSNN en dur : il prend le préfixe d'un `index`
déclaré en tête de plan/nomenclature.yml. Convention : supernet =
10.(index*10).0.0/16, VMID = index·CSNN. Permet à N écosystèmes de
coexister sans collision (Chezlepro=1, Technolibre=2). Sans index →
9CSNN (rétro-compatible, bacs à sable en 172.19.x). deriveServeur JS
mort retiré. Doc multi-instances.md mise à jour.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 17:36:01 -04:00
e57d2c265a Bascule d'instance (make instance-utiliser) + identité relative à l'inventaire
make instance-utiliser NOM=… repointe le symlink 'instance' (prod ↔ bac à
sable) ; make instance-courante affiche le montage. Le panneau Intrants lit
l'identité dans group_vars/all/10-intrants.yml de l'inventaire monté (réel
ou symlink partagé), donc compatible avec la séparation par instance comme
avec l'ancien partage lab/production.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:31:42 -04:00
0e7cefbb2f setops_production : garde-fou de prudence, plus un blocage de déploiement
Le déploiement réel est permis sur TOUTE instance (un bac à sable déploie
sur son infra lab : isolé ET fonctionnel). Le drapeau ne bloque plus ;
il marque la PROD pour exiger une confirmation renforcée (badge/bouton
rouge, re-saisie du nom d'hôte). executer_flux ne refuse plus selon le
drapeau. Badge « PROD » / « bac à sable » dans l'en-tête.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:20:18 -04:00
e2b924cedc Inventaire d'instance neutre et configurable (principal / SETOPS_INVENTAIRE)
Le moteur ne code plus en dur inventories/lab|production : un inventaire
par instance, détecté de façon rétro-compatible (principal > production >
lab) et surchargeable par SETOPS_INVENTAIRE. Makefile (définitions seules,
pas les 47 usages), inventory_gui, instancier, config_proxmox, serveurs,
applications. Les instances lab/production existantes marchent à
l'identique ; les nouvelles adoptent inventories/principal/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:08:25 -04:00
8b3648e9f9 Garde-fou de déploiement par instance (setops_production)
Le droit de déployer ne dépend plus du nom de l'inventaire mais d'un
drapeau explicite setops_production dans group_vars/all/ de l'instance
(true = prod, false = bac à sable). Le GUI (champ "production" de l'API) et
executer_flux le lisent ; rétro-compatible (à défaut, ancien repère
"inventaire production"). Première pierre de la séparation par instance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 15:59:37 -04:00
c4e73f8712 Consolider les secrets dans une voûte unique par environnement
Fini les voûtes éparpillées : tous les secrets (token Proxmox + vault_*)
vivent dans group_vars/all/vault.yml, un seul fichier chiffré, un seul mot
de passe. Gabarit committé exemples/vault.exemple.yml (17 clés). make config
écrit/édite cette voûte (semée depuis le gabarit si absente). .gitignore
durci (**/vault.yml). Docs : config-proxmox.md (+ migration), intrants-
communs.md §H, QUICKSTART. Le GUI ne stocke aucun secret.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 15:42:12 -04:00
3a3a80e0ac Appliquer chezlepro_timezone (rôle chrony) + nettoyer le CSS mort du GUI
L'intrant de base global chezlepro_timezone était défini mais jamais
appliqué : le rôle chrony règle désormais le fuseau horaire (chrony_timezone,
vide = ne pas toucher). Nettoyage du CSS/HTML devenu mort après la refonte
maître-détail (.message, .chip-f, .onglet*, .base-ligne, .ch-grp*, etc.).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 15:36:08 -04:00
5176d714e9 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
2f9db3f516 GUI : retirer la vue Chaîne redondante
Son contenu (renduChaine) est déjà accessible, 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. Retire le bouton, le rendu dessinerArbre et
le CSS .arbre-* ; raccourcis clavier ramenés à 1-4. La chaîne reste
consultable hôte par hôte.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:28:04 -04:00
738fd2b88c GUI vue Serveurs : Nœud/Stockage en déroulantes, Intégrations en cases à cocher
Les champs libres deviennent des sélections alimentées par les paramètres
globaux : Nœud et Stockage puisent dans de nouveaux catalogues
proxmox_noeuds / proxmox_stockages (vide = défaut global), Intégrations
liste les rôles client_* disponibles (scan roles/client_*). Les catalogues
(Nœuds/Stockages/Ponts) sont des intrants de classe « Catalogue » éditables
dans le panneau Intrants ; ajout du type `liste` (chaîne virgulée → liste
YAML dédoublonnée) et de integrations_disponibles dans l'API.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 12:36:51 -04:00
a21a6b4e02 GUI : fluidité d'exploitation et vue Inventaire en lecture seule
Notifications empilées (toasts) au lieu d'une bannière écrasée, durée
d'exécution en direct sur les opérations longues, navigation clavier
(1-5 / j-k / v / d / Ctrl+S contextuel), validation inline des champs du
plan (vue Serveurs), garde-fou beforeunload, bouton Sauvegarder contextuel
(fin de l'impasse 409).

Convertit le détail de la vue Inventaire (cartes) en inspection lecture
seule : la vue annonçait « généré depuis le plan » tout en exposant une
surface d'édition non persistable. Retire les contrôles orphelins
(+ Hôte, ✕, bascule d'état,  Proposer, champs et groupes éditables) et
le code mort associé ; conserve Vérifier / Déployer et les onglets. CSS
inutilisé nettoyé. L'édition reste dans Serveurs / Applications / Bases.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 12:19:26 -04:00
6c1d26ebf7 GUI : panneau Intrants de base, info-bulles, source d'identité partagée
Nouveau panneau « ⚙ Intrants » pour saisir d'un endroit unique les
valeurs communes à l'écosystème, avec distinction constantes (non
surchargeables) vs défauts (surchargeables dans les instances). Les
secrets ne sont jamais saisis ni affichés (garde INTRANTS_CLES_INTERDITES
+ filtrage par schéma) ; un domaine_interne vide est refusé et son
changement demande confirmation. Ajoute aussi les info-bulles d'aide au
survol des champs. domaine_interne/chezlepro_timezone consolidés en une
source partagée (inventories/partage/intrants-identite.yml).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 10:07:17 -04:00
5d30a3a608 Dimensionner les ressources VM depuis les logiciels hébergés
Les cœurs/RAM/disque d'une VM sont estimés depuis l'empreinte des rôles
hébergés (roles/<rôle>/meta/empreinte.yml) sommée au socle SE, au lieu
d'hériter des specs du golden template. Le générateur écrit
proxmox_coeurs/memoire/disque_taille ; le clonage les passe à Proxmox
(omit si absent → aucune régression). Override par hôte dans le plan.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 10:07:04 -04:00
Alliance Boreale
3dd3f43ad8 Set-OPS — moteur d'ecosystemes numeriques souverains (Alliance Boreale) 2026-06-24 20:17:46 -04:00