Belajar Proxmox VE - Infrastructure Automation (Terraform, Ansible & Cloud-Init)
Episode 17 of 21

Belajar Proxmox VE - Infrastructure Automation (Terraform, Ansible & Cloud-Init)

Episode ini membahas automasi provisioning VM dengan Terraform dan OpenTofu melalui provider bpg/proxmoxve, otomasi konfigurasi dengan Ansible, serta alur end-to-end dari template cloud-init hingga software stack terkonfigurasi.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Di episode 4 kalian membuat VM dari template secara manual. Episode 17 mengajarkan cara membuat ratusan VM dengan kode: menentukan infrastruktur sebagai file yang bisa direview, diverifikasi, dan diulang — inilah Infrastructure as Code (IaC).

Kita akan memakai Terraform dan OpenTofu dengan provider Proxmox untuk provisioning, Ansible untuk konfigurasi di dalam VM, lalu menggabungkan keduanya dalam satu alur otomatis. Di akhir episode, kalian bisa menulis file, menjalankan satu perintah, dan infrastruktur muncul dengan sendirinya.

Provisioning dengan Terraform dan OpenTofu

Provider bpg/proxmoxve

Terraform dan OpenTofu adalah tool declarative: kalian mendeskripsikan state akhir, dan tool bekerja mewujudkannya. Untuk Proxmox, provider resmi yang paling matang adalah bpg/proxmoxve — provider komunitas yang dikembangkan dengan dukungan luas dan fitur lengkap.

Inisialisasi project Terraform
mkdir proxmox-iac && cd proxmox-iac
cat > versions.tf <<'EOF'
terraform {
  required_providers {
    proxmox = {
      source  = "bpg/proxmox"
      version = "~> 0.70"
    }
  }
}
EOF
terraform init

Perintah terraform init mengunduh provider sesuai definisi versions.tf. OpenTofu menggunakan alur yang sama persis.

Mendefinisikan VM sebagai HCL

Definisikan VM sebagai sumber daya dalam file .tf:

Definisi VM dari template cloud-init
resource "proxmox_virtual_environment_vm" "web" {
  name      = "web-01"
  node_name = "pve"
  vm_id     = 200
 
  clone {
    vm_id = 9000
  }
 
  cpu {
    cores = 2
  }
  memory {
    dedicated = 2048
  }
  network_device {
    bridge = "vmbr0"
  }
  disk {
    datastore_id = "local-lvm"
    interface    = "scsi0"
  }
  initialization {
    ip_config {
      ipv4 {
        address = "192.168.1.50/24"
        gateway = "192.168.1.1"
      }
    }
    user_account {
      username = "admin"
      keys     = [trimspace(file("~/.ssh/id_ed25519.pub"))]
    }
  }
}

Simpan sebagai main.tf, lalu terapkan:

Terapkan infrastruktur
terraform plan
terraform apply -auto-approve

Provider bpg/proxmoxve membuat VM dari template 9000, mengkonfigurasi resource dan cloud-init, lalu Proxmox menghidupkannya. Semua hasilnya tercatat sebagai state — kalian bisa mengubah, menghapus, atau meniru VM hanya dengan mengedit file.

Otomasi Konfigurasi dengan Ansible

Modul community.general.proxmox

Ansible adalah tool imperative berbasis playbook untuk konfigurasi. Modul community.general.proxmox* memungkinkan Ansible mengelola lifecycle VM — membuat, menghentikan, atau menghapus — lewat koneksi ke API Proxmox. Contoh playbook sederhana:

Playbook Ansible untuk Proxmox
- name: Pastikan VM berjalan
  hosts: localhost
  connection: local
  tasks:
    - name: Start VM 200
      community.general.proxmox_kvm:
        api_host: 192.168.1.10
        api_user: root@pam
        api_password: "{{ proxmox_password }}"
        vmid: 200
        state: started

Playbook ini memastikan VM 200 berjalan, menggunakan kredensial dari variable Ansible Vault untuk keamanan.

Konfigurasi di Dalam VM

Untuk pekerjaan di dalam VM — install paket, menulis konfigurasi, menjalankan service — Ansible bekerja langsung di guest. Buat inventory berisi VM yang sudah dibuat Terraform, lalu jalankan playbook untuk menata software stack:

Jalankan playbook di dalam VM
ansible-playbook -i inventory.yml setup-webserver.yml

Perintah ansible-playbook mengkonfigurasi VM sesuai playbook — idempotent, aman dijalankan berulang, dan hasilnya konsisten.

Alur Otomatis End-to-End

Terraform Membuat, Ansible Mengkonfigurasi

Kekuatan sejati muncul saat keduanya digabung. Alur standar:

  1. Terraform membuat VM dari template cloud-init.
  2. Ansible menunggu SSH aktif di VM baru.
  3. Ansible mengkonfigurasi software stack di dalam VM.
Pipeline IaC
Terraform: template cloud-init -> VM siap
Ansible  : VM -> software stack terkonfigurasi

Kalian bisa menjadwalkan alur ini di CI/CD — setiap kali kode infrastruktur berubah, pipeline membangun kembali environment yang konsisten. Inilah pola yang dipakai tim SRE di produksi.

Info

Simpan semua file IaC di git. Infrastruktur sebagai kode berarti infrastruktur bisa di-review seperti kode: pull request, review, dan changelog untuk setiap perubahan.

Penutup

Episode 17 membawa kalian ke era IaC: provisioning VM dengan Terraform dan OpenTofu lewat provider bpg/proxmoxve, mengelola lifecycle dengan Ansible, dan menggabungkan keduanya dalam pipeline end-to-end dari template cloud-init hingga software stack siap pakai.

Inti yang harus dibawa pulang:

  • Provider bpg/proxmoxve adalah standar untuk Terraform dan OpenTofu.
  • Terraform bersifat declarative: deskripsikan state, tool yang mewujudkannya.
  • Ansible bersifat imperative dan cocok untuk konfigurasi di dalam VM.
  • Jangan pernah menaruh kredensial di kode; gunakan Ansible Vault atau variable.
  • Alur ideal: Terraform membuat, Ansible mengkonfigurasi.
  • Simpan semua infrastruktur sebagai kode di git.

Di episode 18 selanjutnya kita akan membahas monitoring, alerting, dan metrics — memantau node dan VM lewat metrik bawaan, mengekspor metrik ke Prometheus dengan pve-exporter, memvisualisasikannya di Grafana, dan mengkonfigurasi alert untuk notifikasi dini. Infrastruktur kalian sudah otomatis; sekarang saatnya membuatnya terlihat dan waspada!