Decouplage moteur/instance Phase 2a : sortir le plan
Les 5 registres (serveurs/applications/bases-donnees/domaines/nomenclature) quittent docs/ pour instance/plan/. Localisation : - scripts : variable d'env SETOPS_INSTANCE (defaut <depot>/instance) ; - roles/playbooks : variable setops_plan_dir (group_vars d'instance). docs/ ne garde que les guides .md + dependances-groupes.yml (moteur). .ansible-lint exclut instance/plan/ (registres de donnees). Non destructif : diff vide, ansible-lint 0 echec, include_vars via setops_plan_dir teste. (Phase 2b : l'inventaire.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ef39f4352f
commit
17f65efb18
22 changed files with 51 additions and 27 deletions
|
|
@ -3,3 +3,4 @@
|
|||
# genere par safe_dump. Les regles yaml d'ansible-lint ne s'y appliquent pas.
|
||||
exclude_paths:
|
||||
- docs/
|
||||
- instance/plan/
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
## 2026-06-23
|
||||
|
||||
### Modifié
|
||||
- **Découpage moteur/instance — Phase 2a : sortir le plan dans `instance/plan/`.** Les 5 registres (`serveurs`, `applications`, `bases-donnees`, `domaines`, `nomenclature`) quittent `docs/` pour `instance/plan/`. Les scripts les localisent via **`SETOPS_INSTANCE`** (variable d'env, défaut `<dépôt>/instance`) ; les rôles/playbooks via **`setops_plan_dir`** (group_vars d'instance). `docs/` ne garde que les guides `.md` + `dependances-groupes.yml` (moteur). `.ansible-lint` exclut `instance/plan/` (registres de données). Non destructif : diff vide, `ansible-lint` 0 échec, `include_vars` via `setops_plan_dir` testé. *(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 moteur **`setops`** (`git mv` + références `src`/`dest`). Un loup ne déploie plus de fichiers marqués « chezlepro ». Cohérence `src ↔ template` vérifiée, `ansible-lint` 0 é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`** (dans `inventories/*/group_vars/all.yml`). Les 13 rôles qui codaient `chezlepro.internal` en dur (zones DNS, FQDN, relais SMTP, AC, etc.) utilisent désormais `{{ domaine_interne }}` ; le `base_dn` LDAP et le domaine court sont **dérivés** (`dc={{ domaine_interne.split('.') | join(',dc=') }}` → `dc=chezlepro,dc=internal`, ou `dc=acme,dc=local` pour un autre loup). Comportement **identique** pour Chezlepro (qui pose `domaine_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-lint` 0 échec. *(La marque `chezlepro` sur 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.)*
|
||||
|
||||
|
|
|
|||
|
|
@ -3,3 +3,6 @@ chezlepro_timezone: "America/Toronto"
|
|||
|
||||
# Identite de l'instance : domaine DNS interne (un autre loup met le sien).
|
||||
domaine_interne: "chezlepro.internal"
|
||||
|
||||
# Chemin du plan de l'instance (registres). Phase 3 : ajuster si moteur externe.
|
||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
||||
|
|
|
|||
|
|
@ -4,3 +4,6 @@
|
|||
|
||||
# Identite de l'instance : domaine DNS interne (un autre loup met le sien).
|
||||
domaine_interne: "chezlepro.internal"
|
||||
|
||||
# Chemin du plan de l'instance (registres). Phase 3 : ajuster si moteur externe.
|
||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@
|
|||
ansible.builtin.include_vars:
|
||||
file: "{{ item }}"
|
||||
loop:
|
||||
- "{{ playbook_dir }}/../../docs/applications.yml"
|
||||
- "{{ playbook_dir }}/../../docs/bases-donnees.yml"
|
||||
- "{{ setops_plan_dir }}/applications.yml"
|
||||
- "{{ setops_plan_dir }}/bases-donnees.yml"
|
||||
|
||||
- name: Determiner les applications instanciees sur cet hote
|
||||
ansible.builtin.set_fact:
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@
|
|||
ansible.builtin.include_vars:
|
||||
file: "{{ item }}"
|
||||
loop:
|
||||
- "{{ playbook_dir }}/../../docs/applications.yml"
|
||||
- "{{ playbook_dir }}/../../docs/bases-donnees.yml"
|
||||
- "{{ setops_plan_dir }}/applications.yml"
|
||||
- "{{ setops_plan_dir }}/bases-donnees.yml"
|
||||
|
||||
- name: Determiner les applications instanciees sur cet hote
|
||||
ansible.builtin.set_fact:
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
- name: Charger le registre des bases applicatives
|
||||
ansible.builtin.include_vars:
|
||||
file: "{{ role_path }}/../../docs/bases-donnees.yml"
|
||||
file: "{{ setops_plan_dir }}/bases-donnees.yml"
|
||||
|
||||
- name: Resoudre l'entree de base Forgejo (par consommateur)
|
||||
ansible.builtin.set_fact:
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
- name: Charger le registre des bases applicatives
|
||||
ansible.builtin.include_vars:
|
||||
file: "{{ role_path }}/../../docs/bases-donnees.yml"
|
||||
file: "{{ setops_plan_dir }}/bases-donnees.yml"
|
||||
|
||||
- name: Resoudre l'entree de base Icinga DB (par consommateur)
|
||||
ansible.builtin.set_fact:
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
- name: Charger le registre des bases applicatives
|
||||
ansible.builtin.include_vars:
|
||||
file: "{{ role_path }}/../../docs/bases-donnees.yml"
|
||||
file: "{{ setops_plan_dir }}/bases-donnees.yml"
|
||||
|
||||
- name: Resoudre l'entree de base de donnees Keycloak (par consommateur)
|
||||
ansible.builtin.set_fact:
|
||||
|
|
|
|||
|
|
@ -49,8 +49,8 @@
|
|||
ansible.builtin.include_vars:
|
||||
file: "{{ item }}"
|
||||
loop:
|
||||
- "{{ role_path }}/../../docs/applications.yml"
|
||||
- "{{ role_path }}/../../docs/domaines.yml"
|
||||
- "{{ setops_plan_dir }}/applications.yml"
|
||||
- "{{ setops_plan_dir }}/domaines.yml"
|
||||
when: serveur_nginx_publier_expositions | bool
|
||||
|
||||
- name: Lister les expositions destinees a cet edge
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@
|
|||
|
||||
- name: Charger le registre des bases applicatives
|
||||
ansible.builtin.include_vars:
|
||||
file: "{{ role_path }}/../../docs/bases-donnees.yml"
|
||||
file: "{{ setops_plan_dir }}/bases-donnees.yml"
|
||||
failed_when: false
|
||||
|
||||
- name: Determiner les serveurs BD nommes heberges par ce groupe
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
|
@ -20,9 +22,10 @@ from inventory_rules import (
|
|||
)
|
||||
|
||||
RACINE = Path(__file__).resolve().parents[1]
|
||||
FICHIER = RACINE / "docs/applications.yml"
|
||||
FICHIER_BASES = RACINE / "docs/bases-donnees.yml"
|
||||
FICHIER_DOMAINES = RACINE / "docs/domaines.yml"
|
||||
INSTANCE = Path(os.environ.get("SETOPS_INSTANCE") or (RACINE / "instance"))
|
||||
FICHIER = INSTANCE / "plan/applications.yml"
|
||||
FICHIER_BASES = INSTANCE / "plan/bases-donnees.yml"
|
||||
FICHIER_DOMAINES = INSTANCE / "plan/domaines.yml"
|
||||
INVENTAIRE = RACINE / "inventories/production/hosts.yml"
|
||||
|
||||
# Groupes 'serveurs_*' qui sont des capacites de SOCLE (sur toutes les VM),
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
|
@ -17,8 +19,9 @@ from inventory_rules import (
|
|||
)
|
||||
|
||||
RACINE = Path(__file__).resolve().parents[1]
|
||||
FICHIER = RACINE / "docs/bases-donnees.yml"
|
||||
FICHIER_APPLICATIONS = RACINE / "docs/applications.yml"
|
||||
INSTANCE = Path(os.environ.get("SETOPS_INSTANCE") or (RACINE / "instance"))
|
||||
FICHIER = INSTANCE / "plan/bases-donnees.yml"
|
||||
FICHIER_APPLICATIONS = INSTANCE / "plan/applications.yml"
|
||||
|
||||
|
||||
def ecrire(registre: dict) -> None:
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
|
@ -15,8 +17,9 @@ from inventory_rules import (
|
|||
)
|
||||
|
||||
RACINE = Path(__file__).resolve().parents[1]
|
||||
FICHIER = RACINE / "docs/domaines.yml"
|
||||
FICHIER_APPLICATIONS = RACINE / "docs/applications.yml"
|
||||
INSTANCE = Path(os.environ.get("SETOPS_INSTANCE") or (RACINE / "instance"))
|
||||
FICHIER = INSTANCE / "plan/domaines.yml"
|
||||
FICHIER_APPLICATIONS = INSTANCE / "plan/applications.yml"
|
||||
|
||||
|
||||
def lister(registre: dict, applications: dict) -> None:
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ Derivation :
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
|
|
@ -32,11 +34,12 @@ from inventory_rules import (
|
|||
)
|
||||
|
||||
RACINE = Path(__file__).resolve().parents[1]
|
||||
INSTANCE = Path(os.environ.get("SETOPS_INSTANCE") or (RACINE / "instance"))
|
||||
INVENTAIRE = RACINE / "inventories/production/hosts.yml"
|
||||
GENERE = RACINE / "inventories/production/hosts.genere.yml"
|
||||
FICHIER_SERVEURS = RACINE / "docs/serveurs.yml"
|
||||
FICHIER_APPLICATIONS = RACINE / "docs/applications.yml"
|
||||
FICHIER_NOMENCLATURE = RACINE / "docs/nomenclature.yml"
|
||||
FICHIER_SERVEURS = INSTANCE / "plan/serveurs.yml"
|
||||
FICHIER_APPLICATIONS = INSTANCE / "plan/applications.yml"
|
||||
FICHIER_NOMENCLATURE = INSTANCE / "plan/nomenclature.yml"
|
||||
|
||||
GROUPES_SOCLE = ["serveur_debian", "serveur_durci"]
|
||||
PLACEMENT = [("noeud", "proxmox_noeud"), ("stockage", "proxmox_stockage"),
|
||||
|
|
|
|||
|
|
@ -37,15 +37,16 @@ from inventory_rules import (
|
|||
)
|
||||
|
||||
RACINE = Path(__file__).resolve().parents[1]
|
||||
INSTANCE = Path(os.environ.get("SETOPS_INSTANCE") or (RACINE / "instance"))
|
||||
INVENTAIRE_DEFAUT = RACINE / "inventories/production/hosts.yml"
|
||||
INVENTAIRE_PRODUCTION = (RACINE / "inventories/production/hosts.yml").resolve()
|
||||
DOSSIER_PLAYBOOKS_GROUPES = RACINE / "playbooks/groupes"
|
||||
FICHIER_DEPENDANCES = RACINE / "docs/dependances-groupes.yml"
|
||||
FICHIER_NOMENCLATURE = RACINE / "docs/nomenclature.yml"
|
||||
FICHIER_BASES = RACINE / "docs/bases-donnees.yml"
|
||||
FICHIER_APPLICATIONS = RACINE / "docs/applications.yml"
|
||||
FICHIER_DOMAINES = RACINE / "docs/domaines.yml"
|
||||
FICHIER_SERVEURS = RACINE / "docs/serveurs.yml"
|
||||
FICHIER_NOMENCLATURE = INSTANCE / "plan/nomenclature.yml"
|
||||
FICHIER_BASES = INSTANCE / "plan/bases-donnees.yml"
|
||||
FICHIER_APPLICATIONS = INSTANCE / "plan/applications.yml"
|
||||
FICHIER_DOMAINES = INSTANCE / "plan/domaines.yml"
|
||||
FICHIER_SERVEURS = INSTANCE / "plan/serveurs.yml"
|
||||
|
||||
# Garde-fous des executions (verifier / deployer) depuis l'interface.
|
||||
JETON = secrets.token_urlsafe(18)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ viendra en Phase 3 (make instancier).
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
|
@ -24,8 +26,9 @@ from inventory_rules import (
|
|||
)
|
||||
|
||||
RACINE = Path(__file__).resolve().parents[1]
|
||||
FICHIER = RACINE / "docs/serveurs.yml"
|
||||
FICHIER_NOMENCLATURE = RACINE / "docs/nomenclature.yml"
|
||||
INSTANCE = Path(os.environ.get("SETOPS_INSTANCE") or (RACINE / "instance"))
|
||||
FICHIER = INSTANCE / "plan/serveurs.yml"
|
||||
FICHIER_NOMENCLATURE = INSTANCE / "plan/nomenclature.yml"
|
||||
INVENTAIRE = RACINE / "inventories/production/hosts.yml"
|
||||
|
||||
# Champs de placement / dimensionnement NON derivables (proviennent du plan).
|
||||
|
|
|
|||
Reference in a new issue