Consolider : retirer la cruft (8 dossiers-catégories + 5 échafaudages morts)

Supprimés : roles/{applications,backup,database,identity,monitoring,
proxmox,storage,web}/ (README seuls, taxonomie abandonnée — l'archi est
plate serveur_*/client_*) et les playbooks-échafaudages debug sans rôle
(nextcloud, collabora, client_supervision, web_frontal, web_dorsal).

Aucun host n'utilise ces groupes ; l'intention des capacités futures
reste documentée dans docs/catalogue-services.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-07-03 20:35:47 -04:00
parent b60c5dc963
commit 3c1cd3e90e
15 changed files with 20 additions and 154 deletions

View file

@ -55,16 +55,15 @@ natif. Restent « code non éprouvé » : `serveur_sendmail`.
> (Keycloak derrière le reverse-proxy TLS) n'est pas câblé. Keycloak tourne et s'authentifie, mais
> n'est pas encore fédéré ni exposé. À faire pour clore le SSO.
**Échafaudages** (playbook-ancre `debug` « reste à définir », **sans rôle**) :
`serveur_nextcloud`, `serveur_collabora`, `client_supervision`, `serveur_web_frontal`,
`serveur_web_dorsal`. Les capacités *collaboration* et *couche web applicative* sont câblées
par convention mais pas encore implémentées.
**Cruft retirée (consolidation 2026-07-03).** Supprimés : les 8 dossiers-catégories inertes
(`roles/{applications,backup,database,identity,monitoring,proxmox,storage,web}/`, README seuls,
vestiges d'une taxonomie abandonnée — l'architecture réelle est **plate** `serveur_*` / `client_*`)
et les 5 playbooks-échafaudages `debug` sans rôle (`serveur_nextcloud`, `serveur_collabora`,
`client_supervision`, `serveur_web_frontal`, `serveur_web_dorsal`).
**Rôles-catégories inertes** (dossiers `roles/<x>/` réduits à un `README.md`, jamais câblés) :
`applications`, `backup`, `database`, `identity`, `monitoring`, `proxmox`, `storage`, `web`.
L'architecture réelle est **plate** (`serveur_*` / `client_*`) ; ces dossiers sont des
vestiges d'un regroupement par catégorie abandonné — à supprimer ou réactiver lors d'une
consolidation ultérieure.
**Capacités futures encore à implémenter** (intention, plus de code mort) : *collaboration*
(Nextcloud/Collabora) et *couche web applicative* (frontal/dorsal). Le jour venu, elles se font
en rôles `serveur_*` normaux avec leur playbook de groupe.
## Services centraux

View file

@ -1,10 +0,0 @@
---
- name: Appliquer le groupe client_supervision
hosts: client_supervision
become: true
gather_facts: true
tasks:
- name: Indiquer que l'intégration cliente supervision reste à définir
ansible.builtin.debug:
msg: "Aucun rôle n'est encore associé au groupe client_supervision."

View file

@ -1,10 +0,0 @@
---
- name: Appliquer le groupe serveur_collabora
hosts: serveur_collabora
become: true
gather_facts: true
tasks:
- name: Indiquer que le service Collabora reste à définir
ansible.builtin.debug:
msg: "Aucun rôle n'est encore associé au groupe serveur_collabora."

View file

@ -1,10 +0,0 @@
---
- name: Appliquer le groupe serveur_nextcloud
hosts: serveur_nextcloud
become: true
gather_facts: true
tasks:
- name: Indiquer que le service Nextcloud reste à définir
ansible.builtin.debug:
msg: "Aucun rôle n'est encore associé au groupe serveur_nextcloud."

View file

@ -1,43 +0,0 @@
---
- name: Appliquer le groupe serveur_web_dorsal
hosts: serveur_web_dorsal
become: true
gather_facts: true
pre_tasks:
- name: Vérifier que la cible est Debian
ansible.builtin.assert:
that:
- ansible_facts.distribution == "Debian"
fail_msg: "Ce playbook est prévu pour Debian."
tasks:
# Couche application : une VM dorsale peut porter PLUSIEURS applications.
# On itere donc sur les applications mappees a cet hote (instance/plan/applications.yml),
# chacune resolvant ses bases via son DSN (regle partagee, filter plugin).
- name: Charger les registres applications et bases
ansible.builtin.include_vars:
file: "{{ item }}"
loop:
- "{{ setops_plan_dir }}/applications.yml"
- "{{ setops_plan_dir }}/bases-donnees.yml"
- name: Determiner les applications instanciees sur cet hote
ansible.builtin.set_fact:
applications_hote: "{{ {'applications': applications | default({})} | applications_de_hote(inventory_hostname) }}"
registre_bd: "{{ {'serveurs_bd': serveurs_bd | default({}), 'bases_donnees': bases_donnees | default({})} }}"
- name: Afficher la chaine application -> bases (scaffold ; le deploiement reel s'insere ici)
ansible.builtin.debug:
msg: >-
{{ item.id }} [{{ item.groupe }}] ->
{{ (registre_bd | bases_de_application(item.id, item.groupe, inventory_hostname))
| map(attribute='cle') | list }}
loop: "{{ applications_hote }}"
loop_control:
label: "{{ item.id }}"
- name: Avertir si l'hote ne porte aucune application
ansible.builtin.debug:
msg: "Aucune application declaree sur cet hote (instance/plan/applications.yml). Couche dorsale : API, traitement."
when: applications_hote | length == 0

View file

@ -1,43 +0,0 @@
---
- name: Appliquer le groupe serveur_web_frontal
hosts: serveur_web_frontal
become: true
gather_facts: true
pre_tasks:
- name: Vérifier que la cible est Debian
ansible.builtin.assert:
that:
- ansible_facts.distribution == "Debian"
fail_msg: "Ce playbook est prévu pour Debian."
tasks:
# Couche presentation : une VM frontale peut porter PLUSIEURS applications.
# On itere sur les applications mappees a cet hote (instance/plan/applications.yml),
# chacune resolvant ses bases via son DSN (regle partagee, filter plugin).
- name: Charger les registres applications et bases
ansible.builtin.include_vars:
file: "{{ item }}"
loop:
- "{{ setops_plan_dir }}/applications.yml"
- "{{ setops_plan_dir }}/bases-donnees.yml"
- name: Determiner les applications instanciees sur cet hote
ansible.builtin.set_fact:
applications_hote: "{{ {'applications': applications | default({})} | applications_de_hote(inventory_hostname) }}"
registre_bd: "{{ {'serveurs_bd': serveurs_bd | default({}), 'bases_donnees': bases_donnees | default({})} }}"
- name: Afficher la chaine application -> bases (scaffold ; le deploiement reel s'insere ici)
ansible.builtin.debug:
msg: >-
{{ item.id }} [{{ item.groupe }}] ->
{{ (registre_bd | bases_de_application(item.id, item.groupe, inventory_hostname))
| map(attribute='cle') | list }}
loop: "{{ applications_hote }}"
loop_control:
label: "{{ item.id }}"
- name: Avertir si l'hote ne porte aucune application
ansible.builtin.debug:
msg: "Aucune application declaree sur cet hote (instance/plan/applications.yml). Couche presentation, derriere serveur_nginx."
when: applications_hote | length == 0

View file

@ -1,3 +0,0 @@
# applications
Rôles applications : services applicatifs internes.

View file

@ -1,3 +0,0 @@
# backup
Rôles backup : clients, politiques, intégration PBS ou autres.

View file

@ -1,3 +0,0 @@
# database
Rôles database : PostgreSQL, MariaDB, sauvegardes, réplication.

View file

@ -1,3 +0,0 @@
# identity
Rôles identity : IAM, Keycloak, annuaires.

View file

@ -1,3 +0,0 @@
# monitoring
Rôles monitoring : agents, sondes, exporters, alertes.

View file

@ -1,3 +0,0 @@
# proxmox
Rôles Proxmox : opérations hyperviseur, avec prudence.

View file

@ -1,3 +0,0 @@
# storage
Rôles storage : montages, clients NFS/iSCSI, volumes.

View file

@ -1,8 +0,0 @@
# web
Couche applicative web, distincte de l'edge `serveur_nginx`.
- frontaux : présentation web (UI, rendu, assets), groupe `serveur_web_frontal` ;
- dorsaux : application web (API, traitement), groupe `serveur_web_dorsal`.
Le mandataire inverse, la terminaison TLS et le WAF relèvent de `serveur_nginx`, pas de ce rôle.

12
tl.ini Normal file
View file

@ -0,0 +1,12 @@
# ══════════════════════════════════════════════════════════════════════════════
# Inventaire — Technolibre
# ══════════════════════════════════════════════════════════════════════════════
[all:vars]
ansible_user=ansible
ansible_ssh_private_key_file=/home/danallaire/.ssh/id_ed25519_ansible_chezlepro
# ── Hôtes gérés ───────────────────────────────────────────────────────────────
[modeles_vm]
10.10.1.66
10.10.1.10