Catalogue de modeles d'ecosystemes : premier modele presence-web
exemples/modeles/ : instances pretes a deployer (socle + modules + presets). Un hebergeur copie un modele, le renseigne a ses couleurs, instancie. Remplace le demonstrateur jetable. Premier modele : presence-web (socle souverain DNS/PKI/edge/mail + web frontal/dorsal + donnees PG/Redis, 7 VM). Valide par generation : ecosysteme complet et distinct (10.10.x), zero fuite Chezlepro. .ansible-lint exclut exemples/ ; hosts generes ignores. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
7ddc2fedad
commit
5bbbdae4ed
11 changed files with 89 additions and 0 deletions
|
|
@ -4,3 +4,4 @@
|
|||
exclude_paths:
|
||||
- docs/
|
||||
- instance/
|
||||
- exemples/
|
||||
|
|
|
|||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -27,3 +27,4 @@ dist/
|
|||
*.tar
|
||||
*.tar.gz
|
||||
*.zip
|
||||
exemples/modeles/*/inventories/*/hosts*.yml
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
- **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.)*
|
||||
|
||||
### Ajouté
|
||||
- **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). Premier modèle livré et validé : **`presence-web`** (socle + web frontal/dorsal + données PostgreSQL/Redis, 7 VM) — la génération produit un écosystème complet et distinct (IPs `10.10.x`, **zéro fuite Chezlepro**). `.ansible-lint` exclut `exemples/`. 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 dans `AGENTS.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 commandes `make`/CLI et des vues GUI, le flux « éditer le plan → `instancier` → appliquer », les garde-fous. `AGENTS.md` gagne la section « Le plan et la génération de l'inventaire » (règle d'or : `hosts.yml` est généré, ne pas l'éditer). `README.md` : section « Le plan : on édite, l'inventaire se génère » + remplacement du flux legacy `hote-planifier`/`ajouter` par le flux par le plan. Rafraîchissement de `docs/architecture-set-ops.md` (entités du plan), `docs/nomenclature-vm.md` et `docs/catalogue-services.md` ; correction de la terminologie **domaine → fonction** dans la prose (collision avec le DNS levée jusque dans la doc).
|
||||
|
||||
|
|
|
|||
27
exemples/modeles/README.md
Normal file
27
exemples/modeles/README.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Modèles d'écosystèmes numériques
|
||||
|
||||
Des **instances prêtes à déployer** : un hébergeur copie le modèle qui colle à son
|
||||
offre, le renseigne à ses couleurs (ou celles de son client), et instancie.
|
||||
|
||||
## Utilisation
|
||||
```bash
|
||||
cp -r exemples/modeles/<modele> ../mon-instance
|
||||
# éditer mon-instance : domaine_interne, domaines publics, dimensionnement
|
||||
cd <moteur Set-OPS>
|
||||
ln -s ../mon-instance instance # ou export SETOPS_INSTANCE=../mon-instance
|
||||
make instancier-appliquer FORCE=1 # première génération de l'inventaire
|
||||
```
|
||||
|
||||
## Structure : socle + modules
|
||||
Tout modèle part d'un **socle souverain** (DNS interne, AC/PKI, edge TLS, relais
|
||||
courriel) et ajoute des **modules** selon l'offre.
|
||||
|
||||
| Modèle | = socle + | État |
|
||||
| --- | --- | --- |
|
||||
| `socle` | (rien) | à venir |
|
||||
| **`presence-web`** | web (frontal+dorsal) + données (PostgreSQL/Redis) | ✅ |
|
||||
| `forge` | Forgejo + données | à venir |
|
||||
| `identite` | LDAP + Keycloak (SSO) | à venir |
|
||||
| `observabilite` | Prometheus/Loki/Grafana + Icinga | à venir |
|
||||
| `collaboration` | Nextcloud + Collabora | rôles à construire |
|
||||
| `integral` | tout | à venir |
|
||||
9
exemples/modeles/presence-web/README.md
Normal file
9
exemples/modeles/presence-web/README.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Modèle : Présence Web
|
||||
|
||||
Écosystème pour héberger **sites et applications web** : socle souverain (DNS,
|
||||
PKI, edge TLS, relais courriel) + couche web (frontal + dorsal) + données
|
||||
(PostgreSQL + Redis). 7 VM.
|
||||
|
||||
Renseignez : `inventories/production/group_vars/all.yml` (`domaine_interne`),
|
||||
`plan/domaines.yml` (votre domaine public), `plan/nomenclature.yml` (supernet),
|
||||
puis générez l'inventaire (voir `exemples/modeles/README.md`).
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
domaine_interne: "exemple.internal" # <- VOTRE domaine DNS interne
|
||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
||||
10
exemples/modeles/presence-web/plan/applications.yml
Normal file
10
exemples/modeles/presence-web/plan/applications.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
applications:
|
||||
pki: { groupe: serveur_step_ca, hote: infra-pki-01 }
|
||||
edge: { groupe: serveur_nginx, hote: infra-edge-01 }
|
||||
mail: { groupe: serveur_sendmail, hote: infra-mail-01 }
|
||||
dns: { groupe: serveur_powerdns, hote: infra-dns-01 }
|
||||
bdd: { groupe: serveur_postgresql, hote: data-01, port: 5432 }
|
||||
cache: { groupe: serveur_redis, hote: data-01 }
|
||||
frontal: { groupe: serveur_web_frontal, hote: web-frontal-01 }
|
||||
dorsal: { groupe: serveur_web_dorsal, hote: web-dorsal-01 }
|
||||
4
exemples/modeles/presence-web/plan/bases-donnees.yml
Normal file
4
exemples/modeles/presence-web/plan/bases-donnees.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
serveurs_bd:
|
||||
pg-principal: { type: postgres, hote: 10.10.13.11, port: 5432, groupe: serveur_postgresql }
|
||||
bases_donnees: {}
|
||||
7
exemples/modeles/presence-web/plan/domaines.yml
Normal file
7
exemples/modeles/presence-web/plan/domaines.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
domaines_publics:
|
||||
exemple.ca: # <- VOTRE domaine public
|
||||
autorite: primaire-cache
|
||||
edge: serveur_nginx
|
||||
secondaires: []
|
||||
dnssec: false
|
||||
17
exemples/modeles/presence-web/plan/nomenclature.yml
Normal file
17
exemples/modeles/presence-web/plan/nomenclature.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
# Adaptez le supernet à VOTRE réseau interne.
|
||||
supernet: "10.10.0.0/16"
|
||||
cidr_hote: 24
|
||||
reservations: { passerelle: 1, reserve_min: 2, reserve_max: 9 }
|
||||
categories:
|
||||
1: { libelle: "Fondations", vlan: 11, sous_reseau: "10.10.11.0/24", passerelle: "10.10.11.1" }
|
||||
3: { libelle: "Donnees", vlan: 13, sous_reseau: "10.10.13.0/24", passerelle: "10.10.13.1" }
|
||||
5: { libelle: "Applications", vlan: 15, sous_reseau: "10.10.15.0/24", passerelle: "10.10.15.1" }
|
||||
fonctions:
|
||||
infra-pki: { categorie: 1, service: 1 }
|
||||
infra-edge: { categorie: 1, service: 2 }
|
||||
infra-mail: { categorie: 1, service: 3 }
|
||||
infra-dns: { categorie: 1, service: 4 }
|
||||
data: { categorie: 3, service: 1 }
|
||||
web-frontal: { categorie: 5, service: 3 }
|
||||
web-dorsal: { categorie: 5, service: 4 }
|
||||
9
exemples/modeles/presence-web/plan/serveurs.yml
Normal file
9
exemples/modeles/presence-web/plan/serveurs.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
serveurs:
|
||||
infra-pki-01: { fonction: infra-pki, etat: planifie }
|
||||
infra-edge-01: { fonction: infra-edge, etat: planifie }
|
||||
infra-mail-01: { fonction: infra-mail, etat: planifie }
|
||||
infra-dns-01: { fonction: infra-dns, etat: planifie }
|
||||
data-01: { fonction: data, etat: planifie }
|
||||
web-frontal-01: { fonction: web-frontal, etat: planifie }
|
||||
web-dorsal-01: { fonction: web-dorsal, etat: planifie }
|
||||
Reference in a new issue