1️⃣ Điều kiện & Chuẩn bị
Trên Proxmox
- Proxmox VE đã hoạt động
- Có template VM (Linux/Cloud-Init)
👉 Khuyến nghị: Cloud-Init template - Có storage (vd:
local-lvm) - Có bridge network (vd:
vmbr0)
Trên máy chạy Terraform
- Terraform >= 1.x
- Token API của Proxmox (khuyến nghị)
2️⃣ Tạo API Token trên Proxmox (Best Practice)
Trên Proxmox UI:
Datacenter → Permissions → API Tokens
User: terraform@pve
- Token ID:
tf-token - Uncheck Privilege Separation (hoặc cấp quyền đầy đủ)
Gán quyền:
Datacenter → Permissions → Add → API Token Permission
Role: PVEAdmin
3️⃣ Khai báo Provider Proxmox
Dùng provider phổ biến:
Telmate/proxmox
terraform {
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "~> 3.0"
}
}
}
provider "proxmox" {
pm_api_url = "https://proxmox.example.com:8006/api2/json"
pm_api_token_id = "terraform@pve!tf-token"
pm_api_token_secret = "TOKEN_SECRET"
pm_tls_insecure = true
}
4️⃣ Chuẩn bị Template Cloud-Init (Quan trọng)
VM template cần:
- Cloud-Init enabled
- Disk bus: SCSI
- Network: VirtIO
- QEMU Guest Agent
👉 VM template sẽ được clone để tạo VM mới.
5️⃣ Khai báo Resource tạo VM
Ví dụ tạo VM Linux từ template
resource "proxmox_vm_qemu" "vm" {
name = "vm-ubuntu-01"
target_node = "pve-node1"
clone = "ubuntu-22.04-template"
cores = 2
sockets = 1
memory = 4096
cpu = "host"
scsihw = "virtio-scsi-pci"
boot = "order=scsi0"
disk {
slot = 0
size = "40G"
type = "scsi"
storage = "local-lvm"
iothread = 1
}
network {
model = "virtio"
bridge = "vmbr0"
}
os_type = "cloud-init"
ipconfig0 = "ip=dhcp"
ciuser = "admin"
sshkeys = file("~/.ssh/id_rsa.pub")
agent = 1
}
6️⃣Khởi tạo Terraform
terraform init
➡️ Tải provider Proxmox.
7️⃣Xem kế hoạch triển khai
terraform plan
➡️ Kiểm tra VM sẽ được clone và cấu hình như thế nào.
8️⃣Tạo VM trên Proxmox
terraform apply
➡️ Sau vài giây → VM xuất hiện trên Proxmox và tự boot.
9️⃣ Kiểm tra trên Proxmox


🔁 Huỷ VM khi không cần
terraform destroy