Apache CloudStack dapat mengelola VM di Proxmox VE melalui Proxmox Orchestrator Extension. Setelah terintegrasi, proses deploy, start, stop, reboot, delete, snapshot, konfigurasi VLAN, dan akses console dapat dilakukan dari CloudStack.
Panduan ini menggunakan konfigurasi lab yang sudah berhasil menjalankan Ubuntu 24.04 dari template Proxmox.
Topologi dan kondisi awal
| Komponen | Konfigurasi |
|---|---|
| CloudStack Management Server | csmgmt-kvm.lab.local — 192.168.14.135 |
| Versi CloudStack | 4.22.1.1 |
| Proxmox node | pvecs1.lab.local — 192.168.14.136 |
| Proxmox API | https://192.168.14.136:8006 |
| Proxmox node name | pvecs1 |
| Storage Proxmox | local-lvm |
| Guest bridge | vmbr1 |
| Template Proxmox | Ubuntu Server 24.04, VMID 9000 |
| Disk template | 20 GiB |
| Guest network | guest-isolated-01 |
| Guest CIDR | 10.1.1.0/24 |
| Guest gateway | 10.1.1.1 |
| Guest VLAN | 319 |
Sebelum integrasi dilakukan, kondisi berikut sudah tersedia:
- CloudStack Management Server dan zone sudah aktif.
- Proxmox VE dapat diakses dari Management Server melalui TCP
8006. - Proxmox dan host tempat CloudStack Virtual Router berjalan terhubung ke jaringan VLAN trunk yang sama.
- Bridge
vmbr1sudah VLAN-aware dan terhubung ke uplink guest network. - Template Ubuntu 24.04 VMID
9000sudah dibuat di Proxmox. - API token khusus CloudStack sudah tersedia.
Dokumentasi resmi menjelaskan bahwa extension Proxmox berkomunikasi dengan Proxmox VE API melalui HTTPS. CloudStack kemudian meneruskan MAC address dan VLAN ID VM ke Proxmox saat deployment. Lihat Proxmox Orchestrator Extension.
1. Menyiapkan template Proxmox
Template pada lab menggunakan Ubuntu 24.04 cloud image dengan VMID 9000. Seluruh pengaturan pada bagian ini dilakukan melalui Proxmox GUI.
Buka:
pvecs1 > VM 9000 > Hardware
Atur hardware template sebagai berikut:
| Hardware | Nilai |
| Processors | 2 cores |
| Memory | 2048 MiB |
| SCSI Controller | VirtIO SCSI single |
| Hard Disk | scsi0, storage local-lvm, size 20 GiB |
| CloudInit Drive | Storage local-lvm |
| Network Device | Model VirtIO, Bridge vmbr1 |
| Display | Standard VGA |
| Serial Port | socket — opsional |
Pastikan VirtIO SCSI single dipilih pada bagian SCSI Controller, bukan Display. Display menggunakan Standard VGA agar console VM dapat ditampilkan melalui CloudStack.
Jika disk masih mengikuti ukuran awal Ubuntu cloud image, pilih:
VM 9000 > Hardware > Hard Disk (scsi0) > Disk Action > Resize
Tambahkan kapasitas sampai total disk menjadi 20 GiB. Proxmox menggunakan nilai penambahan saat melakukan resize, sehingga periksa ukuran saat ini sebelum mengisi kolom Size Increment.
Selanjutnya buka:
VM 9000 > Options
Atur:
| Option | Nilai |
| Boot Order | Aktifkan scsi0 sebagai urutan pertama |
| QEMU Guest Agent | Enabled |
Kemudian buka:
VM 9000 > Cloud-Init
Isi konfigurasi berikut:
| Cloud-Init | Nilai |
| User | ubuntu |
| Password | Password sementara khusus lab |
| SSH Public Key | Public key administrator |
| IP Config | DHCP |
Gunakan SSH key untuk produksi dan hindari password tetap yang sama pada seluruh hasil clone.
Setelah konfigurasi selesai, matikan VM kemudian klik kanan VM 9000 dan pilih Convert to template. VMID 9000 selanjutnya digunakan sebagai template_id di CloudStack.

2. Memastikan jaringan guest siap
Bridge vmbr1 harus membawa VLAN guest dari Proxmox menuju jaringan CloudStack. Buka:
pvecs1 > System > Network
Jika vmbr1 belum tersedia, pilih Create > Linux Bridge, kemudian isi:
| Field | Nilai |
| Name | vmbr1 |
| IPv4/CIDR | Kosong |
| Gateway (IPv4) | Kosong |
| Bridge ports | Interface atau bond untuk trunk guest |
| VLAN aware | Aktif |
| Autostart | Aktif |
Klik Create, lalu Apply Configuration. Jika vmbr1 sudah tersedia, pilih bridge tersebut dan klik Edit untuk memastikan VLAN aware sudah aktif.
VLAN 319 harus diizinkan pada switch fisik, uplink Proxmox, dan host CloudStack yang menjalankan Virtual Router. Pastikan perubahan bridge dilakukan melalui interface management yang berbeda agar akses ke Proxmox tidak terputus.

3. Membuat API token Proxmox
Buka Proxmox UI, lalu masuk ke:
Datacenter > Permissions > API Tokens
Buat token khusus untuk CloudStack. Simpan tiga informasi berikut:
| Field | Contoh |
| User | cloudstack@pve |
| Token ID | cloudstack |
| Secret | <PROXMOX_API_SECRET> |

Untuk lab, Privilege Separation dapat dinonaktifkan. Untuk produksi, aktifkan pemisahan privilege dan berikan role yang diperlukan pada path /vms, /storage, dan /sdn.
Uji token dari CloudStack Management Server:
export PVE_TOKEN='cloudstack@pve!cloudstack=<PROXMOX_API_SECRET>'
curl -sk \
-H "Authorization: PVEAPIToken=$PVE_TOKEN" \
https://192.168.14.136:8006/api2/json/version | jq
unset PVE_TOKEN
Respons yang benar berisi informasi versi Proxmox pada objek data.
4. Menyiapkan Proxmox Extension di Management Server
Extension bawaan berada pada direktori berikut:
script=/usr/share/cloudstack-management/extensions/Proxmox/proxmox.sh
test -x "$script"
bash -n "$script"
Penyesuaian kompatibilitas pada instalasi lab
Skrip yang digunakan pada lab dinormalisasi agar dapat membaca detail resource dari payload CloudStack 4.22.1.1 dan menggunakan URL Proxmox dalam format lengkap.
Backup skrip terlebih dahulu:
cp -a "$script" "${script}.before-integration"
Pada fungsi parse_json(), detail host dibuat menerima nilai dari host maupun resourcemap, termasuk variasi nama objek externaldetails dan externalDetails. Pola hasil akhirnya sebagai berikut:
"host_url": (
.externaldetails.host.url //
.externaldetails.resourcemap.url //
.externalDetails.host.url //
.externalDetails.resourcemap.url // ""
),
"host_user": (
.externaldetails.host.user //
.externaldetails.resourcemap.user //
.externalDetails.host.user //
.externalDetails.resourcemap.user // ""
),
"host_token": (
.externaldetails.host.token //
.externaldetails.resourcemap.token //
.externalDetails.host.token //
.externalDetails.resourcemap.token // ""
),
"host_secret": (
.externaldetails.host.secret //
.externaldetails.resourcemap.secret //
.externalDetails.host.secret //
.externalDetails.resourcemap.secret // ""
),
"node": (
.externaldetails.host.node //
.externaldetails.resourcemap.node //
.externalDetails.host.node //
.externalDetails.resourcemap.node // ""
),
"network_bridge": (
.externaldetails.host.network_bridge //
.externaldetails.resourcemap.network_bridge //
.externalDetails.host.network_bridge //
.externalDetails.resourcemap.network_bridge // ""
),
"verify_tls_certificate": (
.externaldetails.host.verify_tls_certificate //
.externaldetails.resourcemap.verify_tls_certificate //
.externalDetails.host.verify_tls_certificate //
.externalDetails.resourcemap.verify_tls_certificate // "true"
),
Pada fungsi call_proxmox_api(), URL API menggunakan nilai url secara langsung:
response=$(curl "${curl_opts[@]}" "${url%/}/api2/json${path}")
Dengan format tersebut, nilai url yang dimasukkan ke CloudStack harus lengkap:
https://192.168.14.136:8006
Validasi skrip setelah disesuaikan:
chmod 0755 "$script"
bash -n "$script"
Jika terdapat beberapa Management Server, gunakan file yang sama pada seluruh node agar status extension tetap Ready. CloudStack memang memeriksa keberadaan dan konsistensi file extension pada Management Server.
5. Mengaktifkan Proxmox Extension
Masuk ke CloudStack UI sebagai administrator:
Extensions > Proxmox > Enable
Pastikan status extension menjadi:
Enabled / Ready

CloudStack 4.22 menyediakan extension Proxmox sebagai orchestrator berbasis shell script. File extension ditempatkan di bawah /usr/share/cloudstack-management/extensions/ dan dipanggil menggunakan payload JSON untuk setiap operasi VM. Lihat mekanisme Extensions CloudStack.
6. Membuat cluster External untuk Proxmox
Buka:
Infrastructure > Zones > <ZONE> > Pods > <POD> > Clusters > Add Cluster
Isi parameter berikut:
| Field | Nilai |
| Hypervisor | External |
| Extension | Proxmox |
| Cluster Name | proxmox-cluster-01 |

Simpan cluster, kemudian lanjutkan dengan menambahkan host Proxmox.
7. Menambahkan Proxmox sebagai host CloudStack
Tambahkan host pada cluster External yang baru dibuat. Gunakan detail berikut:
| Detail | Nilai |
| Host name | pvecs1.lab.local |
url | https://192.168.14.136:8006 |
user | cloudstack@pve |
token | cloudstack |
secret | <PROXMOX_API_SECRET> |
node | pvecs1 |
network_bridge | vmbr1 |
verify_tls_certificate | false untuk sertifikat self-signed pada lab |
node harus sama dengan nama node yang digunakan oleh Proxmox API, bukan sekadar nama tampilan di CloudStack. Nama tersebut dapat dilihat pada panel kiri Proxmox GUI, tepat di bawah Datacenter. Pada lab ini nilainya adalah pvecs1.
Setelah host ditambahkan, pastikan statusnya:
State: Up
Resource State: Enabled

Untuk produksi, gunakan sertifikat TLS yang dipercaya dan set verify_tls_certificate=true.
8. Mendaftarkan template Proxmox di CloudStack
Buka:
Images > Templates > Register Template
Isi data dasar:
| Field | Nilai |
| Name | ubuntu-2404-cloudstack |
| URL | https://example.invalid/ubuntu-2404-cloudstack.qcow2 |
| Hypervisor | External |
| Extension | Proxmox |
| Zone | Zone tempat cluster Proxmox berada |
| OS Type | Ubuntu 24.04 (64-bit) atau yang paling sesuai |
URL hanya menjadi metadata karena image yang digunakan sudah berada di Proxmox.

Tambahkan External Details berikut:
| Key | Value |
template_type | template |
template_id | 9000 |
CloudStack mendukung pemetaan template CloudStack ke template atau ISO Proxmox. Untuk deployment dari template, gunakan template_type=template dan isi template_id dengan VMID template Proxmox.
Menyamakan metadata ukuran template
Template pada lab memiliki root disk 20 GiB. Nilai byte-nya adalah:
20 × 1024 × 1024 × 1024 = 21474836480 byte
Backup metadata sebelum penyesuaian:
mysqldump -u root -p cloud vm_template vm_template_details \
> /root/cloudstack-template-before-integration.sql
Cari ID template yang baru didaftarkan:
SELECT id, name, size, hypervisor_type
FROM vm_template
WHERE name = 'ubuntu-2404-cloudstack'
AND removed IS NULL;
Set ukuran sesuai disk template Proxmox:
UPDATE vm_template
SET size = 21474836480
WHERE id = <ID_TEMPLATE>
AND hypervisor_type = 'External'
AND removed IS NULL;
Verifikasi:
SELECT id, name, size,
ROUND(size / 1073741824, 2) AS size_gib
FROM vm_template
WHERE id = <ID_TEMPLATE>;
Nilai size_gib harus menunjukkan 20.00.
9. Menyiapkan Compute Offering
Buat Compute Offering untuk VM Proxmox, misalnya:
| Field | Nilai |
| Name | proxmox-small |
| CPU | 2 |
| CPU speed | 1000 MHz |
| Memory | 2048 MB |
| Root Disk Size | 20 GB |

CPU dan memory dari offering akan diterapkan pada hasil clone. Root Disk Size dibuat sama dengan root disk template agar metadata dan kapasitas instance konsisten.
10. Menyiapkan isolated guest network
Buat atau gunakan network berikut:
| Field | Nilai |
| Name | guest-isolated-01 |
| Network mode | NATTED |
| CIDR | 10.1.1.0/24 |
| Gateway | 10.1.1.1 |
| VLAN | 319 |
Pada isolated network mode NATTED, CloudStack Virtual Router menyediakan DHCP, DNS, gateway, dan Source NAT. Dokumentasi CloudStack menjelaskan bahwa VR memberikan alamat IP guest dan meneruskan trafik keluar melalui Source NAT. Lihat CloudStack Guest Traffic.

Jika Network Offering menggunakan Default Egress Policy: Deny, tambahkan Egress Rule agar VM dapat mengakses internet. Untuk lab:
| Protocol | CIDR | Port |
All | 0.0.0.0/0 | Semua |
Untuk produksi, batasi sesuai kebutuhan, misalnya DNS, HTTP, HTTPS, NTP, dan repository sistem operasi.
11. Melakukan deployment VM
Buka:
Compute > Instances > Add Instance
Pilih:
- Zone tempat cluster Proxmox berada.
- Template
ubuntu-2404-cloudstack. - Compute Offering
proxmox-small. - Network
guest-isolated-01.
External Details yang dapat ditambahkan saat deployment:
| Key | Value | Fungsi |
storage | local-lvm | Menentukan storage disk hasil clone |
is_full_clone | false | Menggunakan linked clone |
vm_name | Opsional | Nama VM di Proxmox |
disk_size_gb tidak digunakan untuk deployment dari template. Parameter tersebut digunakan ketika sumber deployment berupa ISO.
CloudStack akan mengambil VMID yang tersedia dari Proxmox, melakukan clone template 9000, menerapkan CPU dan RAM, memasang MAC address CloudStack, menambahkan tag VLAN 319, lalu menyalakan VM.
12. Verifikasi deployment
Dari CloudStack
Pastikan:
Instance State: Running
Host: pvecs1.lab.local
IP Address: 10.1.1.x

Uji operasi berikut dari CloudStack UI:
- Console
- Stop
- Start
- Reboot
- Delete
Dari Proxmox GUI
Buka node pvecs1, lalu cari VM baru pada panel kiri. Nama VM mengikuti internal name CloudStack, misalnya i-2-13-VM.
Pilih VM tersebut dan periksa:
| Menu | Verifikasi |
| Summary | VM berstatus running |
| Hardware > Processors | Jumlah core mengikuti Compute Offering |
| Hardware > Memory | Kapasitas RAM mengikuti Compute Offering |
| Hardware > Hard Disk | Disk hasil clone berada di local-lvm |
| Hardware > Network Device | Bridge vmbr1 dan VLAN Tag 319 |
| Console | Tampilan boot Ubuntu dapat dibuka |
Dari dalam VM
Login melalui console menggunakan user ubuntu. Pada lab, gunakan password Cloud-Init yang telah ditentukan pada template. Setelah login, jalankan:
ip -br address
ip route
ping -c 3 10.1.1.1
ping -c 3 8.8.8.8
getent ahostsv4 google.com
curl -I https://example.com
Contoh alamat yang diterima VM:
eth0 UP 10.1.1.53/24
default via 10.1.1.1 dev eth0
Hasil tersebut menunjukkan bahwa DHCP, gateway, VLAN trunk, Egress Rule, DNS, dan Source NAT CloudStack sudah bekerja.
Hasil akhir
Setelah seluruh konfigurasi diterapkan:
- Host Proxmox tampil Up/Enabled di CloudStack.
- Template Proxmox VMID
9000dapat dipilih dari CloudStack. - VM dibuat otomatis di Proxmox menggunakan VMID baru.
- CPU dan memory mengikuti Compute Offering.
- NIC VM menggunakan MAC address dan VLAN dari CloudStack.
- VM memperoleh IP dari CloudStack Virtual Router.
- Console dapat dibuka dari CloudStack UI.
- VM dapat mengakses internet setelah Egress Rule diizinkan.
- Lifecycle VM dapat dikelola dari CloudStack.
Catatan keamanan untuk produksi
- Gunakan API token khusus CloudStack dengan hak minimum yang diperlukan.
- Gunakan sertifikat TLS valid dan aktifkan verifikasi sertifikat.
- Jangan menaruh token secret di dokumentasi, shell history, atau log publik.
- Gunakan SSH key sebagai akses utama VM.
- Hindari password default yang sama pada semua VM.
- Rotasi API token secara berkala.
- Gunakan shared storage jika template harus tersedia pada beberapa node Proxmox.
- Backup skrip extension sebelum upgrade CloudStack dan validasi kembali setelah upgrade.

