diff --git a/Makefile b/Makefile index bc64aaf..e7ef39b 100644 --- a/Makefile +++ b/Makefile @@ -100,7 +100,7 @@ aide: @printf '%s\n' ' make creer-vm HOTE=web-frontal-01' @printf '%s\n' ' Cloner seulement, sans passer par le plan:' @printf '%s\n' ' make cloner-vm HOTE=web-frontal-01 VMID=95301 VLAN=15 ADRESSE_IP=10.0.2.31 PASSERELLE=10.0.2.1' - @printf '%s\n' ' Configurer Proxmox et le Vault API:' + @printf '%s\n' ' Configurer Proxmox et le Vault API (parametres: docs/config-proxmox.md):' @printf '%s\n' ' make config' @printf '%s\n' '' @printf '%s\n' 'Hotes' diff --git a/QUICKSTART.md b/QUICKSTART.md index d533239..7ed8a5f 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -43,6 +43,7 @@ Tu peux aussi le faire dans le GUI plus tard (`make inventaire-ui`). ```bash make config # renseigne API host/user/port, nœud, stockage, VMID du template... ``` +Chaque paramètre demandé est expliqué dans [`docs/config-proxmox.md`](docs/config-proxmox.md). Place ton **token API** et tes secrets dans le Vault de l'instance (`instance/inventories/lab/group_vars/proxmox.vault.yml`, à partir du `.example`, chiffré avec `ansible-vault`). Exporte ton mot de passe Vault, ex. : diff --git a/docs/config-proxmox.md b/docs/config-proxmox.md new file mode 100644 index 0000000..62065da --- /dev/null +++ b/docs/config-proxmox.md @@ -0,0 +1,92 @@ +# `make config` — référence des paramètres Proxmox + +`make config` lance `scripts/config_proxmox.py`, l'assistant interactif qui écrit +la connexion au cluster Proxmox et les valeurs de clonage par défaut. Il pose +**16 paramètres non sensibles** puis propose de saisir les **secrets API**. + +- Non sensibles → `instance/inventories/lab/group_vars/proxmox.yml` +- Secrets API → `instance/inventories/lab/group_vars/proxmox.vault.yml` (chiffré + par `ansible-vault`) + +À chaque invite, la valeur courante (ou le défaut) est affichée entre crochets : +**appuyer sur Entrée conserve cette valeur**. On peut donc relancer `make config` +sans tout retaper. + +> Ces paramètres sont des **intrants communs** de l'écosystème (cf. +> [`intrants-communs.md`](intrants-communs.md) §C). L'accès au cluster et le golden +> template sont des **constantes** ; le placement par défaut est **surchargeable +> par hôte** dans `instance/plan/serveurs.yml`. + +--- + +## 1. Accès au cluster Proxmox *(constantes — un seul cluster)* + +| Invite | Variable | Défaut | Sens / quoi saisir | +| --- | --- | --- | --- | +| Hôte API Proxmox | `proxmox_api_host` | *(vide)* | Nom DNS ou IP du nœud qui répond à l'API. Ex. `asgard`. | +| Utilisateur API Proxmox | `proxmox_api_user` | *(vide)* | Utilisateur **avec le realm**. Ex. `ansible@pve` (realm PVE) ou `root@pam`. | +| Port API Proxmox | `proxmox_api_port` | *(vide)* | Port HTTPS de l'API. Quasi toujours `8006`. | +| Valider les certificats TLS | `proxmox_validate_certs` | `non` | `oui` si le cluster a un certificat de confiance ; `non` pour un certificat auto-signé (cas usuel en lab). | + +## 2. Golden template *(constantes — le modèle cloné)* + +| Invite | Variable | Défaut | Sens / quoi saisir | +| --- | --- | --- | --- | +| VMID du modèle Debian 13 | `proxmox_clone_vmid_modele` | `9000` | VMID de la VM-modèle existante à cloner pour chaque nouvelle VM. | +| Nom logique du modèle | `proxmox_clone_source_nom` | `modele-debian13` | Nom de référence du template (lisibilité ; doit correspondre au modèle). | + +> Le golden template est l'**actif central** : il est cloné pour chaque VM, jamais +> jeté ni reconstruit à la légère. + +## 3. Placement par défaut des clones *(défauts surchargeables par hôte)* + +Ces valeurs s'appliquent à toute VM clonée, **sauf** si l'hôte les surcharge dans +`instance/plan/serveurs.yml`. + +| Invite | Variable | Défaut | Sens / quoi saisir | +| --- | --- | --- | --- | +| Nœud Proxmox par défaut | `proxmox_clone_noeud` | *(vide)* | Nœud du cluster où créer la VM. Ex. `asgard`. | +| Stockage Proxmox par défaut | `proxmox_clone_stockage` | *(vide)* | Datastore qui héberge le disque. Ex. `local-zfs`, `TrueNAS`. | +| Pont Proxmox | `proxmox_clone_pont` | `vmbr0` | Bridge réseau de la NIC. Ex. `vmbr0`, `vmbr1`. | +| Format disque par défaut | `proxmox_clone_format` | *(vide)* | `qcow2`, `raw`, … ou **vide** pour laisser le stockage décider (recommandé : ZFS/LVM imposent leur format). | +| Clone complet | `proxmox_clone_complet` | `oui` | `oui` = clone **indépendant** (autonome) ; `non` = clone **lié** (dépend du modèle, plus léger mais fragile). Garder `oui`. | +| Timeout opérations Proxmox | `proxmox_clone_timeout` | `600` | Secondes avant d'abandonner une opération longue (clone, redimensionnement). | +| Disque principal | `proxmox_clone_disque` | `scsi0` | Bus + index du disque système. `scsi0` est le standard Set-OPS. | +| Interface réseau | `proxmox_clone_interface` | `net0` | Identifiant de la NIC virtuelle. | +| Pare-feu interface Proxmox | `proxmox_clone_parefeu_interface` | `non` | Active le pare-feu Proxmox **au niveau de la NIC**. Laisser `non` : le filtrage se fait dans l'invité (nftables), pas chez l'hyperviseur. | +| Démarrer le clone après création | `proxmox_clone_demarrer` | `oui` | `oui` = booter la VM dès la création (nécessaire pour qu'Ansible la joigne ensuite). | + +## 4. Secrets API Proxmox 🔒 *(constantes, chiffrées)* + +L'assistant demande ensuite : « Configurer les secrets API Proxmox maintenant ». +Si `oui` : + +| Invite | Variable | Défaut | Sens / quoi saisir | +| --- | --- | --- | --- | +| Token ID Proxmox | `proxmox_api_token_id` | `set-ops` | Identifiant du **token API** créé côté Proxmox pour l'utilisateur API. | +| Token secret Proxmox | `proxmox_api_token_secret` | *(aucun)* | Secret du token. **Saisie masquée**, écrite uniquement dans le Vault chiffré. | + +- Si `proxmox.vault.yml` existe déjà, l'assistant ouvre directement + `ansible-vault edit` (pas de re-saisie en clair). +- Un secret vide ⇒ le Vault **n'est pas créé**. +- Ces deux clés ne transitent **jamais** par le GUI ni par aucun fichier en clair. + +--- + +## Comment créer le token API côté Proxmox + +Dans l'interface Proxmox (ou en CLI `pveum`) : + +1. Créer l'utilisateur API (ex. `ansible@pve`) et lui donner les droits requis + (rôle avec `VM.Allocate`, `VM.Clone`, `VM.Config.*`, `Datastore.AllocateSpace`, + `SDN.Use`/réseau selon le cluster). +2. Créer un **token API** pour cet utilisateur → noter le **Token ID** et le + **secret** (affiché une seule fois). +3. Renseigner Token ID + secret dans `make config`. + +## Voir aussi + +- [`intrants-communs.md`](intrants-communs.md) — tous les intrants communs de l'écosystème. +- [`nomenclature-vm.md`](nomenclature-vm.md) — réseau, VLAN, fonctions. +- [`vm-lifecycle.md`](vm-lifecycle.md) — cycle de vie d'une VM (création → conformité). +- `make help` — liste des cibles.