Commit graph

18 commits

Author SHA1 Message Date
b775b7f99d Neutraliser le moteur pour partage public (100% neutre)
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>
2026-06-24 19:58:00 -04:00
f8e5e4d928 Fermer la couture creer-vm <-> plan (etape 4)
creer-vm HOTE=<hote> ne prend plus qu'un argument : il lit
VMID/IP/CIDR/passerelle/VLAN/stockage/disque/noeud dans l'inventaire
genere (nouvelle sous-commande inventory_host parametres-proxmox), comme
deployer lit ses groupes, et n'ecrit plus dans l'inventaire (plus de
hote-ajouter). Les 3 cibles legacy hote-ajouter/planifier/groupes sont
neutralisees (refus -> plan). Aide + docs alignees. Premier test stdlib
du depot + cible make test, cablee dans make verifier.

Verifie : make verifier exit 0 (4 tests), extraction testee sur
l'inventaire reel + chemins de refus. Clonage reel non execute (Proxmox).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 18:52:04 -04:00
b33e21c0e4 Accueil d'un nouvel hebergeur : QUICKSTART, README reoriente, garde-fou
Avant un test a froid par un sysadmin etranger, on corrige les blocages
d'accueil (mauvaises raisons d'echouer) :

- QUICKSTART.md : parcours lineaire zero -> ecosysteme deploye sur Proxmox
  (modele -> instance -> config -> golden template -> instancier ->
  cloner-vm -> deployer), honnete sur prerequis et seam creation-de-VM.
- README : reoriente "moteur generique pour un hebergeur" (plus "infra
  Chezlepro"), pointeur QUICKSTART.
- Makefile : garde-fou _instance-requise (message utile + liste des
  modeles si l'instance manque, au lieu d'un faux "valide" silencieux) ;
  make aide route vers QUICKSTART.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 11:56:20 -04:00
3b7f3098f2 Decouplage moteur/instance Phase 2b : sortir l'inventaire
L'inventaire (hotes generes, group_vars, vault) quitte inventories/ pour
instance/inventories/. Suivent : ansible.cfg, Makefile (export
SETOPS_INSTANCE ?= instance + chemins derives), scripts (INSTANCE/),
config_proxmox.py, .gitignore. Docs primaires (AGENTS/README/
plan-et-generation/architecture) refletent le layout instance/.

Non destructif : diff vide, ansible-lint 0 echec, make inventaire-verifier
OK. (Docs secondaires a rafraichir ; Phase 3 : deux depots.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 09:16:18 -04:00
ca0f95da28 Mettre les noms de roles et playbooks au singulier
serveurs_* -> serveur_, clients_ -> client_, suffixes pluriels au
singulier (serveur_web_dorsal/frontal, client_metrique, client_journal).

Renommage par tokens exacts : repertoires de roles, playbooks de groupes,
group_vars, variables internes des roles (serveur_nginx_*, conformite
ansible-lint), groupes du plan, constantes de code, docs. Faux-amis
preserves (serveurs_bd, scripts/serveurs.py, fonctions Python). Groupes
d'etat gardes au pluriel (hotes_actifs/planifies, modeles_vm).

Valide : ansible-lint 0 echec (0 var-naming), diff vide de la generation,
node --check, tous les registres. Ajout de .ansible-lint excluant docs/
(registres de donnees, pas du contenu Ansible).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 23:18:52 -04:00
854e324348 Basculer : hosts.yml genere depuis le plan (diff vide)
make instancier-appliquer regenere inventories/production/hosts.yml
depuis le plan (serveurs.yml + applications.yml + nomenclature.yml).
Garde-fou : refuse si le diff n'est pas vide (FORCE=1 pour un changement
intentionnel) ; git est le filet.

Bascule effectuee avec diff vide verifie. hosts.yml est desormais un
artefact genere, semantiquement identique a l'ancien (make
inventaire-verifier complet OK, GUI charge 13 hotes).

NOTE : a ce stade le GUI edite encore hosts.yml directement. Tant que le
rework GUI n'est pas fait, editer le PLAN puis make instancier-appliquer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 22:00:35 -04:00
69dd730b70 Phase 3 : generateur d'inventaire depuis le plan (diff vide prouve)
make instancier genere hosts.genere.yml (gitignore) depuis le plan
(serveurs.yml + applications.yml + nomenclature.yml) et compare
SEMANTIQUEMENT a l'inventaire actuel via ansible-inventory --list.

- scripts/instancier.py : generer + comparer (host vars derives, groupes
  derives = socle + services (applications) + integrations (clients_*) + etat).
- serveurs.py bootstrap capture les clients_* comme 'integrations' par VM.
- inventory_rules : valide 'integrations'.

Resultat : DIFF VIDE -- le plan reproduit exactement les 13 hotes. La
bascule (hosts.yml genere + UI editant le plan) reste NON effectuee :
elle attend une validation explicite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:47:56 -04:00
501ec38ab0 Bootstrap des applications depuis l'inventaire (prerequis Phase 3)
make applications-bootstrap : un groupe serveurs_* (hors socle debian/
durcis) sur un hote = une application. Les entrees existantes (pg-principal,
forge avec port/expose/requiert) sont preservees ; le reste est complete
depuis les appartenances de groupes de l'inventaire.

Resultat : 18 applications couvrant tous les services (multi-applis par VM
preservee : data-01 = postgresql+redis, obs-01 = grafana+loki+prometheus...).
Permettra au generateur de Phase 3 de deriver les groupes -> diff vide.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:41:30 -04:00
1aa3da8de5 Corriger l'erreur de syntaxe JS qui cassait tout le GUI
dessinerServeurs contenait une apostrophe mal echappee (l\\'inventaire)
qui, une fois rendue, terminait prematurement la chaine JS : une seule
erreur de syntaxe fait tomber tout le script -> page inutilisable.
Remplace par l'apostrophe typographique (sans echappement).

Garde-fou : scripts/verifier_gui.py extrait le JS embarque et le passe a
`node --check` (saute si node absent), integre a make inventaire-verifier.
py_compile ne voyait pas le JS ; ce trou est desormais ferme.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:28:52 -04:00
1c96fb0acc Phase 2 : le serveur (VM) entre dans le plan (lecture seule)
Registre docs/serveurs.yml (VM = fonction + etat + placement/taille),
bootstrape depuis l'inventaire qui reste autorite. La derivation
nomenclature (fonction+rang -> VMID/IP/VLAN/passerelle) est portee en
Python (source unique) et reconciliee avec l'inventaire.

- inventory_rules : deriver_nomenclature, fonction_seq, charger/valider/
  reconcilier_serveur.
- scripts/serveurs.py : lister / verifier / bootstrap + cibles make,
  integre a inventaire-verifier.
- GUI : vue Serveurs (lecture seule) plan + derive + statut reconciliation.

Bootstrap : 13 serveurs, tous reconcilies (le derive reproduit exactement
l'inventaire -> diff vide atteignable en Phase 3).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:44:08 -04:00
abd6395a13 Faire de l'application une entite de premiere classe (BD multi-portee)
Une VM peut porter plusieurs applications ; c'est l'application, pas l'hote,
a laquelle une base se lie via son DSN.

- docs/applications.yml : nouveau registre application -> groupe, hote.
- docs/bases-donnees.yml : champ 'portee' (application|groupe|hote, defaut
  groupe). Une application A (groupe G, hote H) recoit les bases ou
  (portee=application ET consommateur=A) OU (portee=groupe ET consommateur=G)
  OU (portee=hote ET consommateur=H). Plusieurs DSN par application.
- inventory_rules.py : charger/valider_applications, applications_de_hote,
  bases_de_application, PORTEES_BD ; valider_bases croise portee=application
  avec le registre des applications.
- CLI : scripts/applications.py + bases_donnees.py --portee ; cibles make
  applications / applications-verifier ; integre a inventaire-verifier.
- GUI : vue Applications (CRUD), portee + consommateur dynamique dans Bases,
  vue Chaine par application (DSN resolus par hote).
- filter_plugins/registres.py : meme regle de resolution exposee a Ansible
  (source unique). Playbooks web_dorsaux/web_frontaux iterent sur les
  applications de l'hote (scaffold ; deploiement applicatif s'y insere).

Services en grappe (keycloak/icingadb/forgejo) restent en portee groupe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:38:30 -04:00
d7938d4c5a Poser le registre des domaines publics (primaire cache)
Registre declaratif docs/domaines.yml pour la publication externe des
hostnames, symetrique de docs/bases-donnees.yml. Modele d'autorite :
primaire cache + secondaires. Le bloc « exposition » est le binding
nom public -> service interne (cible) -> edge, destine a trois
consommateurs (zone publique, vhosts nginx, ACME).

- inventory_rules.py : charger_domaines, valider_domaines,
  fqdn_exposition, expositions_du_groupe, AUTORITES_DNS.
- scripts/domaines.py : CLI miroir (lister / verifier).
- Makefile : cibles domaines / domaines-verifier + validation dans
  inventaire-verifier.

Premiere entree reelle : forge.alliance-boreale.ca -> serveurs_forgejo.
Secondaires, mail et DNSSEC laisses a renseigner (structurel, pas
encore operationnel ; l'interne chezlepro.internal n'est pas touche).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:29:29 -04:00
25d0c73275 Gerer les bases de donnees par chaines de connexion (GUI + CLI)
Registre multi-serveurs (docs/bases-donnees.yml):
- Section serveurs_bd: serveurs de BD nommes (type/hote/port/groupe).
- Chaque base reference un serveur nomme; la chaine de connexion derivee fait
  le lien appli <-> BD. L'hote n'est plus code en dur dans les roles applicatifs.

Regles partagees (scripts/inventory_rules.py):
- charger_bases_donnees, valider_bases, chaine_connexion (GUI et CLI s'appuient dessus).

GUI (make inventaire-ui):
- Vue "Bases": serveurs, bases et chaines de connexion (mot de passe masque),
  gestion complete (ajout/edition/retrait), endpoint POST /api/bases (valide, jeton).

CLI (scripts/bases_donnees.py):
- lister/verifier/ajouter-serveur/ajouter-base/retirer-*; cibles make bases et
  bases-verifier; registre valide dans make inventaire-verifier.

Roles migres: serveurs_postgresql (filtre par serveur nomme relie a son groupe),
serveurs_keycloak / serveurs_forgejo / serveurs_icinga (hote et port depuis le registre).

Valide: ansible-lint (roles migres), node --check (JS), round-trips GUI et CLI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 19:14:12 -04:00
8f6de3ebe2 Construire l'ecosysteme de services et outiller l'inventaire
Registres (source unique):
- docs/nomenclature.yml: domaines, VMID, plan d'adressage 10.1.0.0/16 segmente.
- docs/bases-donnees.yml: bases applicatives (1 appli -> 1 base -> 1 owner -> 1 DSN).

Roles de service:
- Reseau/edge/PKI/mail: nginx, step_ca, sendmail.
- Donnees/identite: postgresql (consommateur du registre BD), redis, openldap, keycloak.
- Observabilite: prometheus, loki, grafana.
- Supervision: icinga (coeur; Icinga Web 2 differe). Forge: forgejo.

Integrations clientes:
- clients_metriques, clients_journaux, clients_pki, clients_ldap, clients_smtp.

Inventaire et outillage:
- make inventaire-ui: refonte (cartes, theme sombre, onglets, vue Chaine VM->groupes->
  playbooks->roles), saisie du provisioning, auto-proposition depuis la nomenclature,
  deploiement securise (verifier/deployer, jeton anti-CSRF, verrou, mot de passe vault),
  robustesse reseau (connexions fermees, favicon).
- Makefile: cible verifier-deploiement; detection d'un group_vars de production chiffre.
- Scission serveurs_web -> serveurs_web_frontaux/dorsaux; migration de l'adressage vers
  10.1.x; retrait des hotes de test; planification des hotes; requirements.yml.

Chaque role valide en --syntax-check et ansible-lint (profil production).
Secrets references depuis Ansible Vault (jamais en clair); roles non testes live.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 18:06:11 -04:00
1d25338d26 Ajouter les dependances causales des groupes 2026-06-21 21:31:03 -04:00
72c3ac6007 Consolider le flux operationnel des inventaires 2026-06-21 20:47:44 -04:00
f941b66d39 Preparer la gestion planifiee des services 2026-06-21 20:35:03 -04:00
61e2c7ca67 Structurer l'exploitation Ansible Chezlepro 2026-06-21 15:13:45 -04:00