Pada artikel sebelumnya, saya sudah menyiapkan seluruh kebutuhan Terraform untuk Proxmox, mulai dari Terraform Controller, API Token, konfigurasi network, hingga file Terraform untuk membuat tiga VM Ubuntu.
Kali ini saya akan mengaplikasikan konfigurasi yang sudah dibuat tersebut dan melihat hasil deployment-nya langsung di homelab.
Topologi homelab
Seluruh perangkat berada pada network 192.168.14.0/24.
| Hostname | Fungsi | IP Address |
|---|---|---|
terraform-controller | Menjalankan Terraform | 192.168.14.80 |
ubuntu-tf-01 | VM hasil Terraform | 192.168.14.81 |
ubuntu-tf-02 | VM hasil Terraform | 192.168.14.82 |
ubuntu-tf-03 | VM hasil Terraform | 192.168.14.83 |
Alurnya kurang lebih seperti berikut:
Terraform Controller
192.168.14.80
│
│ Proxmox API
▼
Proxmox VE
│
├── ubuntu-tf-01 → 192.168.14.81
├── ubuntu-tf-02 → 192.168.14.82
└── ubuntu-tf-03 → 192.168.14.83
Cara Kerjanya
Saya menggunakan provider bpg/proxmox sebagai penghubung antara Terraform dengan Proxmox API.
Secara sederhana, Terraform tidak membuat VM dengan mengklik Web UI. Terraform mengirim request ke API Proxmox menggunakan API Token yang sudah dibuat.
Konfigurasi Terraform
│
▼
bpg/proxmox Provider
│
│ API Request
▼
Proxmox API :8006
│
▼
Resource dibuat di Proxmox
API tersebut memungkinkan Terraform untuk mengunduh image, membuat VM, mengatur disk, network, Cloud-init, hingga menyalakan VM.
Terraform kemudian menjalankan beberapa proses secara otomatis:
- Mengunduh Ubuntu 24.04 Cloud Image.
- Mengimport image ke storage Proxmox.
- Membuat tiga VM.
- Membuat disk dari Ubuntu Cloud Image.
- Mengatur CPU, RAM, disk, dan network.
- Mengatur IP statis melalui Cloud-init.
- Memasukkan SSH public key.
- Menyalakan seluruh VM.
Dengan cara ini, saya tidak perlu menulis resource VM sebanyak tiga kali. Terraform melakukan iterasi berdasarkan hostname, VM ID, dan IP yang sudah ditentukan.
Menjalankan Plan yang Sudah Disimpan
Pada artikel panduan sebelumnya, konfigurasi sudah diperiksa menggunakan:
terraform init
terraform validate
Kemudian rencana deployment dibuat dan disimpan ke file tfplan:
terraform plan -out=tfplan
Hasil plan menunjukkan:
Plan: 4 to add, 0 to change, 0 to destroy.
Empat resource tersebut terdiri dari:
| Resource | Jumlah |
|---|---|
| Ubuntu Cloud Image | 1 |
| VM Ubuntu | 3 |
Untuk menjalankan rencana yang sudah disimpan tersebut, saya cukup menjalankan:
terraform apply tfplan
Dengan menggunakan saved plan, Terraform menerapkan perubahan yang sebelumnya sudah diperiksa pada saat terraform plan.
Hasil Deployment
Setelah proses selesai, Terraform berhasil membuat ketiga VM sesuai konfigurasi.
181 ubuntu-tf-01 → 192.168.14.81
182 ubuntu-tf-02 → 192.168.14.82
183 ubuntu-tf-03 → 192.168.14.83
Masing-masing VM sudah memiliki CPU, RAM, disk, IP statis, Cloud-init, dan SSH key sesuai konfigurasi Terraform.
Ketiga VM juga langsung terlihat pada Proxmox dan berada dalam kondisi Running.
Konfigurasi cloud-init
Untuk memastikan VM benar-benar dapat digunakan, saya mencoba mengakses salah satunya dari Terraform Controller:
ssh ubuntu@192.168.14.81
Artinya VM tidak hanya berhasil dibuat di Proxmox, tetapi juga sudah mendapatkan konfigurasi awal dan dapat diakses melalui SSH.
Terraform State
VM yang dibuat tidak hanya dibuat sekali oleh Terraform, tetapi selanjutnya juga dikelola oleh Terraform.
Resource tersebut dapat dilihat menggunakan:
terraform state list
Contohnya:
proxmox_download_file.ubuntu_cloud_image
proxmox_virtual_environment_vm.ubuntu_vm["ubuntu-tf-01"]
proxmox_virtual_environment_vm.ubuntu_vm["ubuntu-tf-02"]
proxmox_virtual_environment_vm.ubuntu_vm["ubuntu-tf-03"]
State digunakan Terraform untuk mencatat resource yang dikelolanya. Karena itu, konfigurasi yang sama nantinya dapat digunakan untuk menambah, mengubah, atau menghapus VM.
Kesimpulan
Percobaan ini berhasil membuat 3 VM Ubuntu di Proxmox secara otomatis menggunakan Terraform.
Rancang dan konfigurasi
↓
terraform plan -out=tfplan
↓
terraform apply tfplan
↓
3 VM Ubuntu Running
Jika sebelumnya pembuatan VM dilakukan satu per satu melalui Web UI, sekarang konfigurasi infrastrukturnya sudah tersimpan sebagai kode dan dapat digunakan kembali.
Percobaan ini juga menjadi dasar sebelum melanjutkan otomatisasi berikutnya menggunakan Ansible untuk melakukan konfigurasi sistem setelah VM selesai dibuat.











