VMs Terraform — clone depuis templates
Étape 4 du DR bootstrap. Provisioning des VMs Debian + OPNsense via clones Terraform. Idempotent : skip si VM existe déjà dans tfstate.
Contexte
VMs déployées (toutes sur coruscant):
| ID | Hostname | IP | Template | Rôle |
|---|---|---|---|---|
| 200 | OPNsense | 10.0.1.1 + 10.0.2.1 + 192.168.1.2 | 9200 | Firewall/routeur central |
| 130 | tatooine | 10.0.2.10 | 9100 (debian12) | Platform — step-ca + Traefik + Authentik + Vaultwarden + vision |
| 131 | kamino | 10.0.2.11 | 9100 | DevOps — GitLab CE |
| 132 | kalevala | 10.0.2.12 | 9100 | Monitoring — Prometheus + Grafana |
Source de vérité IPs : infra/terraform/environments/homelab/variables.tf > debian_vms.
Prérequis
- Templates Packer up : VM 9100 + 9200 (cf
06-template-debian12+07-template-opnsense) - Token API terraform créé sur Proxmox (cf
04-proxmox-setup) - SOPS
infra/terraform/secrets/proxmox.yamlchiffré
Déployer OPNsense (smart, prompt si VM 200 existe)
task opnsense:vm:deploy
Logique:
- Check SSH coruscant + VM 200 status
- Si VM 200 existe → prompt
YESpour destroy + recreate - Sinon → terraform apply scoped
module.opnsense - Bootstrap SSH key + clean known_hosts entry 10.0.1.1
Verify: ssh -i ~/.ssh/id_ed25519_minfra root@10.0.1.1 ‘uname -a’
Déployer VM Debian (par nom)
# tatooine (default IP from variables.tf = 10.0.2.10)
task debian12:vm:deploy NAME=tatooine
# Override IP au runtime
task debian12:vm:deploy NAME=test-vm IP=10.0.2.99
Verify: ssh -o ProxyJump=root@10.0.1.1 packer@tatooine.minfra.in ‘hostname’
Détruire une VM
task debian12:vm:destroy NAME=tatooine
task opnsense:vm:destroy # destroy VM 200 OPNsense
⚠ opnsense:vm:destroy détruit VM 200 → coupe le routage LAN/DMZ. À utiliser
uniquement pour rebuild propre (suivre immédiatement par opnsense:vm:deploy
puis opnsense:config).
État Terraform
# Liste VMs trackées dans tfstate
cd infra/terraform
wsl bash -c "cd environments/homelab && cat terraform.tfstate | jq -r '.resources[].instances[].attributes.name' 2>/dev/null | sort -u"
# Plan dry-run (vérifier drift)
wsl bash scripts/apply.sh plan environments/homelab
Hors périmètre
- Resize disque/RAM en live — destroy + recreate via task
- Migration vers autre node Proxmox — single-node actuel
- HA cluster — phase 2 (VMs HA-aware avec restart auto)
- Cloud-init custom per-VM — bake dans template (cf 06-template-debian12)