Mengatasi Proxmox Terraform Deletes dengan curl + jq
Kamu sedang mengautomasi homelab mu menggunakan Terraform + Proxmox? Semua berjalan lancar sampai... tidak.
Masalahnya
Pada deployment push-based (via GitHub Actions), saya menemukan masalah:
- Proxmox Terraform provider tidak bisa menghapus VM/container yang sedang berjalan.
- Artinya: 1. Terraform mencoba menghancurkan resource 2. Proxmox menolaknya 3. Pipeline gagal
Solusi yang Gampang Banget
Solusinya sederhana:
- Cek jika VM sedang berjalan → hentikan → lalu hapus
- Tapi Terraform tidak menanganinya secara native — jadi saya membuat workaround kecil menggunakan curl dan jq.
Apa yang Kamu Butuhkan
Sebelum memulai, install:
- curl (untuk API calls) → https://curl.se/windows/
- jq (untuk parsing JSON) → https://jqlang.org/download/
Akses Proxmox API
Kamu perlu token Proxmox API. Dokumentasi:
- https://pve.proxmox.com/wiki/Proxmox_VE_API#API_Tokens
- https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/qemu/{vmid}/status/current
Set Variabel Lingkungan
Contoh di Windows: setx TF_VAR_proxmox_api_url "https://YOUR-IP:8006/api2/json" setx TF_VAR_proxmox_api_token_id "user@pam!token" setx TF_VAR_proxmox_api_token_secret "your-secret"
Inti Solusi
Kita query status VM menggunakan Proxmox API: curl -sk -H "Authorization: PVEAPIToken=USER!TOKEN=SECRET" \https://IP:8006/api2/json/nodes/NODE/qemu/VMID/status/current Lalu extract state dengan jq: jq -r '.data.status'
Menggabungkan Semua
Logika yang digunakan: STATUS=$(curl -sk -H "$PVE_AUTH" "${PVE_API}/nodes/${PVE_NODE}/qemu/${VMID}/status/current" | jq -r '.data.status') if [ "$STATUS" = "running" ]; then echo "Stopping VM $VMID..." curl -sk -X POST -H "$PVE_AUTH" "${PVE_API}/nodes/${PVE_NODE}/qemu/${VMID}/status/stop" fi
Sekarang Terraform bisa dengan aman menghancurkan VM setelah ini dijalankan.



