Suppression de toute trace Chezlepro de l'outil (roles, scripts, docs publiques, exemples, LICENSE). Prouve par scan exhaustif : git grep vide pour chezlepro, asgard/TrueNAS, supernet reel 10.1.x. Corrige 5 defauts de genericite fonctionnels (motd, app.ini Forgejo, organisation openldap, nom AC step-ca, et IP reelles codees en dur dans les defaults de roles -> plage d'exemple 10.0.x). LICENSE -> Alliance Boreale. Fichiers mainteneur + CHANGELOG conserves (par decision). La separation moteur/instance tient : OPS-Chezlepro surcharge deja ses vraies valeurs de topologie. Verifie : make verifier exit 0 (4 tests). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
52 KiB
52 KiB
CHANGELOG — Set-OPS
2026-06-24
Modifié
- Consolidation minimale post-diagnostic (ménage documentaire, sans risque). Suite à une relecture à froid « auteur » de l'état réel du dépôt. (1) En-tête généré rafraîchi :
instance/inventories/production/hosts.ymlpointait encore vers l'ancienne sourcedocs/; régénéré viainstancier-appliquer(diff sémantique vide — contenu inchangé, seul l'en-tête a bougé ; commité côté instanceOPS-Chezlepro). (2)docs/catalogue-services.md: nouvelle section « État d'implémentation des rôles » qui distingue sans ambiguïté les rôles implémentés (validés en tant que code, non éprouvés en prod), les échafaudages (playbooks-ancresdebugsans rôle :serveur_nextcloud,serveur_collabora,client_supervision,serveur_web_frontal,serveur_web_dorsal) et les rôles-catégories inertes (applications,backup,database,identity,monitoring,proxmox,storage,web— vestiges d'un regroupement par catégorie abandonné, l'architecture réelle étant plateserveur_*/client_*) ; colonnes « Rôle futur » → « Rôle ». (3)docs/vm-lifecycle.md§8 : flux de déploiement réaligné sur le plan (instancier-appliquerpuisdeployer) au lieu de la commande supplantéehote-ajouter. Vérifié :make verifier(exit 0),ansible-lint0 échec. Non touché à dessein : les référencesinstance/inventories/lab/des docs de template sont correctes (contexte golden template, distinct deproduction) ; le bas duREADME.md(« Premier chantier »/« Principe ») est daté mais exact (template = socle), donc laissé tel quel pour éviter le churn. creer-vmenfin piloté par le plan — couture « inventaire → création VM » fermée (étape 4 du diagnostic).make creer-vm HOTE=<hôte>ne prend plus qu'un argument : il lit VMID/IP/CIDR/passerelle/VLAN/stockage/disque/nœud directement dans l'inventaire généré (commedeployerlit ses groupes) au lieu de les redemander à la main, et n'écrit plus dans l'inventaire (l'appel àhote-ajouterest supprimé — l'hôte est déjà présent via le plan). Repli sur le nœud par défaut deconfigsiproxmox_noeudabsent. Les 3 cibles legacyhote-ajouter/hote-planifier/hote-groupes(qui éditaient l'inventaire généré à la main — anti-pattern) sont neutralisées : refus explicite renvoyant versserveurs.yml+instancier-appliquer.aideet docs (README,QUICKSTART,procedure-template-debian13-proxmox) alignées surcreer-vm HOTE=…. La chaîne déclarative est désormais continue :plan → instancier-appliquer → creer-vm HOTE → (activer) → deployer HOTE. Activation laissée manuelle (édit du plan, par décision). Vérifié :make verifierexit 0 (dont 4 tests unitaires), extraction testée sur l'inventaire réel (data-01avec nœud,collab-01sans nœud → repli), chemins de refus (HOTE vide, hôte absent, cibles legacy) exit 2. (Clonage réel non exécuté : exige Proxmox — c'est la preuve VM, étape suivante.)- Neutralisation complète pour partage public (« 100 % neutre »). Préparation au don public du moteur : suppression de toute trace Chezlepro de l'outil (rôles, scripts, docs publiques, exemples, LICENSE) — prouvée par scan exhaustif (
git greprevient vide pourchezlepro, pourasgard/TrueNAS, et pour le supernet réel10.1.x). Corrigés au passage 5 défauts de généricité fonctionnels qui auraient déployé du Chezlepro chez tout hébergeur :roles/motd/templates/motd.j2(« Système Chezlepro » →{{ domaine_interne | default('Set-OPS') }}),serveur_forgejo(APP_NAME),serveur_openldap(organisation par défaut),serveur_step_ca(nom d'AC par défaut), et surtout les IP réelles codées en dur dans lesdefaultsde plusieurs rôles (db_host,loki_url,reseaux_autorises→ plage d'exemple10.0.x). Noms de tâches/playbooks et exemples de README généricisés ; marqueurs de fichiers gérés alignés sursetops(READMEs en retard) ; placeholder GUI neutralisé. LICENSE : copyright → Alliance Boréale. Fichiers mainteneur (AGENTS.md,CLAUDE.md,SOLUTION.md, doc Codex) etCHANGELOGconservés (couche gouvernance/historique — peuvent nommer Chezlepro, par décision). L'instanceOPS-Chezleprosurcharge déjà ses vraies valeurs de topologie dans sesgroup_vars: la séparation moteur/instance tient, le changement desdefaultsne casse pas Chezlepro (seuleclient_journal_loki_urlreste à surcharger côté instance). Vérifié :make verifierexit 0 (4 tests), 42 fichiers, scans de fuite vides.
Ajouté
- Sous-commande
inventory_host.py parametres-proxmox --hote X: émet, machine-lisible (SETOPS_*='valeur'), les paramètres de clonage Proxmox d'un hôte lus dans l'inventaire généré ; refuse si l'hôte est absent ou s'il manque un champ requis (VMID/IP/CIDR/passerelle/VLAN). Consommée parmake creer-vm. Premier test stdlib du dépôtscripts/tests/test_inventory_host.py(sans pytest) + ciblemake test, câblée dansmake verifier.
2026-06-23
Corrigé
- Robustesse du moteur pour une instance hors dépôt (révélé par une instance d'essai agnostique). Les scripts affichaient des chemins via
Path.relative_to(RACINE), qui lève quand l'instance est en dehors du dépôt (SETOPS_INSTANCEpointant un chemin externe, ex.../OPS-laPreuve). Remplacé paros.path.relpath(scripts/instancier.py,inventory_gui.py,config_proxmox.py). Le moteur génère désormais correctement depuis n'importe quel emplacement d'instance — agnosticité prouvée (instancelapreuve.local/10.9.0.0/16: inventaire distinct, zéro fuite Chezlepro).
Modifié
- Dette doc soldée après le découpage moteur/instance. Rafraîchissement des chemins dans les docs secondaires, README de rôles, messages et docstrings :
inventories/...→instance/inventories/...,docs/<plan>.yml→instance/plan/<plan>.yml. Correction au passage de chemins de playbooks périmés (préexistants) dansCLAUDE.md/SOLUTION.md:playbooks/vm_templates/debian13_proxmox_prepare|verify|cleanup.yml→playbooks/modeles_vm/debian13_proxmox_preparer|verifier|nettoyer.yml, etconfirm_template_cleanup→template_cleanup_confirm. Validé : diff vide,ansible-lint0 échec,make inventaire-verifier. - Découpage moteur/instance — Phase 3 (modèle A) : deux dépôts. Le contenu de
instance/(plan + inventaire) part dans un dépôt d'instance dédié (OPS-Chezlepropour Chezlepro, sur la forge).Set-OPSdevient le moteur pur (rôles, scripts, playbooks, guides, exemples). L'instance est montée via un symlinkinstance -> ../OPS-Chezlepro(gitignoré) : le défautSETOPS_INSTANCE=instancela résout sans configuration. Le moteur lit le plan et régénèrehosts.ymldans le dépôt d'instance..ansible-lintexclutinstance/. Validé : diff vide,ansible-lint0 échec,make inventaire-verifier,instancier-appliquer. Modèle A (dépôts frères) retenu jusqu'à preuve du concept ; le modèle B (moteur en sous-module) pour la meute viendra ensuite. Le moteur ne contient plus aucune donnée Chezlepro. - Découpage moteur/instance — Phase 2b : sortir l'inventaire dans
instance/inventories/. L'inventaire (hôtes générés,group_vars, vault) quitteinventories/pourinstance/inventories/. Suivent :ansible.cfg, leMakefile(export SETOPS_INSTANCE ?= instance, chemins dérivés), les scripts (INSTANCE / "inventories/..."),config_proxmox.py,.gitignore. Les docs primaires (AGENTS.md,README.md,docs/plan-et-generation.md,docs/architecture-set-ops.md) reflètent le layoutinstance/. Non destructif : diff vide,ansible-lint0 échec,make inventaire-verifierOK. (Docs secondaires à rafraîchir ; Phase 3 : deux dépôts.) - Découpage moteur/instance — Phase 2a : sortir le plan dans
instance/plan/. Les 5 registres (serveurs,applications,bases-donnees,domaines,nomenclature) quittentdocs/pourinstance/plan/. Les scripts les localisent viaSETOPS_INSTANCE(variable d'env, défaut<dépôt>/instance) ; les rôles/playbooks viasetops_plan_dir(group_vars d'instance).docs/ne garde que les guides.md+dependances-groupes.yml(moteur)..ansible-lintexclutinstance/plan/(registres de données). Non destructif : diff vide,ansible-lint0 échec,include_varsviasetops_plan_dirtesté. (Phase 2b : sortir l'inventaire ; Phase 3 : deux dépôts.) - Découpage moteur/instance — Phase 1b : neutraliser la marque
chezlepro. Les noms de fichiers gérés par les rôles (99-chezlepro.conf,chezlepro_filter,chezlepro-bind.conf,/etc/redis/chezlepro.conf, etc.) et les 14 templates correspondants passent à la marque neutre du moteursetops(git mv+ référencessrc/dest). Un loup ne déploie plus de fichiers marqués « chezlepro ». Cohérencesrc ↔ templatevérifiée,ansible-lint0 échec, diff vide. (Les README gardent leurs exemples ; génériciser plus tard.) - Découpage moteur/instance — Phase 1 : délier les rôles du domaine Chezlepro. Introduction d'une variable d'identité d'instance
domaine_interne(dansinventories/*/group_vars/all.yml). Les 13 rôles qui codaientchezlepro.internalen dur (zones DNS, FQDN, relais SMTP, AC, etc.) utilisent désormais{{ domaine_interne }}; lebase_dnLDAP et le domaine court sont dérivés (dc={{ domaine_interne.split('.') | join(',dc=') }}→dc=chezlepro,dc=internal, oudc=acme,dc=localpour un autre loup). Comportement identique pour Chezlepro (qui posedomaine_interne: chezlepro.internal), mais le moteur devient générique — première brique pour partager l'outil à la meute (docs/positionnement.md). Ajout d'exemples/instance.exemple.yml. Non destructif : diff de génération vide,ansible-lint0 échec. (La marquechezleprosur les noms de fichiers gérés —99-chezlepro.conf,chezlepro_filter— sera neutralisée en Phase 1b ; sortie du plan en Phase 2 ; deux dépôts en Phase 3.)
Ajouté
- Principe gravé : Set-OPS exploitable par un humain SANS IA. Ajouté comme principe #10 d'
AGENTS.md(règle pour le mainteneur : ne jamais introduire de fonctionnalité qui exige une IA) et en face humaine dans leREADME(survit à la livraison sans les fichiers IA). La doc /make/ GUI sont l'interface primaire et complète ; l'IA n'assiste que le mainteneur, jamais l'utilisateur.AGENTS.md/CLAUDE.mdne font pas partie de l'outil livré. (Souveraineté jusqu'au bout : pas de dépendance aux géants remplacée par une dépendance à une IA.) - Accueil d'un nouvel hébergeur (parcours à froid). Nouveau
QUICKSTART.md: le chemin linéaire « de zéro à ton écosystème déployé sur ta grappe Proxmox » (cloner le moteur → choisir un modèle → créer son instance + symlink → renseigner →make config+ secrets → construire le golden template une fois →instancier→cloner-vm→ activer +deployer), honnête sur les prérequis et le seam création-de-VM.README.mdréorienté : « moteur générique qu'un hébergeur peut utiliser » (plus « infra de Chezlepro »), avec pointeur QUICKSTART. Garde-fou_instance-requisedans le Makefile : si l'instance manque, message utile (liste des modèles + QUICKSTART) au lieu d'un faux « valide » silencieux, surinstancier/instancier-appliquer/inventaire-ui/inventaire-verifier/deployer.make aideroute vers QUICKSTART. - Catalogue de modèles d'écosystèmes prêts à déployer (
exemples/modeles/). Un hébergeur copie le modèle qui colle à son offre, le renseigne à ses couleurs (ou celles de son client) et instancie — plus besoin de démonstrateur. Structure socle + modules + presets : un socle souverain (DNS interne, AC/PKI, edge TLS, relais courriel) + des modules (web, identité, forge, observabilité, collaboration). Modèles livrés et validés (chacun génère un écosystème distinct, zéro fuite Chezlepro, IPs10.10.x) :socle(4 VM),presence-web(7),forge(6),identite(LDAP+Keycloak, 6),observabilite(Prometheus/Loki/Grafana+Icinga, 7),integral(11).collaboration(Nextcloud/Collabora) reste à construire (rôles non implémentés)..ansible-lintexclutexemples/. Remplace l'instance d'essai jetable. docs/positionnement.md— décision de positionnement vs l'existant. Acte que le cœur de Set-OPS (plan déclaratif → génération d'inventaire) recoupe NetBox/Nautobot (+nb_inventory), le GUI d'exécution recoupe AWX/Semaphore, le « la définition instancie la flotte » recoupe NixOS+Colmena / Terraform, et le modèle application-pivot recoupe Backstage. Décision en vigueur : on garde le plan de contrôle maison (souverain, bien dimensionné pour ~13 VM) mais on gèle son périmètre ; seuils explicites d'adoption de l'outil mûr (RBAC/audit → AWX ; IPAM/source de vérité partagée → NetBox). Règle ancrée dansAGENTS.md.- Documentation — passe complète (le dépôt « dit ce qu'il fait »). Nouveau guide central
docs/plan-et-generation.md: le modèle (entités + liens), les registres et leurs schémas, la référence des commandesmake/CLI et des vues GUI, le flux « éditer le plan →instancier→ appliquer », les garde-fous.AGENTS.mdgagne la section « Le plan et la génération de l'inventaire » (règle d'or :hosts.ymlest généré, ne pas l'éditer).README.md: section « Le plan : on édite, l'inventaire se génère » + remplacement du flux legacyhote-planifier/ajouterpar le flux par le plan. Rafraîchissement dedocs/architecture-set-ops.md(entités du plan),docs/nomenclature-vm.mdetdocs/catalogue-services.md; correction de la terminologie domaine → fonction dans la prose (collision avec le DNS levée jusque dans la doc).
Modifié
- Noms de rôles et playbooks au singulier.
serveurs_*→serveur_*,clients_*→client_*, et suffixes pluriels au singulier (serveur_web_dorsal/serveur_web_frontal,client_metrique,client_journal). Renommage par tokens exacts : répertoires de rôles, playbooks de groupes,group_vars, variables internes des rôles (serveur_nginx_*, conformitéansible-lint), groupes du plan (applications.yml,serveurs.yml: integrations), constantes de code (GROUPES_OPERATIONNELS_PREFIXES, sockle), docs. Les faux-amis sont préservés (serveurs_bdclé du registre BD,scripts/serveurs.py, fonctions Python). Les groupes d'état restent au pluriel (hotes_actifs/hotes_planifies/modeles_vm). Validé :ansible-lint0 échec (0 var-naming), diff vide de la génération,node --check, tous les registres. Ajout de.ansible-lintexcluantdocs/(registres de données, pas du contenu Ansible). - Rework GUI : l'UI édite le plan (branche
bascule-inventaire-genere). La vue Serveurs devient éditable (fonction / état / placement Proxmox / intégrationsclients_*, avec VMID/IP/VLAN dérivés en direct), avec « + Serveur », « Sauvegarder les serveurs » (POST /api/serveurs) et « Appliquer le plan → hosts.yml » (POST /api/instancier→instancier appliquer). La vue Inventaire passe en lecture seule : bandeau explicite + l'écriture directe (POST /api/inventaire) est refusée (409) puisquehosts.ymlest désormais généré. Tout passe par le plan (serveurs.yml/applications.yml) puis « Appliquer ». Garde-fou JSnode --checkexécuté à chaque étape. - Bascule méta-classe (branche
bascule-inventaire-genere).make instancier-appliquerrégénèreinventories/production/hosts.ymldepuis le plan (refuse si le diff n'est pas vide, saufFORCE=1pour un changement intentionnel ; git sert de filet). Effectuée avec diff vide vérifié :hosts.ymlest désormais un artefact généré, sémantiquement identique à l'ancien (vérifié parmake inventaire-verifiercomplet + chargement GUI). À ce stade le GUI édite encorehosts.ymldirectement (rework à venir) : éditer le plan (serveurs.yml/applications.yml) puismake instancier-appliquer. - Phase 2 (début) — vue Chaîne holistique. Dans
make inventaire-ui, la vue Chaîne montre désormais, pour chaque application d'un hôte, l'ensemble de ses liens :expose(FQDN publics),requiert(applications dont elle dépend) et ses bases (DSN), plus son port. On voit d'un coup d'œil comment VM, applications, bases et domaines s'articulent. - Phase 1b — clarté de nommage. La clé
domaines:dedocs/nomenclature.yml(familles fonctionnelles :infra-pki,web-frontal…) est renomméefonctions:pour lever la collision avec les domaines DNS (docs/domaines.yml). L'auto-proposition du GUI suit (fonctionDe/infoFonction,nomenclature.fonctions, libellés « Fonction inconnue… », placeholderfonction-NN). Aucun rôle ni inventaire impacté : la nomenclature n'est consommée qu'au moment de la planification. - Refonte « application-hub », Phase 1 — les liens deviennent explicites (inventaire inchangé, zéro régression). L'application porte désormais tous ses liens :
groupe(capacité/rôle),hote(VM),port,requiert(autres applications dont elle dépend) etexpose(FQDN publics qui la publient). L'exposition DNS quittedocs/domaines.yml(le blocexpositionest retiré) et vit sur l'application viaexpose;docs/domaines.ymlne décrit plus que les zones (autorité, edge, secondaires, dnssec, mail).serveurs_nginxdérive ses vhosts des applications (expose+ edge du domaine), résolvantapplication → hôte → IP(rôle +expositions.conf.j2réécrits). Nouvelle règle partagéeexpositions_des_applications(+domaine_parent) dansinventory_rules.py, exposée à Ansible par le filter plugin ;valider_applicationsvaliderequiert(applis connues),expose(domaine parent déclaré) etport. CLI (applications.py --port/--requiert/--expose,domaines.pyaffiche les expositions dérivées) et GUI (champs Port/Requiert/Expose sur la fiche Application, persistés) suivent ; l'API expose aussi le registre des domaines. Le groupe n'est plus une cible de liaison, seulement une capacité. (Renommagenomenclature.domaines:→fonctions:reporté en Phase 1b ; génération de l'inventaire depuis le plan en Phase 3.)
Ajouté
- Phase 3 — générateur d'inventaire depuis le plan (non destructif ; diff vide prouvé).
make instancier(scripts/instancier.py) génèreinventories/production/hosts.genere.yml(gitignoré, artefact) depuis le plan —docs/serveurs.yml+docs/applications.yml+docs/nomenclature.yml— puis compare sémantiquement (viaansible-inventory --list, formatage ignoré) avec l'inventaire actuel : host vars dérivés (IP/VMID/VLAN/passerelle de la nomenclature, placement/taille du registre serveurs), groupes dérivés (socledebian/durcis+ services depuis les applications + intégrationsclients_*+ état). Prérequis posés :make applications-bootstrap(servicesserveurs_*→ applications) etserveurs.ymlenrichi d'integrations(lesclients_*par VM, capturés au bootstrap). Résultat : DIFF VIDE — le plan reproduit exactement les 13 hôtes de l'inventaire. La bascule (rendrehosts.ymlgénéré et faire éditer le plan par l'UI) reste non effectuée : elle attend une validation explicite. - Phase 2 — le serveur (VM) entre dans le plan (lecture seule, l'inventaire reste autorité). Nouveau registre
docs/serveurs.yml(VM =fonction+etat+ placement/dimensionnement Proxmox), bootstrapé depuis l'inventaire (make serveurs-bootstrap). La dérivation nomenclature (fonction + rang → VMID/IP/VLAN/passerelle) est portée en Python (deriver_nomenclature, source unique, miroir de l'auto-proposition du GUI) et la réconciliation compare le dérivé aux valeurs de l'inventaire (reconcilier_serveur). CLIscripts/serveurs.py(lister/verifier/bootstrap) + ciblesmake serveurs/serveurs-verifier/serveurs-bootstrap, intégré àmake inventaire-verifier. GUI : vue Serveurs (lecture seule) affichant le plan + valeurs dérivées + statut de réconciliation. Bootstrap initial : 13 serveurs, tous réconciliés (le dérivé reproduit exactement l'inventaire → la génération de Phase 3 pourra viser un diff vide). - Application = entité de première classe (une VM peut porter plusieurs applications). Nouveau registre
docs/applications.yml(application → groupe, hote). Les bases se lient viaconsommateur+portee(application|groupe|hote, défautgroupe) dansdocs/bases-donnees.yml: une applicationA(groupeG, hôteH) reçoit les bases où(portee=application ET consommateur=A) OU (portee=groupe ET consommateur=G) OU (portee=hote ET consommateur=H)— plusieurs DSN par application. Résolution + validation partagées dansinventory_rules.py(charger_applications,valider_applications,applications_de_hote,bases_de_application,PORTEES_BD;valider_basescroise désormaisportee=applicationavec le registre des applications). CLIscripts/applications.py(lister/verifier/ajouter/retirer) +scripts/bases_donnees.py --portee; ciblesmake applications/applications-verifier; validation intégrée dansmake inventaire-verifier. GUI : vue Applications (CRUD), sélecteur de portée + consommateur dynamique (groupe/hôte/application) dans la vue Bases, et vue Chaîne par application (DSN résolus par hôte). Filter pluginfilter_plugins/registres.pyexposant la même règle de résolution à Ansible (source unique) ; les playbooksserveurs_web_dorsaux/serveurs_web_frontauxitèrent désormais sur les applications de l'hôte et résolvent leurs bases (scaffold ; le déploiement applicatif réel s'y insère). Les services en grappe (keycloak/icingadb/forgejo) restent enportee: groupe(inchangés). - Vhosts
serveurs_nginxdérivés du registredocs/domaines.yml(blocexposition) : pour chaque expositionwebciblant cet edge, un vhost est généré (expositions.conf.j2) avec amont =amontexplicite, sinonhttp://<IP interne de la cible>:<port>résolu depuis l'inventaire ; une exposition non résolvable (cible sans hôte actif, ou sans port) est listée mais non publiée. Variablesserveurs_nginx_groupe(edge ciblé) etserveurs_nginx_publier_expositions(bascule). Les sites déclarés à la main continuent de coexister. Ajout duport: 3000à l'expositionforge.
2026-06-22
Ajouté
- Registre déclaratif des domaines publics
docs/domaines.yml(publication externe des hostnames), symétrique dedocs/bases-donnees.yml. Modèle d'autorité retenu : primaire caché + secondaires (PowerDNS backend PostgreSQL + API non exposé, secondaires publics via AXFR/TSIG). Blocexposition= bindingnom public → service interne (cible) → edge, destiné à trois consommateurs (génération de zone publique, vhostsserveurs_nginx, noms à certifier ACME). Validation partagée dansinventory_rules.py(charger_domaines,valider_domaines,fqdn_exposition,expositions_du_groupe; autorités connuesprimaire-cache|auto-heberge|delegue,edgerequis, FQDN uniques). CLI miroirscripts/domaines.py(lister/verifier) + ciblesmake domaines/make domaines-verifier, et validation intégrée dansmake inventaire-verifier. Première entrée réelle :forge.alliance-boreale.ca → serveurs_forgejo(DNSSEC, secondaires et enregistrements mail laissés à renseigner). - Formalisation de l'identité du dépôt :
AGENTS.md(nouvelle section « Mission et identité ») etREADME.md(section « Mission ») actent queSet-OPSdéfinit et construit l'écosystème numérique souverain de Chezlepro Inc. — piliers (identité, confiance, nommage/adressage, données, communication, observabilité/supervision, applicatif), propriétés (souverain, déclaratif/convergent) et limites honnêtes (pas d'auto-remédiation ; en grande partie défini/validé avant déploiement réel). Le template Debian 13 reste la fondation, pas la finalité. - Gestion des bases de données dans la GUI et la CLI : vue « Bases » de
make inventaire-uiprésentant les serveurs de BD, les bases applicatives et leurs chaînes de connexion (mot de passe masqué), avec gestion complète (ajout / édition / retrait) et endpointPOST /api/bases(validé, jeton). CLIscripts/bases_donnees.py(lister/verifier/ajouter-serveur/ajouter-base/retirer-*) + ciblesmake basesetmake bases-verifier. Le registre est désormais validé dansmake inventaire-verifier. GUI et CLI partagent les mêmes règles (inventory_rules). - Rôle
serveurs_forgejo(forge Git, Phase 5) : binaire officiel Forgejo (version épinglée + lien symbolique), utilisateurgit, base PostgreSQL via le registre (4e consommateur, entréeforgejo), publication derrièreserveurs_nginx(HTTP_ADDR=127.0.0.1,INSTALL_LOCK), secrets (BD +SECRET_KEY+INTERNAL_TOKEN+ admin) via Vault, mailer versserveurs_sendmail, compte administrateur initial créé une fois. Détails d'installation tirés de la doc officielle Forgejo. Activation de l'entréeforgejodansdocs/bases-donnees.yml. Playbook de groupe etgroup_varsproduction associés. - Rôle
serveurs_icinga(supervision active — cœur, Phase 4) : dépôt apt officiel Icinga,icinga2+icingadb+icingadb-redis,icinga2 api setup+ activation de la fonctionnalitéicingadb, base PostgreSQL via le registre (entréeicingadb, import du schéma, mot de passe partagé via Vault), config Icinga DB (BD + Redis). Icinga Web 2 différé à une phase dédiée. Détails de configuration Icinga DB paramétrés et signalés comme non vérifiables verbatim (pages doc partiellement indisponibles). Ajout de l'entréeicingadbàdocs/bases-donnees.yml. Playbook de groupe etgroup_varsproduction associés. - Rôle
serveurs_redis(cache / files, paquet Debian) : surcharge non destructive deredis.confviainclude,requirepass(Vault, car exposé sur le réseau interne),maxmemory+ politiqueallkeys-lru, écoute localhost + IP interne. Complète le nœud données (data-01) aux côtés de PostgreSQL. Playbook de groupe etgroup_varsproduction associés. - Rôle
clients_smtp(intégration cliente relais mail) :msmtp+msmtp-mtarelaient le courrier sortant (notifications, cron, alertes) versserveurs_sendmail, sans daemon. Dernière intégration cliente dont le serveur central existe. Playbook de groupe etgroup_varsproduction associés. - Rôle
clients_ldap(intégration cliente identité utilisateur) : SSSD (NSS + PAM) versserveurs_openldap, activation desssdans/etc/nsswitch.conf(passwd/group/shadow), création automatique des répertoires personnels (mkhomedir), bind anonyme par défaut (bind dédié possible via Vault). Authentification des utilisateurs centralisée — complète l'identité machine declients_pki. Playbook de groupe etgroup_varsproduction associés. - Rôle
clients_pki(intégration cliente PKI / identité machine) :step-cli(dépôt Smallstep), confiance dans l'AC interne (step ca bootstrap --install→ racine dans le magasin système), certificat d'hôte via le provisioner, renouvellement automatique (unités systemd officiellescert-renewer@.{service,timer}, vérification toutes les 15 min). Chaque hôte obtient une identité machine vérifiable et un TLS interne réel (remplace les certificats auto-signés). Secrets (empreinte racine + mot de passe provisioner, partagé avecserveurs_step_ca) via Vault. Détails tirés de la doc officielle Smallstep. Playbook de groupe etgroup_varsproduction associés. - Rôle
clients_journaux(intégration cliente journaux) : Grafana Alloy (dépôt apt Grafana) lit le journal système (journald) et le pousse versserveurs_loki; l'utilisateuralloyest ajouté au groupesystemd-journal. Complète l'observabilité côté client (métriques + journaux). Playbook de groupe associé. - Rôle
clients_metriques(intégration cliente métriques) : installeprometheus-node-exporter(paquet Debian) sur les VM du groupe ;serveurs_prometheusdérive et scrape automatiquement la cible depuis l'inventaire. Première intégration cliente — ferme la boucle d'observabilité côté métriques. Playbook de groupe associé. - Rôle
serveurs_grafana(tableaux de bord, dépôt apt officiel Grafana) : datasources Prometheus + Loki provisionnées automatiquement (/etc/grafana/provisioning/datasources/), domaine/root_urlet mot de passe admin (Vault) via un drop-in systemd non destructif (ne touche pasgrafana.inidu paquet), inscriptions publiques désactivées, publication derrièreserveurs_nginx. Clôt la Phase 3 observabilité. Playbook de groupe etgroup_varsproduction associés. - Rôle
serveurs_loki(agrégation de journaux, dépôt apt officiel Grafana) : configuration single-node (stockagefilesystem, schéma TSDB v13), rétention via compactor (retention_enabled), écoute:3100. Le dépôt apt Grafana est partagé avecserveurs_grafana. Playbook de groupe associé. - Rôle
serveurs_prometheus(collecte de métriques, paquet Debian) : début de la Phase 3 observabilité. Config Prometheus avec ciblesnode_exporterdérivées de l'inventaire (hôtes actifs declients_metriques→:9100, comme la zone DNS), jobs additionnels libres, rétention configurable via/etc/default/prometheus,promtool check configavant rechargement (handler dans le rôle). Playbook de groupe associé. - Rôle
serveurs_keycloak(SSO/IAM, hub d'authentification centralisée) : distribution Quarkus (version en variable, URL release officielle), premier consommateur de bout en bout du registre de BD (serveurs_postgresqlcrée la base/comptekeycloak, le rôle lit la même entrée pour son DSN — mot de passe partagé viavault_bd_keycloak), publication derrièreserveurs_nginx(proxy-headers=xforwarded,http-enabled=true), secrets (BD + admin bootstrap) dans unEnvironmentFile 0640/no_log,kc.sh buildpuis service systemdstart --optimized. Activation de l'entréekeycloakdansdocs/bases-donnees.yml. Détails de configuration tirés de la doc officielle Keycloak. Playbook de groupe etgroup_varsproduction associés. - Rôle
serveurs_openldap(annuaire interne) : slapd Debian configuré via debconf (installation non interactive, backend MDB), base DN dérivée du domaine (dc=chezlepro,dc=internal), mot de passe admin obligatoire depuis Vault, unités organisationnelles de base (people,groups) viacommunity.general.ldap_entry. Playbook de groupe etgroup_varsproduction associés. - Registre déclaratif des bases de données applicatives
docs/bases-donnees.yml(patron « 1 appli → 1 base → 1 compte propriétaire → 1 chaîne de connexion »). Consommé côté serveur parserveurs_postgresql(crée base + compte propriétaire, mot de passe depuis la variable Vault nommée parsecret) et, côté appli, pour bâtir la chaîne de connexion — secret partagé, source unique. Évite un rôle par base. Vide par défaut. - Rôle
serveurs_step_ca(AC interne Smallstep step-ca + provisioner ACME) : dépôt apt officiel Smallstep (clé + source deb822), installationstep-ca/step-cli, utilisateur systèmestep, initialisation de l'AC une seule fois (step ca initstandalone + ACME, garde-foucreates: ca.json), mots de passe CA et provisioner obligatoires depuis Vault, unité systemd durcie officielle. Playbook de groupe etgroup_varsproduction associés. Clôt la Phase 1 des fondations. Détails d'installation tirés de la documentation officielle Smallstep (non inventés). - Rôle
serveurs_sendmail(relais SMTP sortant, basé sur Postfix qui fournit l'interfacesendmail-compatible) : installation non interactive (debconf), relais limité àmynetworks(10.1.0.0/16, pas de relais ouvert), smarthost amont optionnel, TLS opportuniste (snakeoil par défaut),postfix checkavant reload. Playbook de groupe etgroup_varsproduction associés. - Rôle
serveurs_nginx(edge) : reverse proxy et terminaison TLS, certificat auto-signé (snakeoil) par défaut avec chemins en variables pour bascule vers l'AC interne/ACME, durcissement de base (server_tokens off, TLS 1.2/1.3), sites de reverse proxy pilotés par variables (vides par défaut), validationnginx -tavant reload (handler dans le rôle). Playbook de groupeserveurs_nginxetgroup_varsproduction associés. - Rôle
serveurs_postgresql(premier service applicatif après PowerDNS) : PostgreSQL packagé Debian 13, écoute127.0.0.1+ IP interne,pg_hbaenscram-sha-256ouvert au réseau interne10.1.0.0/16, configuration viaconf.d, provisionnement optionnel de comptes/bases par variables (mots de passe via Vault), handlers reload/restart dans le rôle. Playbook de groupeserveurs_postgresqletgroup_varsproduction associés. Ajout derequirements.yml(collectionscommunity.postgresql,community.general). - Vue des liens VM → groupes → playbooks → rôles dans
make inventaire-ui: onglet « Chaîne » par hôte (panneau détail) et vue arbre globale (bascule « Inventaire / Chaîne » en en-tête). Les rôles sont extraits desplaybooks/groupes/*.ymlet exposés dans l'API ; les groupes sans rôle sont signalés « stub ». - Champ de mot de passe du vault Ansible dans la modale de déploiement de
make inventaire-ui: transmis via fichier temporaire0600+ANSIBLE_VAULT_PASSWORD_FILE, supprimé après exécution, jamais journalisé. Évite tout prompt--ask-vault-passbloquant en exécution non-interactive. Le flux vault demake cloner-vm/creer-vmn'est pas modifié. - Catégorie « Modèles / essais » (VLAN 99 →
10.1.99.0/24) dansdocs/nomenclature.yml. - Registre de nomenclature machine-lisible
docs/nomenclature.yml(source unique) : domaines, catégories, plan d'adressage10.1.0.0/16segmenté par fonction (un /24 et un VLAN par catégorie), dérivations hostname / VMID / VLAN / IP / passerelle. - Auto-proposition dans
make inventaire-ui: bouton « ✨ Proposer » et auto-remplissage à la saisie du nom, qui dérivent VMID, VLAN, IP et passerelle depuisdocs/nomenclature.yml(avec indice de zone). Migration du plan d'adressage interne vers10.1.0.0/16(remplace les essais192.168.12.x). - Adoption du nom officiel « Set-OPS — Votre artisan numérique » : titre et en-tête de
make inventaire-ui, et titre duREADME.md. - Déploiement depuis
make inventaire-ui: boutons « Vérifier » (dry-run--check --diff) et « Déployer » (réel) par hôte, avec console de sortie en direct. Garde-fous : jeton anti-CSRF (X-Jeton), verrou (une seule exécution à la fois), validation du nom d'hôte (anti-injection), refus si l'hôte n'est pas actif, déploiement bloqué tant qu'une vérification n'a pas réussi (réarmé à chaque sauvegarde), restriction à l'inventaire production. Déploiement non transactionnel (sans rollback) signalé à l'opérateur. - Cible
make verifier-deploiement HOTE=…: déploiement à blanc (--check --diff) d'un hôte selon ses groupes, réutilisée par l'interface. - Refonte de l'interface
make inventaire-ui: thème sombre dense, grille de cartes d'hôtes groupées par état (Actifs / Planifiés) avec badge de statut coloré, chips de filtre (Tous / Actifs / Planifiés / Bloqués), recherche, et panneau détail maître-détail à onglets (Réseau / Proxmox / Groupes) avec tuiles de chiffres-clés (VMID, mémoire, cœurs, disque, groupes), bascule d'état actif/planifié, panneau de dépendances repliable, raccourci Ctrl/Cmd+S. - Saisie des paramètres de provisioning par hôte dans l'inventaire (variables d'hôte) :
proxmox_cidr,proxmox_passerelle,proxmox_vlan,proxmox_pont,proxmox_dns,proxmox_noeud,proxmox_stockage,proxmox_disque_taille,proxmox_memoire,proxmox_coeurs, avec validation (VLAN 1-4094, CIDR 0-32, entiers positifs) et round-trip non destructif. Documentées dansdocs/nomenclature-vm.md. - Scission de la couche applicative web en deux groupes distincts de l'edge
serveurs_nginx:serveurs_web_frontaux(présentation web : UI, rendu, assets) ;serveurs_web_dorsaux(application web : API, traitement) ;- playbooks homonymes et entrée dédiée dans
docs/catalogue-services.md.
- Ajout de
make hote-planifierpour renseigner un hôte, son VMID et ses groupes sans création ni déploiement immédiat. - Ajout de
scripts/inventory_rules.pypour centraliser les règles partagées entre la gestion CLI et l'interface locale d'inventaire. - Ajout de
docs/dependances-groupes.ymlcomme registre exploitable des dépendances causales entre groupes. - Ajout du contrat
serveurs_powerdnsafin de représenter la capacité DNS centrale requise parclients_dns. - Ajout du premier jalon DNS interne :
- rôle
serveurs_powerdnsavec PowerDNS Authoritative et backend BIND ; - génération de la zone interne depuis l'inventaire actif ;
- rôle
clients_dnsavec validation de zone et modification resolver protégée ; - variables de production DNS et runbook
docs/dns-interne.md.
- rôle
Modifié
- Bindings appli↔BD explicites et plusieurs bases par application : chaque base porte un
consommateur(le groupe applicatif qui l'utilise) et unusage(principale/cache…). La GUI (vue « Bases » : menu déroulant Consommateur + champ Usage) et la CLI (ajouter-base --consommateur --usage) gèrent le lien ; la vue Chaîne devient détaillée (chaque groupe affiche ses rôles ET ses bases avec leur chaîne de connexion). Rôlesserveurs_keycloak/serveurs_forgejo/serveurs_icingamigrés pour résoudre leur base par consommateur (plus de clé codée en dur). - Registre
docs/bases-donnees.ymlpassé à un modèle multi-serveurs : sectionserveurs_bd(serveurs de BD nommés —type/hôte/port/groupe) que chaque base référence. La chaîne de connexion dérivée devient le lien appli↔BD ; l'hôte n'est plus codé en dur. Rôlesserveurs_postgresql(filtre par serveur nommé relié à son groupe) etserveurs_keycloak/serveurs_forgejo/serveurs_icinga(hôte/port lus depuis le registre) migrés. - Robustesse du serveur
make inventaire-ui:repondre()avale proprement les connexions fermées par le client (BrokenPipeError/ConnectionResetError) au lieu de déverser une trace dans la console ; ajout d'un favicon (204) pour éviter le 404 répété du navigateur. make deployeretmake verifier-deploiementdétectent ungroup_varsde production chiffré (Ansible Vault) et demandent le mot de passe une seule fois (réutilisé pour tous les playbooks et sous-vérifications via fichier temporaire0600, nettoyé en fin de run). Refus propre si vault chiffré détecté en exécution non-interactive ; la GUI fermestdindu sous-processus et fournit le mot de passe via la modale, donc elle ne bloque jamais. Ferme l'asymétrie de gestion des secrets entre terminal et GUI.- Migration complète de l'adressage interne vers
10.1.0.0/16: golden templatebasiqueChezlepro→10.1.99.99, et tous les exemples192.168.x(README, Makefile, runbooks Proxmox et template) réécrits vers le schéma10.1.x/web-frontal-01. - Remplacement du groupe
serveurs_webparserveurs_web_frontauxetserveurs_web_dorsauxdans les inventaires lab et production, mises à jour des exemplesREADME.mdetAGENTS.md. - Retrait des hôtes de test
web-01etweb-02de l'inventaire production. - Planification de la couche applicative web :
web-frontal-01(95301),web-frontal-02(95302) dansserveurs_web_frontauxetweb-dorsal-01(95401) dansserveurs_web_dorsaux, tous enhotes_planifiesavec socle et durcissement. - Mise à jour de
docs/nomenclature-vm.md: domainesweb-frontal/web-dorsal, retrait des noms de testweb-01/web-02. - Renforcement de la validation d'inventaire :
- un hôte doit être soit planifié, soit actif, mais pas les deux ;
- un hôte actif doit avoir
ansible_host; - un hôte doit porter au moins un groupe opérationnel ;
- les VMID dupliqués sont refusés.
- Conservation du VMID dans l'inventaire lors de
make creer-vmetmake hote-ajouter. - Alignement de l'aide Makefile et de la documentation sur le flux opérateur : planifier, activer/créer, déployer.
- Retrait des groupes génériques obsolètes
serveurs_bases_donneesetserveurs_supervisionau profit des groupes de services précis. - Consolidation des groupes Icinga en
serveurs_icingaafin de représenter une seule capacité de supervision serveur surmon-01. - Validation des prérequis actifs avant déploiement d'un groupe, déploiement d'un hôte ou sauvegarde active via l'interface d'inventaire.
- Refonte visuelle de
make inventaire-uipour afficher les dépendances causales, les prérequis manquants et l'état déployable ou bloqué des hôtes.
2026-06-21
Ajouté
- Ajout de facilités
makepour exploiter Ansible sur les VM Debian déployées :- diagnostic
ping,sudoetfaits; - variables
LIMITE,VERIFICATION,DIFF,ETIQUETTES,SAUTER_ETIQUETTESetVARIABLES.
- diagnostic
- Ajout de facilités
makepour inspecter et valider les inventaires Ansible :hote-ajouter;hote-groupes;hote-afficher;inventaire-verifier;inventaire-lister;inventaire-graphe;inventaire-hote;inventaire-lab;inventaire-production.
- Ajout de
deployeretdeployer-groupecomme commandes opérateur simplifiées pour appliquer les playbooks de groupes. - Ajout de
scripts/inventory_host.pypour gérer les entrées d'inventaire et leur appartenance aux groupes sans édition YAML manuelle. - Ajout de la convention
1 groupe opérationnel = 1 playbook homonymeavec les premiers playbooks :playbooks/groupes/serveurs_debian.yml;playbooks/groupes/serveurs_durcis.yml.
- Ajout du playbook
playbooks/maintenance/verifier_hote_debian.ymlpour valider une VM Debian 13 gérée par Set-OPS après socle et durcissement. - Ajout de directives
AGENTS.mdpour formaliser leMakefilecomme interface opérateur, la convention groupe/playbook, la francisation de la surface opérateur et les points de stabilisation avant commit. - Ajout du playbook
playbooks/proxmox/cloner_vm_debian.ymlet des ciblesmake cloner-vm/make creer-vmpour créer des clones Debian via l'API Proxmox sans stocker de secret dans le dépôt. - Ajout de
inventories/lab/group_vars/proxmox.ymlpour les paramètres Proxmox non sensibles et deproxmox.vault.yml.examplepour préparer les secrets API avec Ansible Vault. - Ajout de
make configpour renseigner les paramètres Proxmox et créer ou éditer le Vault API depuis le terminal.
Modifié
- Francisation de la surface opérateur :
- variables
make; - cibles
make; - groupes d'inventaire ;
- chemins des playbooks maison ;
- libellés du script de gestion d'inventaire.
- variables
- Documentation du flux de déploiement d'une VM clonée depuis le modèle doré avec les commandes
make. - Optimisation de la procédure de bootstrap du modèle Debian 13 pour utiliser Cloud-Init comme source unique de l'identité initiale au lieu de maintenir une création manuelle parallèle du compte et de la clé SSH.
- Simplification de
make cloner-vmetmake creer-vmpour que les paramètres Proxmox communs viennent des variables Ansible plutôt que de la ligne de commande ou de l'environnement. - Ajustement de
make configpour ne plus redemander les valeurs Cloud-Init déjà portées par le modèle Proxmox. - Déplacement du VLAN hors de
make configafin de l'exiger explicitement à chaque création de VM avecVLAN=.... - Retrait des options
DEMANDER_MDPetDEMANDER_SUDOduMakefile; le flux suppose SSH par clé et sudo NOPASSWD déjà fonctionnels. - Retrait des playbooks de couches redondants
playbooks/socle/debian_commun.ymletplaybooks/durcissement/debian_serveur_durcissement.yml; la conformité des VM déployées passe maintenant parplaybooks/groupes/. - Bonification de
AGENTS.mdpour désignerplaybooks/groupes/comme source officielle de conformité et éviter les ciblesmakede couches parallèles. - Simplification de l'aide du
Makefilepour exposer d'abord les gestes opérateur : inventaire, groupes, déploiement. - Clarification de
make aidepour expliquer les différences entrecreer-vm,cloner-vm,deployer,deployer-groupeetappliquer. - Réorganisation de
make aidepar objets d'exploitation : VM, hôtes, groupes, inventaires, modèle et validation. - Retrait des commandes opérateur explicites de ping et sudo; ces vérifications sont maintenant implicites dans
deployeretpreparer-modele. - Ajout d'une demande automatique de mot de passe Ansible Vault pour
make cloner-vmetmake creer-vmlorsqu'unproxmox.vault.ymlchiffré est présent. - Amélioration du message d'erreur lorsque
proxmox.vault.ymlne peut pas être chargé. - Ajustement du playbook Proxmox pour laisser apparaître les erreurs API utiles sans masquer entièrement les échecs de clonage.
- Modification de
make deployer HOTE=...pour appliquer les playbooks correspondant aux groupes de l'hôte. - Ajout d'une vérification explicite de la bibliothèque Python
proxmoxeravant les appels API Proxmox. - Retrait de la taille disque clone des paramètres Proxmox persistés afin de ne pas tenter de réduire un disque hérité du modèle.
- Ajout de la validation inventaire/playbooks pour empêcher un groupe opérationnel avec hôtes sans playbook homonyme.
- Ajout du playbook de groupe
serveurs_webcomme point d'ancrage explicite avant l'ajout d'un rôle web. - Ajout d'un catalogue de services pour préparer Keycloak, OpenLDAP, PostgreSQL, Loki, Icinga, Prometheus, Grafana, Forgejo, Sendmail, step-ca, Redis, NGINX, Nextcloud et Collabora.
- Ajout des groupes et playbooks homonymes neutres pour les prochains services centraux et intégrations clientes.
- Documentation de l'ordre d'implémentation recommandé des services selon leurs dépendances et intégrations.
- Ajout d'une nomenclature VM/VMID et distinction entre hôtes planifiés et hôtes actifs dans l'inventaire.
- Ajout d'une interface web locale
make inventaire-uipour éditer et sauvegarder l'inventaire sans lancer de déploiement. - Ajustement de la nomenclature planifiée vers des noms d'hôtes par domaine afin de permettre la cohabitation de plusieurs services sur une même VM.
2026-06-19
Ajouté
- Structure initiale globale du dépôt Set-OPS.
- Playbooks de création du template Debian 13 Proxmox.
- Rôles de base Debian.
- Rôles de durcissement template-safe.
- Playbook de vérification.
- Playbook de nettoyage final avant conversion en template.
2026-06-20
Contexte
- Clarification :
Set-OPSest le dépôt global d’exploitation Ansible de Chezlepro Inc. - Clarification : le template Debian 13 Proxmox est un sous-ensemble du dépôt, pas sa finalité unique.
- Clarification : les services applicatifs spécialisés doivent être installés sur les clones par des playbooks dédiés, pas directement dans le template.
Ajouté
- Ajout des directives renforcées dans
AGENTS.md:- validation Ansible obligatoire ;
- vérification des handlers Ansible ;
- interdiction de déclarer un playbook prêt si
--syntax-checkéchoue ; - préférence pour les correctifs ciblés au lieu des régénérations massives ;
- rappel que
Set-OPSne doit pas être restructuré autour d’un seul besoin ponctuel.
- Ajout d’une logique de 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.
- Ajout d’une couche de durcissement template-safe :
- AppArmor ;
- auditd ;
- fail2ban SSH ;
- unattended-upgrades ;
- journald ;
- sysctl de sécurité ;
- nftables installé et préparé, mais désactivé par défaut dans le template.
- Ajout d’un document d’architecture pour les intégrations futures des VM :
- supervision ;
- métriques ;
- identité ;
- PKI interne ;
- DNS interne.
- Documentation détaillée des ajouts appliqués au modèle doré Debian 13 Proxmox depuis une installation minimale.
- Ajout d'un runbook explicite pour le playbook de préparation du modèle doré Debian 13 Proxmox.
- Ajout d'un runbook manuel précis pour le bootstrap initial de la VM vanille Debian 13 :
- correction des sources APT après installation depuis DVD ;
- installation minimale de
sudo, SSH,cloud-init,cloud-guest-utilsetqemu-guest-agent; - utilisation de Cloud-Init pour injecter le compte
ansible, sa clé SSH, le réseau et le point de bascule vers leMakefile.
- Ajout d'un document de cycle de vie des VM Chezlepro :
- VM vanille ;
- goldenisation ;
- clonage ;
- socle ;
- durcissement ;
- conformité continue.
- Ajout de directives
AGENTS.mdpour la convergence des VM existantes et futures :- cycle de vie des VM ;
- distinction service central et intégration cliente ;
- groupes d'inventaire par intégration ;
- séparation des variables de template, conformité et services.
- Ajout d'un
Makefilecomme interface d'exploitation courante :- validation ;
- syntax-checks ;
- préparation, vérification et nettoyage protégé du template ;
- socle et durcissement des VM Debian.
- Durcissement SSH du template dès la construction :
- accès par clé publique obligatoire ;
- authentification par mot de passe désactivée ;
- forwarding et tunnels SSH désactivés par défaut ;
- limites de tentatives, sessions et démarrages SSH resserrées.
Modifié
- Renforcement attendu de
CLAUDE.mdpour rappeler queAGENTS.mdest la source d’autorité principale. - Clarification du comportement attendu de Claude Code :
- lire l’existant avant modification ;
- vérifier
git status --short; - ne pas faire de régénération massive sans demande explicite ;
- valider les playbooks touchés ;
- signaler les tests non exécutés ;
- mettre à jour
CHANGELOG.mdsi pertinent.
- Migration des variables de rôles vers des préfixes propres à chaque rôle pour respecter
ansible-lint. - Mise à jour de la variable de confirmation du nettoyage final :
template_cleanup_confirm.
- Correction de la structure du
CHANGELOG.mdpour retirer le titre dupliqué. - Simplification ciblée de l'arborescence
roles/:- retrait des doublons non utilisés sous
roles/base/; - retrait des doublons non utilisés sous
roles/security/; - retrait des doublons non utilisés sous
roles/vm_template/.
- retrait des doublons non utilisés sous
- Ajout d'un renvoi depuis la procédure manuelle vers la justification du golden template.
- Séparation documentaire et opérationnelle entre variables de template et variables de conformité.
- Extension du playbook de groupe
playbooks/groupes/serveurs_debian.ymlpour maintenir le socle commun des VM Debian déployées. - Mise à jour de la documentation pour exiger un
ciusercloud-init avec clé publique avant l'exécution d'Ansible. - Déplacement des listes de paquets communes dans les defaults des rôles
common_packagesethardening_packages. - Déplacement des variables de construction du template dans
inventories/lab/group_vars/modeles_vm.yml. - Déplacement des variables de conformité Debian dans
inventories/production/group_vars/serveurs_debian.yml. - Ciblage du playbook de durcissement sur
serveurs_debianau lieu deall. - Renforcement du playbook de vérification du modèle doré.
Corrigé
- Vérification des rôles contenant
notify. - Confirmation des handlers SSH requis dans les rôles concernés :
roles/ssh_baseline/handlers/main.yml;roles/ssh_hardening/handlers/main.yml.
Validé
- Vérification que chaque
notifydu template Debian 13 Proxmox pointe vers un handler existant. - Relance du playbook de préparation du template Debian 13 Proxmox.
- Nettoyage final non lancé.