Le registre des domaines publics — seul sans éditeur — a désormais son onglet :
ajouter/retirer une zone, autorité (sélecteur), edge, DNSSEC, mail, secondaires,
et affichage des expositions (FQDN) sous la zone. Backend : route /api/domaines,
ecrire_domaines, validation valider_domaines (rejette une autorité inconnue).
Éprouvé : round-trip backend (valide/écrit/rejette interne), node --check, smoke serveur.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Chaque action (creer-vm/verifier/deployer) écrit un journal horodaté
<instance>/logs/<hote>-<action>-<date>.log en plus du streaming live.
Si le navigateur se déconnecte, l'exécution continue et le log est capturé
jusqu'au bout (au lieu d'être interrompue). node --check OK, serveur HTTP 200.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SECRETS_ATTENDUS listait 16 secrets ; en manquaient 8 (OIDC des 3 clients,
cookie oauth2, restic, clé SSH sauvegarde, + nextcloud admin/oidc/bd). Le
panneau Intrants du GUI montre désormais la vraie liste (noms seulement, jamais
de valeur — la garde d'écriture des secrets reste inchangée).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deux onglets qui rendent visibles dans l'interface deux registres jusque-là
en CLI seulement :
- Flux : matrice d'audit réseau (rôle/sens/port/pair/chiffrement coloré/raison,
depuis les meta/flux.yml), + légende chiffrement dans le panneau latéral.
- Couches : ordre de reconstruction (socle -> pki -> services -> apps -> agents),
groupes triés topologiquement par couche.
Alimentées par resoudre_flux/orchestrer via l'API inventaire. Éprouvé :
node --check OK, smoke test serveur (63 flux, 6 couches servis, boutons présents).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le panneau « Intrants de base » expose désormais nftables_admin_ssh (type liste,
section Sécurité) — la garde anti-lockout du pare-feu, éditable en fichier mais
absente du GUI. Retrait de vault_step_ca_fingerprint des secrets attendus
(empreinte du root CA dérivée dynamiquement maintenant). node --check OK.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fin des dernières poches de 'codé en dur' liées à l'instance d'origine :
- realm SSO centralisé sur l'intrant identite_realm (defaut chezlepro,
retro-compatible) ; les 4 rôles (keycloak/forgejo/grafana/oauth2_proxy)
en dérivent. Expose dans la GUI (panneau Intrants).
- vars brandees renommees generiques : chezlepro_timezone -> fuseau_horaire,
chezlepro_organisation -> organisation (chrony, openldap, GUI, docs).
Aucune reference fonctionnelle aux anciens noms. Le moteur ne porte plus le
nom d'un tenant. Technolibre a son propre realm (technolibre).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>