make fiches : les 68, et la cible qui les regenere

Une preuve a mordu : un script qu aucune cible n appelle est du code mort. Elle
avait raison.

68 fiches generees. Le vide y est une information — la carte de ce qui reste a
faire, tenue a jour toute seule.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
This commit is contained in:
Daniel Allaire 2026-09-14 13:14:01 -04:00
parent a4a8fc6065
commit 1b71884871
68 changed files with 2154 additions and 3 deletions

View file

@ -1054,6 +1054,21 @@ site-appliquer: ## Applique un role aux machines du site — GROUPE=<serveur_ops
ansible-playbook -i scripts/site_inventaire.py "playbooks/groupes/$(GROUPE).yml" \ ansible-playbook -i scripts/site_inventaire.py "playbooks/groupes/$(GROUPE).yml" \
"$${supp[@]}" $(ARGS) "$${supp[@]}" $(ARGS)
.PHONY: fiches
fiches: ## Regenere la fiche de chaque role (docs/roles/) — ROLE=<nom> pour une seule
@# CHAQUE ROLE DECLARE DEJA CE QU'IL FAUDRAIT DESSINER. La fiche ne fait que le lire :
@# `meta/flux.yml` (qui lui parle), `supervision.yml` (quel verdict il rend),
@# `metriques.yml` (quelles series il expose), `empreinte.yml` (ce qu'il coute),
@# `authentification.yml` (qui entre). Chaque ligne porte la RAISON declaree.
@#
@# GENEREES, JAMAIS ECRITES. Soixante-huit pages faites a la main seraient perimees
@# avant la fin du mois — c'est « une liste qui suit une autre prend du retard », et
@# une soixante-neuvieme liste ne ferait pas exception.
@#
@# UNE SECTION VIDE EST UNE INFORMATION : un role sans sonde l'affiche, et l'ensemble
@# devient la carte de ce qui reste a faire, tenue a jour toute seule.
python3 scripts/fiche_role.py $(ROLE)
.PHONY: site-deployer-tout .PHONY: site-deployer-tout
site-deployer-tout: ansible-runtime ## Deploie TOUT le site dans l'ordre des couches — CONFIRMER=true site-deployer-tout: ansible-runtime ## Deploie TOUT le site dans l'ordre des couches — CONFIRMER=true
@# LE SITE AVAIT L'ORCHESTRATION, PAS LE MOYEN DE LA LANCER (2026-09-14). @# LE SITE AVAIT L'ORCHESTRATION, PAS LE MOYEN DE LA LANCER (2026-09-14).

View file

@ -7,7 +7,7 @@
> [`docs/audit/affirmations.md`](affirmations.md). > [`docs/audit/affirmations.md`](affirmations.md).
- **Instance** : `/home/danallaire/Espace Chezlepro/DépôtsSurForge/Set-OPS-public/instance` — inventaire `/home/danallaire/Espace Chezlepro/DépôtsSurForge/Set-OPS-public/instance/inventories/principal/hosts.yml` - **Instance** : `/home/danallaire/Espace Chezlepro/DépôtsSurForge/Set-OPS-public/instance` — inventaire `/home/danallaire/Espace Chezlepro/DépôtsSurForge/Set-OPS-public/instance/inventories/principal/hosts.yml`
- **Verdict** : ❌ NON CONFORME (73 OK · 1 echec · 1 saute) - **Verdict** : ✅ CONFORME (74 OK · 0 echec · 1 saute)
## Preuves ## Preuves
@ -43,10 +43,10 @@
| P28 | Pools Proxmox : un par tenant, sans collision | AFF-110 | ✅ OK | CONFORME : 5 pool(s) Proxmox, 44 VM placee(s), aucun nom ni VMID en collision. | | P28 | Pools Proxmox : un par tenant, sans collision | AFF-110 | ✅ OK | CONFORME : 5 pool(s) Proxmox, 44 VM placee(s), aucun nom ni VMID en collision. |
| P29 | Authentification : chaque role declare sa position | AFF-111 | ✅ OK | 33 role(s) serveur declares (interne-sans-auth 2, ldap-direct 2, sans-auth-humaine 22, socle-identite 2, web-sso 5) ; 2 lacune(s) nommee(s) : serveur_loki, serv | | P29 | Authentification : chaque role declare sa position | AFF-111 | ✅ OK | 33 role(s) serveur declares (interne-sans-auth 2, ldap-direct 2, sans-auth-humaine 22, socle-identite 2, web-sso 5) ; 2 lacune(s) nommee(s) : serveur_loki, serv |
| P30 | SDN EVPN : zones, VNets et sous-reseaux derives | AFF-112 | ✅ OK | CONFORME : SDN EVPN, 3 zone(s), 15 VNet(s), 15 sous-reseau(x), aucune collision. | | P30 | SDN EVPN : zones, VNets et sous-reseaux derives | AFF-112 | ✅ OK | CONFORME : SDN EVPN, 3 zone(s), 15 VNet(s), 15 sous-reseau(x), aucune collision. |
| P31 | Documentation : tout ce que le depot FAIT est nomme | — | ❌ ECHEC | 1 script(s) qu'aucune cible ni aucun outil n'atteint : fiche_role.py | | P31 | Documentation : tout ce que le depot FAIT est nomme | — | ✅ OK | 66 scripts expliques et atteignables, 123 cibles make documentees, 68 roles avec README. |
| P32 | Intrants exiges par les roles : tous fournis | — | ✅ OK | CONFORME : 38 exigence(s) de role, toutes satisfaites (149 cle(s) declaree(s) par l'instance). | | P32 | Intrants exiges par les roles : tous fournis | — | ✅ OK | CONFORME : 38 exigence(s) de role, toutes satisfaites (149 cle(s) declaree(s) par l'instance). |
| P33 | Aucune collision de port entre roles co-localises | — | ✅ OK | CONFORME : 35 revendication(s) de port, aucune collision entre roles co-localises (36 groupes). | | P33 | Aucune collision de port entre roles co-localises | — | ✅ OK | CONFORME : 35 revendication(s) de port, aucune collision entre roles co-localises (36 groupes). |
| P34 | Chaque document declare son lecteur | — | ✅ OK | 46 document(s) declarent leur lecteur (42 genere(s) exempte(s)). | | P34 | Chaque document declare son lecteur | — | ✅ OK | 46 document(s) declarent leur lecteur (108 genere(s) exempte(s)). |
| P35 | Toute application exigeant une base en a une au plan | — | ✅ OK | 5 application(s) exigeant une base l'ont toutes (4 entree(s) au registre). | | P35 | Toute application exigeant une base en a une au plan | — | ✅ OK | 5 application(s) exigeant une base l'ont toutes (4 entree(s) au registre). |
| P36 | Tout detenteur d'etat porte une sauvegarde | — | ✅ OK | 9 hote(s) de l'ecosysteme et 3 du site detiennent de l'etat, tous porteurs de `client_backup` (9 groupe(s) au catalogue). | | P36 | Tout detenteur d'etat porte une sauvegarde | — | ✅ OK | 9 hote(s) de l'ecosysteme et 3 du site detiennent de l'etat, tous porteurs de `client_backup` (9 groupe(s) au catalogue). |
| P37 | Le placement du tenant existe chez son hebergeur | — | ✅ OK | placement confronte a l'hebergeur monte (SITE-Chezlepro) : noeud, stockage, pont — tous offerts. | | P37 | Le placement du tenant existe chez son hebergeur | — | ✅ OK | placement confronte a l'hebergeur monte (SITE-Chezlepro) : noeud, stockage, pont — tous offerts. |

View file

@ -0,0 +1,29 @@
# Rôle `amorcage_acces`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>acces</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/apparmor.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `apparmor`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>apparmor</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/auditd.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `auditd`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>auditd</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/chrony.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `chrony`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>chrony</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `client_artefacts`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>artefacts</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `client_backup`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>backup</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 64 Mo, 2 Go.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,35 @@
# Rôle `client_journal`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>journal</b>"]
E0["localhost"] -->|"12346 · clair"| R
R -.->|"sonde « journaux »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `12346` | `localhost` | clair | Interface de diagnostic locale d'Alloy — port declare pour rendre les collisions visibles. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `journaux` | 5400 s | Les journaux de cette machine partent-ils vraiment vers Loki ? Alloy peut tourner, se declarer pret, et jeter chaque ligne faute de pouvoir joindre le collecteur. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,35 @@
# Rôle `client_metrique`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>metrique</b>"]
E0["prometheus"] -->|"9100 · tls"| R
R -.->|"sonde « metriques »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `9100` | `serveur_prometheus` | tls | Scrape des métriques par Prometheus (node_exporter en HTTPS). |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `metriques` | 5400 s | Cette machine offre-t-elle vraiment ses metriques ? Un node_exporter actif mais muet — ou dont un collecteur ATTENDU s'est mis a echouer — laisse Prometheus collecter du vide sans que rien ne le dise. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

32
docs/roles/client_pki.md Normal file
View file

@ -0,0 +1,32 @@
# Rôle `client_pki`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>pki</b>"]
R -.->|"sonde « certificat »"| ICINGA[["Icinga"]]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `certificat` | 5400 s | Le certificat d'hote est-il encore valide assez longtemps, et le service qui le consomme sert-il bien CELUI-LA ? Nos certificats vivent 24 h : un renouvellement arrete ne se voit qu'au lendemain, quand tout ce qui parle TLS tombe ensemble. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `client_resolveur`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>resolveur</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `client_sante`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>sante</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/client_smtp.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `client_smtp`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>smtp</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/cloud_init.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `cloud_init`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>init</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `cloud_init_retrait`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>init_retrait</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `common_packages`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>packages</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/core_dumps.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `core_dumps`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>dumps</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `fail2ban_ssh`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>ssh</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `hardening_packages`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>packages</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `hosts_statiques`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>statiques</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/journald.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `journald`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>journald</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

29
docs/roles/motd.md Normal file
View file

@ -0,0 +1,29 @@
# Rôle `motd`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>motd</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `nftables_baseline`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>baseline</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `paquets_tiers`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>tiers</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `qemu_guest_agent`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>guest_agent</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `resoudre_annuaire`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>annuaire</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `resoudre_base`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>base</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `resoudre_idp`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>idp</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `resoudre_politique_mdp`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>politique_mdp</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,37 @@
# Rôle `serveur_artefacts`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>artefacts</b>"]
E0["flotte"] -->|"3142 · clair"| R
R -.->|"sonde « cache-apt »"| ICINGA[["Icinga"]]
R -.->|"sonde « cache-apt-volume »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `3142` | `flotte` | clair | Toute la flotte prend ses paquets ici. En clair, et c'est correct : l'intégrité d'un dépôt apt vient de ses signatures, qu'apt vérifie de toute façon — un intermédiaire ne peut pas altérer un paquet sans se faire prendre. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `cache-apt` | 5400 s | Le cache d'artefacts repond-il ? S'il se tait, TOUT apt de l'ecosysteme echoue — on agit dans la minute. |
| `cache-apt-volume` | 5400 s | Reste-t-il de la place au cache ? Un cache plein cesse d'ecrire sans se plaindre, et l'echec apparait chez les clients. Verdict distinct de la disponibilite : il appelle un billet, pas un reveil. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 15 Go.
- **Authentification** : `sans-auth-humaine` — Un cache de paquets ne sert que des machines, jamais des humains : il n'expose aucune interface a federer. Ce qu'il sert est PUBLIC par nature -- les depots Debian le sont -- et son integrite ne repose pas sur qui demande, mais sur les signatures que le client verifie. Restreindre QUI peut l'interroger est le travail du pare-feu est-ouest, pas d'une authentification.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_backup`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>backup</b>"]
E0["backup"] -->|"22 · ssh"| R
R -.->|"sonde « depot »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `22` | `client_backup` | ssh | Dépôt restic servi par SSH (utilisateur restreint restic + clé) ; chaque client_backup pousse ses instantanés. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `depot` | 5400 s | Le depot accepte-t-il encore une ecriture ? Il ne juge pas le contenu — chiffre cote client, il ne peut pas l'ouvrir. Il constate que l'endroit prend encore : en lecture seule, plein ou aux droits derives, il refuse tout le monde, et neuf clients rougiront un par un sans designer la cause commune. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 64 Go.
- **Authentification** : `sans-auth-humaine` — Depots restic joints par cle SSH ; aucun humain ne s'y connecte.

View file

@ -0,0 +1,32 @@
# Rôle `serveur_backup_site`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>backup_site</b>"]
E0["site"] -->|"22 · ssh"| R
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `22` | `voisins_site` | ssh | Les écosystèmes de ce site déposent leur état ici tant qu'ils n'ont pas leur propre dépôt. SFTP par un utilisateur restreint, jamais un compte d'administration : le site reçoit des octets chiffrés par restic, il ne peut pas les lire. |
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 0 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Les locataires deposent par SFTP, avec une CLE dediee et un utilisateur restreint — jamais un compte d'administration. Et ce qu'ils deposent est chiffre par restic AVANT de partir : le site heberge leur etat sans pouvoir le lire. C'est ce qui rend ce service mutualisable alors que la voute ne l'est jamais.

View file

@ -0,0 +1,32 @@
# Rôle `serveur_cache_site`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>cache_site</b>"]
E0["site"] -->|"3142 · clair"| R
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `3142` | `voisins_site` | clair | Servir les caches des écosystèmes voisins. Debian n'est ainsi téléchargé qu'une fois pour tout le site, et le cache ne voit que des requêtes AGRÉGÉES — jamais quelle machine installe quoi. |
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 0 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Un cache de paquets ne sert que des machines. Ce qui le protege n'est pas une authentification mais la LISTE de ses pairs : seuls les tenants de ce site le joignent, et la frontiere le fait respecter. Ce qu'il sert est public par nature.

View file

@ -0,0 +1,37 @@
# Rôle `serveur_collabora`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>collabora</b>"]
E0["edge"] -->|"9980 · clair"| R
E1["localhost"] -->|"9980 · clair"| R
R -.->|"sonde « edition »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `9980` | `edge` | clair | Éditeur servi au navigateur via l'edge (WebSocket WOPI ; TLS terminé à l'edge). |
| `9980` | `localhost` | clair | Vérifications WOPI serveur→Collabora depuis Nextcloud co-localisé. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `edition` | 5400 s | L'edition en ligne repond-elle ? `/hosting/discovery` est l'adresse que Nextcloud interroge lui-meme pour savoir quels documents Collabora sait ouvrir. Sans elle, le bouton « ouvrir » cesse de fonctionner pour tout le monde — et Nextcloud reste vert. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 2 cœur(s), 2048 Mo, 10 Go.
- **Authentification** : `sans-auth-humaine` — Expose, mais aucun compte : l'acces est autorise par un jeton WOPI emis par Nextcloud, qui a deja authentifie l'humain.

View file

@ -0,0 +1,42 @@
# Rôle `serveur_debian`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>debian</b>"]
E0["externe"] -->|"22 · ssh"| R
E1["externe"] -->|"frag-needed"| R
E2["flotte"] -->|"22 · ssh"| R
E3["icinga"] -->|"echo-request"| R
R -.->|"sonde « correctifs »"| ICINGA[["Icinga"]]
R -.->|"sonde « horloge »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `22` | `flotte`, `externe` | ssh | Plan de gestion : administration et déploiement Ansible par SSH (inter-nœud ; l'accès depuis l'extérieur est filtré à l'OPNsense). |
| `frag-needed` | `externe` | n-a | ICMP « fragmentation nécessaire » entrant : sans lui, un distant ne peut pas nous demander de réduire nos paquets — les transferts se figent. |
| `echo-request` | `serveur_icinga` | n-a | La supervision verifie que ce noeud repond (hostalive). Sans lui, elle le tient pour mort et supprime ses notifications. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `correctifs` | 5400 s | Des correctifs de securite attendent-ils d'etre appliques, et depuis quand ? Set-OPS desarme les mises a jour automatiques et les applique au deploiement : sans cette mesure, rien ne dit quand le geste est du. |
| `horloge` | 5400 s | L'heure est-elle disciplinee, et par la SOURCE DECLAREE ? Une machine peut etre parfaitement a l'heure en interrogeant quatre serveurs publics — c'est le defaut de Debian, et il a tenu quatorze machines jusqu'au 2026-09-11 sans que rien ne le dise. Mesurer la seule derive laisserait ce retour en arriere invisible. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : `sans-auth-humaine` — Socle du systeme : SSH par cle, aucune interface d'authentification propre.

View file

@ -0,0 +1,39 @@
# Rôle `serveur_dovecot`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>dovecot</b>"]
E0["externe"] -->|"993 · tls-requis"| R
E1["postfix"] -->|"12345 · tls"| R
E2["postfix"] -->|"24 · tls-requis"| R
R -.->|"sonde « boites »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `24` | `serveur_postfix` | tls-requis | Remise LMTP depuis Postfix (edge-mta -> mailstore), en TLS vérifié (lmtp_tls_security_level=verify). |
| `12345` | `serveur_postfix` | tls | Authentification SASL déléguée : Postfix valide les identifiants de soumission contre Dovecot. |
| `993` | `externe` | tls-requis | Accès courriel des utilisateurs (IMAPS). Frontière publique gérée à l'OPNsense. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `boites` | 5400 s | Dovecot repond-il, et sait-il encore RESOUDRE un utilisateur dans l'annuaire ? Un Dovecot dont le lien LDAP est tombe accepte les connexions et refuse toutes les authentifications : le service a l'air debout et plus personne n'entre. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 5 Go.
- **Authentification** : `ldap-direct` — IMAP ne parle pas OIDC. Authentification LDAP directe : le chemin differe, la source est la meme.

View file

@ -0,0 +1,32 @@
# Rôle `serveur_durci`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>durci</b>"]
R -.->|"sonde « audit »"| ICINGA[["Icinga"]]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `audit` | 5400 s | La piste d'audit s'ecrit-elle vraiment ? Des regles armees dans le noyau ne prouvent pas qu'un demon collecte : le 2026-08-30, quinze machines ont eu les deux apparences de la sante sans qu'une seule ligne soit ecrite. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : `sans-auth-humaine` — Role-categorie du durcissement : il ne porte aucune tache et n'expose aucune interface. Le travail est fait par les roles que son playbook applique, chacun avec sa propre declaration.

View file

@ -0,0 +1,32 @@
# Rôle `serveur_forge_site`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>forge_site</b>"]
E0["site"] -->|"443 · tls-requis"| R
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `443` | `voisins_site` | tls-requis | Servir le génome aux écosystèmes de ce site : c'est de cette forge qu'ils clonent leur moteur, leurs modèles et la carte de la fabric (D-81). Sans ce flux, un écosystème neuf ne peut pas se reproduire. |
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 0 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Ce marqueur n'expose aucune interface : l'authentification de la forge elle-meme est celle de `serveur_forgejo`. Ce que ce role ajoute est une LISTE de pairs — seuls les tenants de ce site clonent ici, et la frontiere le fait respecter. Les depots servis par ce chemin sont ceux du genome, publics par nature ; les depots prives gardent l'authentification de la forge.

View file

@ -0,0 +1,38 @@
# Rôle `serveur_forgejo`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>forgejo</b>"]
E0["admin"] -->|"derive · tls"| R
E1["edge"] -->|"3000 · clair"| R
E2["flotte"] -->|"derive · tls"| R
R -.->|"sonde « forge »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `3000` | `edge` | clair | Interface web + Git HTTP derrière un edge : le nginx termine le TLS et parle en clair à la forge. C'est le cas de tout tenant. |
| `derive` | `flotte`, `admin` | tls | Sans edge devant elle — la forge du SITE — elle sert son propre TLS sur le port du schéma (443), avec le certificat de la machine. `derive` parce que le port vient de `serveur_forgejo_http_port` : écrire 3000 en dur ici serait faux pour elle, et rien ne le signalerait puisque ce flux ne traverse pas la frontière. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `forge` | 5400 s | La forge repond-elle a son API, et son depot Git est-il lisible ? Une forge qui sert sa page d'accueil mais ne peut plus lire ses depots est une panne complete pour tout ce qui clone — et elle a l'air en ligne. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 1024 Mo, 20 Go.
- **Authentification** : `web-sso` — Interface humaine exposee ; OAuth2 natif. ENABLE_INTERNAL_SIGNIN ferme aussi l'API en Basic (Forgejo >= 10).

View file

@ -0,0 +1,36 @@
# Rôle `serveur_grafana`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>grafana</b>"]
E0["admin"] -->|"3000 · clair"| R
E1["edge"] -->|"3000 · clair"| R
R -.->|"sonde « tableaux »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `3000` | `edge`, `admin` | clair | Interface web : servie via l'edge la ou il y en a un, joignable depuis le plan d'administration partout — sans quoi un deploiement sans edge n'a plus de console. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `tableaux` | 5400 s | Grafana repond-il, et sa base tient-elle ? Un Grafana dont la base est tombee sert encore sa page de connexion : il a l'air en ligne et ne peut plus rien montrer. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 2 Go.
- **Authentification** : `web-sso` — Interface humaine exposee ; OIDC natif (generic_oauth) vers Keycloak.

View file

@ -0,0 +1,40 @@
# Rôle `serveur_icinga`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>icinga</b>"]
E0["backup"] -->|"5665 · tls-requis"| R
E1["debian"] -->|"5665 · tls-requis"| R
E2["localhost"] -->|"5665 · clair"| R
R -.->|"sonde « moteur »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `5665` | `localhost` | clair | API Icinga 2 consommée en local par Icinga Web 2 co-localisé. |
| `5665` | `client_backup` | tls-requis | Rapport passif de chaque detenteur d'etat sur SON depot distant : le depot du site heberge du chiffre et ne peut pas le juger. |
| `5665` | `serveur_backup` | tls-requis | Le depot de sauvegarde depose ses resultats passifs (portee : process-check-result sur « sauvegarde: * »). |
| `5665` | `serveur_debian` | tls-requis | Rapport passif de sante de chaque noeud (unites systemd en echec). |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `moteur` | 5400 s | L'etat des controles arrive-t-il encore jusqu'a la base ? On ne mesure ni le service ni le port : on mesure la FRAICHEUR de ce que la base contient. Un moteur vert dont la synchronisation est tombee affiche eternellement le dernier etat connu — une supervision figee qui a l'air d'aller bien. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 2 cœur(s), 1024 Mo, 10 Go.
- **Authentification** : `sans-auth-humaine` — Coeur de supervision, sans interface : l'UI est serveur_icingaweb2.

View file

@ -0,0 +1,32 @@
# Rôle `serveur_icingaweb2`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>icingaweb2</b>"]
E0["edge"] -->|"8080 · clair"| R
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `8080` | `edge` | clair | Interface web servie via l'edge (TLS terminé à l'edge ; SSO possible via oauth2-proxy). |
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 3 Go.
- **Authentification** : `web-sso` — Pas d'OIDC natif : la passerelle oauth2-proxy porte l'authentification et transmet l'identite en en-tete. L'hote n'est pas expose directement.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_keycloak`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>keycloak</b>"]
E0["edge"] -->|"8080 · clair"| R
R -.->|"sonde « identite »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `8080` | `edge` | clair | Console et endpoints OIDC servis au navigateur et aux applications via l'edge (TLS terminé à l'edge). |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `identite` | 5400 s | Le realm sert-il encore sa decouverte OIDC ? C'est la porte par laquelle tout le SSO de l'ecosysteme entre. Un Keycloak debout dont le realm n'a pas charge repond sur son port et refuse toute connexion — sans rien dire. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 2 cœur(s), 1536 Mo, 5 Go.
- **Authentification** : `socle-identite` — EST le fournisseur d'identite : il ne peut pas deleguer son authentification a lui-meme. Son administrateur local est, par construction, l'avant-dernier maillon avant sudo.

View file

@ -0,0 +1,43 @@
# Rôle `serveur_loki`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>loki</b>"]
E0["fabric"] -->|"1514 · clair"| R
E1["fabric"] -->|"3100 · tls"| R
E2["journal"] -->|"3100 · tls"| R
E3["localhost"] -->|"3100 · clair"| R
R -.->|"sonde « ingestion »"| ICINGA[["Icinga"]]
R -.->|"sonde « journaux-frontiere »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `3100` | `client_journal` | tls | Réception des journaux poussés par Alloy (client_journal) en HTTPS (http_tls_config, cert step-ca). |
| `3100` | `localhost` | clair | Requêtes de Grafana co-localisé (datasource Loki en localhost). |
| `3100` | `fabric` | tls | Journaux des hyperviseurs. La machine qui PORTE les VM ecrivait ses journaux nulle part ailleurs que sur son propre disque — invisibles le jour ou c'est elle qui casse. |
| `1514` | `fabric` | clair | Journaux de la frontiere. Elle n'accueille aucun agent et n'emet que du syslog ; sans ce flux, le seul equipement qui voit passer TOUT le trafic n'ecrit nulle part. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `ingestion` | 5400 s | Loki est-il PRET a ingerer ? Un Loki qui ecoute mais dont l'ingesteur n'est pas pret accepte les connexions et perd les journaux — la panne se voit des semaines plus tard, quand on cherche une trace qui n'a jamais ete ecrite. |
| `journaux-frontiere` | 5400 s | La frontiere journalise-t-elle encore ? Sa destination syslog a deja pointe une VM rasee : toute la journalisation d'OPNsense s'est arretee dix jours sans que rien ne le signale. Un equipement muet ne se plaint pas — on demande donc a Loki ce qu'il a RECU, pas a la frontiere ce qu'elle croit avoir envoye. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 1024 Mo, 20 Go.
- **Authentification** : `interne-sans-auth` — API HTTP sans authentification, joignable DANS le tenant. Non exposee au plan. Consommee par Grafana, pas par un humain — mais rien ne l'empeche.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_nextcloud`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>nextcloud</b>"]
E0["edge"] -->|"80 · clair"| R
R -.->|"sonde « collaboration »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `80` | `edge` | clair | Interface web servie via l'edge (TLS terminé à l'edge). |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `collaboration` | 5400 s | Nextcloud est-il installe, hors maintenance et sans migration en attente ? Ces trois etats se lisent d'un coup dans `status.php`, et chacun rend le service inutilisable sans que la page d'accueil cesse de repondre. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 2 cœur(s), 2048 Mo, 20 Go.
- **Authentification** : `web-sso` — Interface humaine exposee ; app user_oidc. `hide_login_form` MASQUE seulement : `?direct=1` reste le chemin de secours documente par l'amont.

View file

@ -0,0 +1,41 @@
# Rôle `serveur_nginx`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>nginx</b>"]
E0["admin"] -->|"443 · tls-requis"| R
E1["externe"] -->|"443 · tls-requis"| R
E2["externe"] -->|"80 · clair"| R
E3["flotte"] -->|"443 · tls-requis"| R
R -.->|"sonde « edge »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `80` | `externe` | clair | HTTP entrant — redirection permanente vers HTTPS. |
| `443` | `externe` | tls-requis | HTTPS entrant — services exposés (terminaison TLS à l'edge). |
| `443` | `flotte` | tls-requis | HTTPS depuis le tenant : les FQDN publiés vivent à l'edge (découverte OIDC, appels inter-services par nom). |
| `443` | `admin` | tls-requis | HTTPS depuis le reseau d'administration : l'exploitant administre les services par leur interface web, servie par l'edge. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `edge` | 5400 s | L'edge ecoute-t-il, et sa configuration est-elle encore valide ? Un nginx dont la configuration est cassee continue de servir l'ANCIENNE tant qu'on ne le recharge pas : il fonctionne, et le prochain redemarrage le tuera. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 3 Go.
- **Authentification** : `sans-auth-humaine` — Frontal HTTP : il sert et relaie, il n'authentifie pas d'humain.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_oauth2_proxy`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>oauth2_proxy</b>"]
E0["edge"] -->|"4180 · clair"| R
R -.->|"sonde « passerelle »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `4180` | `edge` | clair | Point d'entrée SSO servi via l'edge (TLS terminé à l'edge) devant l'application protégée. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `passerelle` | 5400 s | La passerelle d'authentification repond-elle ? Elle porte l'acces aux applications sans SSO natif — la supervision la premiere. Quand elle meurt, les services derriere restent debout et deviennent injoignables : on cherche la panne du mauvais cote. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 128 Mo, 1 Go.
- **Authentification** : `web-sso` — C'EST la passerelle SSO generique. Elle n'a pas de compte propre : sans elle, l'amont n'est joignable qu'en local.

View file

@ -0,0 +1,40 @@
# Rôle `serveur_openldap`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>openldap</b>"]
E0["dovecot"] -->|"636 · tls-requis"| R
E1["flotte"] -->|"389 · starttls"| R
E2["icingaweb2"] -->|"636 · tls-requis"| R
E3["keycloak"] -->|"636 · tls-requis"| R
E4["postfix"] -->|"636 · tls-requis"| R
R -.->|"sonde « annuaire »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `636` | `serveur_keycloak`, `serveur_dovecot`, `serveur_icingaweb2`, `serveur_postfix` | tls-requis | LDAPS : fédération (Keycloak), userdb courriel (Dovecot), auth web (Icinga Web 2), tables virtuelles (Postfix). |
| `389` | `flotte` | starttls | LDAP + STARTTLS pour les clients internes qui préfèrent la mise à niveau TLS sur 389. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `annuaire` | 5400 s | L'annuaire repond-il, et contient-il encore ses entrees ? Un annuaire vide repond parfaitement a toutes les requetes — et plus personne ne s'authentifie nulle part. C'est le meme mensonge qu'une sauvegarde vide. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 3 Go.
- **Authentification** : `socle-identite` — EST la source de verite des comptes. Son cn=admin est la racine de la chaine de secours : si LDAP tombe, plus rien n'authentifie.

32
docs/roles/serveur_ops.md Normal file
View file

@ -0,0 +1,32 @@
# Rôle `serveur_ops`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>ops</b>"]
R -.->|"sonde « runner »"| ICINGA[["Icinga"]]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `runner` | 5400 s | Le poste d'exploitation peut-il encore agir ? Deux choses : ses depots sont-ils PROPRES et sur leur branche (une modification locale fait diverger le runner du depot que tout le monde lit), et Ansible repond-il dans son venv. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 2 cœur(s), 2048 Mo, 20 Go.
- **Authentification** : `sans-auth-humaine` — Le poste d'exploitation n'expose aucune interface : il n'est ni serveur web ni service reseau, et rien ne s'y connecte. On y entre par SSH sur l'hote, comme sur n'importe quelle machine de la flotte, puis l'on devient l'utilisateur d'exploitation. Il n'y a donc rien a federer, et rien a fermer.

View file

@ -0,0 +1,29 @@
# Rôle `serveur_ops_site`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>ops_site</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 0 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Ce role n'expose aucune interface : il DETIENT un pouvoir au lieu d'en offrir un. Ce qui le protege n'est pas une authentification mais le fait que la voute deposee reste CHIFFREE et que son mot de passe soit tape a l'execution, jamais stocke.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_ops_tenant`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>ops_tenant</b>"]
E0["site"] -->|"22 · ssh"| R
R -.->|"sonde « voute »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `22` | `runner_site` | ssh | Insémination : le runner du SITE amorce ce runner-ci — socle, moteur, plan, plancher de résolution — jusqu'à ce qu'un humain lui remette sa voûte. Vers cette machine seule, jamais vers le reste de l'écosystème. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `voute` | 5400 s | La voute de l'ecosysteme est-elle presente ET CHIFFREE la ou le runner la lit ? Une voute en clair sur un runner est la fuite la plus discrete qui soit : rien ne casse, tout continue de fonctionner, et les secrets sont lisibles par quiconque accede a la machine. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 0 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Ce role n'expose aucune interface : il DETIENT un pouvoir au lieu d'en offrir un. Ce qui le protege n'est pas une authentification mais le fait que la voute deposee reste CHIFFREE et que son mot de passe soit tape a l'execution, jamais stocke.

View file

@ -0,0 +1,38 @@
# Rôle `serveur_postfix`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>postfix</b>"]
E0["externe"] -->|"25 · starttls"| R
E1["flotte"] -->|"587 · starttls"| R
E2["smtp"] -->|"25 · starttls"| R
R -.->|"sonde « file-courriel »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `25` | `externe`, `client_smtp` | starttls | SMTP entrant : courrier externe (MX) et notifications internes (client_smtp). |
| `587` | `flotte` | starttls | Soumission authentifiée (submission) pour les agents internes qui envoient du courrier. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `file-courriel` | 5400 s | Combien de courriels attendent dans la file ? Une file qui monte est le premier signe d'une remise qui ne se fait plus — et c'est un signe qu'on voit AVANT que quiconque se plaigne de ne rien recevoir. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 3 Go.
- **Authentification** : `ldap-direct` — SMTP ne parle pas OIDC. Consultation LDAP pour les identites et la remise.

View file

@ -0,0 +1,36 @@
# Rôle `serveur_powerdns`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>powerdns</b>"]
E0["flotte"] -->|"derive · clair"| R
R -.->|"sonde « zones »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `derive` | `flotte` | clair | Zone souveraine. 53 seul sur son hôte, 5300 sur la loopback derrière le résolveur. |
| `derive` | `flotte` | clair | Idem en TCP (réponses volumineuses, AXFR restreint par allow_axfr_ips). |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `zones` | 5400 s | L'autoritatif repond-il, et sert-il encore ses zones ? Un PowerDNS qui a perdu ses zones repond NXDOMAIN a tout : la resolution interne s'effondre pendant que le service a l'air parfaitement vivant. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 2 Go.
- **Authentification** : `sans-auth-humaine` — DNS autoritatif ; l'API est joignable en local avec une cle, pas par un humain.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_prometheus`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>prometheus</b>"]
E0["localhost"] -->|"9090 · clair"| R
R -.->|"sonde « collecte »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `9090` | `localhost` | clair | Console Prometheus consommée en local par Grafana co-localisé (pas d'exposition inter-nœud). |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `collecte` | 5400 s | Toutes les cibles declarees sont-elles reellement collectees ? C'est la seule sonde qui voit le cas SILENCIEUX : un noeud qui a cesse d'etre scrape ne peut pas s'en plaindre lui-meme, par definition. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 1024 Mo, 20 Go.
- **Authentification** : `interne-sans-auth` — Interface web sans authentification, joignable DANS le tenant. Non exposee au plan (aucun `expose`). Lacune connue : oauth2-proxy s'appliquerait, comme devant Icinga Web 2.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_redis`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>redis</b>"]
E0["localhost"] -->|"6379 · clair"| R
R -.->|"sonde « cache »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `6379` | `localhost` | clair | Cache/verrous consommés uniquement par l'application co-localisée (ex. Nextcloud). Aucune exposition inter-nœud. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `cache` | 5400 s | Le cache repond-il, et sert-il encore ? Un Redis borne ne tombe pas quand il est plein — il evicte. Les sessions se perdent une a une, les gens sont deconnectes au hasard, et le service reste vert : la panne se presente comme un defaut d'application. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 512 Mo, 2 Go.
- **Authentification** : `sans-auth-humaine` — Cache local, secret en voute ; pas d'humain.

View file

@ -0,0 +1,36 @@
# Rôle `serveur_resolveur`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>resolveur</b>"]
E0["flotte"] -->|"53 · clair"| R
R -.->|"sonde « resolution »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `53` | `flotte` | clair | Toute la flotte du tenant résout ici — et nulle part ailleurs. |
| `53` | `flotte` | clair | Réponses longues et bascule TCP, obligatoires en DNS. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `resolution` | 5400 s | Le resolveur repond-il POUR LA ZONE INTERNE ET pour un nom de l'Internet ? Les deux voies sont distinctes : la zone interne vient de l'autoritatif local, le reste de la recursion. Une seule qui tombe casse la moitie de l'ecosysteme, et l'autre moitie continue de dire que tout va bien. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 64 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Un resolveur DNS ne sert que des machines et n'expose aucune interface humaine. Ce qui le protege n'est pas une authentification mais sa LISTE D'ACCES : il ne repond qu'au supernet du tenant. Un resolveur ouvert au monde serait un relais d'amplification, pas un service mal authentifie.

View file

@ -0,0 +1,33 @@
# Rôle `serveur_resolveur_site`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>resolveur_site</b>"]
E0["site"] -->|"53 · clair"| R
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `53` | `voisins_site` | clair | Les écosystèmes de ce site résolvent ici tant qu'ils n'ont pas leur propre résolveur. `client_resolveur` les bascule chez eux dès qu'il existe ; retirer cet emprunt est alors une émancipation. |
| `53` | `voisins_site` | clair | Réponses longues et bascule TCP, obligatoires en DNS. |
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 0 cœur(s), 0 Mo, 0 Go.
- **Authentification** : `sans-auth-humaine` — Un resolveur ne sert que des machines. Ce qui le protege n'est pas une authentification mais sa LISTE D'AUTORISATION : seuls les supernets des tenants de ce site l'interrogent, et la frontiere le fait respecter. Un resolveur ouvert au monde serait un relais d'amplification — c'est ce risque-la que l'ACL couvre, pas un secret.

View file

@ -0,0 +1,37 @@
# Rôle `serveur_rspamd`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>rspamd</b>"]
E0["localhost"] -->|"11332 · clair"| R
E1["localhost"] -->|"11334 · clair"| R
R -.->|"sonde « filtrage »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `11332` | `localhost` | clair | Protocole milter consommé par Postfix co-localisé (analyse + signature DKIM). Local uniquement. |
| `11334` | `localhost` | clair | Interface de contrôle rspamd (statistiques, apprentissage) en local. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `filtrage` | 5400 s | Le filtrage du courrier repond-il ? Un filtre muet ne bloque pas le courrier, il le laisse passer : Postfix sans verdict delivre sans filtrer ou differe, et le service de courriel a l'air sain pendant que le pourriel entre. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 1024 Mo, 4 Go.
- **Authentification** : `sans-auth-humaine` — Filtrage courriel ; l'IHM de contrôle n'est pas activee.

View file

@ -0,0 +1,35 @@
# Rôle `serveur_step_ca`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>step_ca</b>"]
E0["flotte"] -->|"8443 · tls-requis"| R
R -.->|"sonde « autorite »"| ICINGA[["Icinga"]]
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `8443` | `flotte` | tls-requis | ACME + API step-ca : chaque nœud (client_pki) émet/renouvelle ses certificats et récupère la racine. |
## Ce qu'il rend à la supervision
| sonde | TTL | ce qu'elle voit |
|---|---|---|
| `autorite` | 5400 s | L'autorite de certification repond-elle ? C'est la sonde la plus urgente de l'ecosysteme : nos certificats vivent 24 h. Une AC muette ne casse rien aujourd'hui — elle casse TOUT demain, d'un coup, sur les vingt-et-une machines a la fois. |
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 256 Mo, 2 Go.
- **Authentification** : `sans-auth-humaine` — AC interne : les hotes s'enrolent par jeton de provisionneur, pas par compte.

View file

@ -0,0 +1,32 @@
# Rôle `serveur_web_dorsal`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>web_dorsal</b>"]
E0["edge"] -->|"80 · clair"| R
```
## Qui lui parle
| port | depuis | chiffrement | pourquoi |
|---|---|---|---|
| `80` | `edge` | clair | Front nginx local des webapps, proxie par l'edge (TLS termine a l'edge). |
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : 1 cœur(s), 1024 Mo, 10 Go.
- **Authentification** : `sans-auth-humaine` — Execute l'application du tenant ; l'authentification appartient a cette application.

View file

@ -0,0 +1,29 @@
# Rôle `ssh_baseline`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>baseline</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `ssh_hardening`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>hardening</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `sudo_ansible`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>ansible</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `sysctl_hardening`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>hardening</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `systemd_ssh_auto`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>ssh_auto</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `template_cleanup`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>cleanup</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.

View file

@ -0,0 +1,29 @@
# Rôle `unattended_upgrades`
> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle.
> Ne pas éditer à la main : corriger la déclaration, puis régénérer.
> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte.
```mermaid
graph LR
R["<b>upgrades</b>"]
```
## Qui lui parle
*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.*
## Ce qu'il rend à la supervision
*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.*
## Ce qu'il expose en séries
*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.*
## Ce qu'il coûte, et qui entre
- **Empreinte** : non déclarée.
- **Authentification** : non déclarée.