This repository has been archived on 2026-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
Set-OPS/docs/nomenclature-vm.md

147 lines
5.4 KiB
Markdown
Raw Permalink Normal View History

# Nomenclature des VM
La nomenclature doit rendre lisible le domaine opérationnel d'une VM sans l'enfermer dans un seul service.
Un hôte peut porter plusieurs groupes Ansible. Le nom de VM doit donc représenter une capacité ou un domaine, pas forcément un produit unique.
## Noms de VM
Format recommandé :
```text
<domaine>-<numero>
```
Exemples :
```text
infra-pki-01
infra-edge-01
infra-mail-01
infra-dns-01
idm-01
data-01
obs-01
mon-01
forge-01
collab-01
web-frontal-01
web-dorsal-01
```
La couche applicative web suit le même format. Le tier est porté par le domaine, au singulier puisqu'il nomme une instance :
```text
web-frontal-01 présentation web (UI, rendu, assets), groupe serveurs_web_frontaux
web-frontal-02
web-dorsal-01 application web (API, traitement), groupe serveurs_web_dorsaux
```
Les anciens noms de test `web-01` et `web-02` sont retirés. Ils ne doivent pas être réutilisés comme noms de production : préférer `web-frontal-NN` et `web-dorsal-NN`.
## Regroupements recommandés
| Hôte | Groupes prévus |
| --- | --- |
| `infra-pki-01` | `serveurs_step_ca` |
| `infra-edge-01` | `serveurs_nginx` |
| `infra-mail-01` | `serveurs_sendmail` |
| `infra-dns-01` | `serveurs_powerdns` |
| `idm-01` | `serveurs_openldap`, `serveurs_keycloak` |
| `data-01` | `serveurs_postgresql`, `serveurs_redis` |
| `obs-01` | `serveurs_prometheus`, `serveurs_loki`, `serveurs_grafana` |
2026-06-21 21:00:42 -04:00
| `mon-01` | `serveurs_icinga` |
| `forge-01` | `serveurs_forgejo` |
| `collab-01` | `serveurs_nextcloud`, `serveurs_collabora` |
| `web-frontal-01`, `web-frontal-02` | `serveurs_web_frontaux` |
| `web-dorsal-01` | `serveurs_web_dorsaux` |
Les groupes restent fins et composables. La cohabitation se fait en associant plusieurs groupes au même hôte.
## Plages VMID
| Plage | Usage |
| --- | --- |
| `91xxx` | fondations transversales : PKI, reverse proxy, SMTP |
| `92xxx` | identité : LDAP, SSO |
| `93xxx` | données et cache : PostgreSQL, Redis |
| `94xxx` | observabilité et supervision |
| `95xxx` | applications internes |
| `99xxx` | modèles, essais initiaux ou exceptions documentées |
## Plan d'adressage interne
Réseau interne unique : `10.1.0.0/16`. Segmentation par fonction, un `/24` et un VLAN par catégorie, **3ᵉ octet = VLAN** (L2 alignée sur L3).
| Catégorie | VLAN | Sous-réseau | Passerelle |
| --- | --- | --- | --- |
| 1 — Fondations / infra | 11 | `10.1.11.0/24` | `10.1.11.1` |
| 2 — Identité | 12 | `10.1.12.0/24` | `10.1.12.1` |
| 3 — Données | 13 | `10.1.13.0/24` | `10.1.13.1` |
| 4 — Observabilité | 14 | `10.1.14.0/24` | `10.1.14.1` |
| 5 — Applications | 15 | `10.1.15.0/24` | `10.1.15.1` |
Adresse d'hôte (4ᵉ octet) : **`service × 10 + NN`**. `.1` = passerelle ; `.2``.9` réservés. Exemple : `web-dorsal-01` (catégorie 5, service 4, NN 01) → `10.1.15.41`.
Tout se dérive du domaine de l'hôte, et la source unique machine-lisible est **`docs/nomenclature.yml`** :
```text
hostname = <domaine>-<NN>
VMID = 9 · catégorie · service · NN
VLAN = catégorie.vlan
IP = 10.1.<vlan>.(service × 10 + NN)
```
`make inventaire-ui` lit ce registre et **propose** automatiquement VMID, VLAN, IP et passerelle quand on nomme un hôte. La sécurité entre zones se fera par règles inter-zones (nftables / edge), pas par l'adressage.
Contrainte : `NN` de 01 à 09 par domaine (l'octet hôte reste dans le bloc du service). Au-delà, ouvrir un nouveau domaine/service dans `docs/nomenclature.yml`.
La segmentation `10.1.0.0/16` remplace l'ancienne plage d'essais `192.168.12.x`.
## Variables de provisioning d'hôte
L'inventaire est la source de vérité du provisioning d'une VM. Ces variables d'hôte sont saisissables via `make inventaire-ui` (ou à la main) et décrivent l'instanciation attendue :
| Variable | Sens | Type |
| --- | --- | --- |
| `ansible_host` | adresse IP | str |
| `proxmox_cidr` | masque réseau en bits (0-32) | int |
| `proxmox_passerelle` | passerelle | str |
| `proxmox_vlan` | tag VLAN (1-4094) | int |
| `proxmox_pont` | pont réseau Proxmox (ex. `vmbr0`) | str |
| `proxmox_dns` | serveurs DNS Cloud-Init (séparés par virgule) | str |
| `proxmox_vmid` | identifiant VM Proxmox | int |
| `proxmox_noeud` | nœud Proxmox cible | str |
| `proxmox_stockage` | stockage du disque | str |
| `proxmox_disque_taille` | taille disque (ex. `32G`) | str |
| `proxmox_memoire` | mémoire en Mo | int |
| `proxmox_coeurs` | nombre de cœurs | int |
Ces valeurs sont renseignées dans l'inventaire ; leur consommation automatique par `make creer-vm` (au lieu des arguments en ligne de commande) est l'étape d'intégration suivante. Une valeur vide n'est pas écrite, pour garder l'inventaire propre.
## Hôtes planifiés
Les hôtes prévus mais non encore déployés sont placés dans `hotes_planifies`.
Les hôtes réellement joignables par Ansible sont placés dans `hotes_actifs`.
Planifier un hôte :
```bash
make hote-planifier HOTE=obs-01 VMID=94101 GROUPES="serveurs_debian serveurs_durcis serveurs_prometheus serveurs_loki"
```
Activer un hôte existant ou déjà cloné :
```bash
make hote-ajouter HOTE=obs-01 VMID=94101 ADRESSE_IP=192.168.12.141 GROUPES="serveurs_debian serveurs_durcis serveurs_prometheus serveurs_loki"
```
Les déploiements groupés limitent automatiquement l'exécution à :
```text
<groupe demandé> & hotes_actifs
```
Cela permet de renseigner l'inventaire complet sans tenter de configurer une VM qui n'existe pas encore.