Penyedia Terraform Cockpit
Penyedia Terraform Cockpit memungkinkan Anda untuk mengelola sumber daya Cockpit menggunakan konsep Infrastructure as Code (IaC). Cockpit berfungsi sebagai pusat kontrol plane untuk berbagai lingkungan virtualisasi Vapor, dan penyedia ini memungkinkan Anda untuk mengotomatisasi penyediaan (provisioning) dan manajemen siklus hidup host, mesin virtual, klaster Kubernetes, datastore, serta switch jaringan.
Halaman repositori resmi penyedia ini tersedia di Terraform Registry - awanio/cockpit.
Persyaratan
- Terraform >= 1.0
- Go >= 1.25 (hanya diperlukan untuk membangun penyedia dari kode sumber)
Konfigurasi Penyedia
Untuk menggunakan penyedia ini, deklarasikan dalam konfigurasi Terraform Anda. Penyedia ini memerlukan kredensial dari akun layanan Cockpit (Client ID dan Client Secret) serta URL endpoint API Cockpit.
Konfigurasi Skema
terraform {
required_providers {
cockpit = {
source = "awanio/cockpit"
version = "~> 1.0.0" # Sesuaikan dengan versi yang diinginkan
}
}
}
provider "cockpit" {
host = "http://localhost:7771/api/v1"
client_id = "your-service-account-client-id"
client_secret = "your-service-account-client-secret"
}Variabel Lingkungan
Parameter konfigurasi juga dapat diteruskan menggunakan variabel lingkungan. Ini adalah pendekatan yang disarankan untuk menghindari penulisan kredensial sensitif secara langsung dalam file HCL.
COCKPIT_HOST— URL dasar API Cockpit (misalnya,http://localhost:7771/api/v1).COCKPIT_CLIENT_ID— Client ID dari akun layanan.COCKPIT_CLIENT_SECRET— Client Secret dari akun layanan.
Sumber Daya (Resources)
cockpit_host
Mengelola pendaftaran host Vapor dan koneksinya di dalam orkestrator Cockpit.
Contoh Penggunaan
resource "cockpit_host" "example" {
address = "10.0.0.15"
port = 7770
api_token = "vapor-api-token-here"
parent_id = "datacenter-or-cluster-uuid"
}Referensi Argumen
address(String, Wajib) — Alamat IP atau fully qualified domain name (FQDN) dari host Vapor.port(Number, Opsional) — Port tempat layanan API Vapor berjalan. Default ke7770.api_token(String, Wajib, Sensitif) — Token API yang digunakan untuk autentikasi dengan host Vapor.parent_id(String, Wajib) — UUID dari entitas inventaris Datacenter atau Klaster tempat host ditempatkan.
cockpit_virtual_machine
Mengelola siklus hidup Mesin Virtual (VM) di dalam orkestrator Cockpit.
Contoh Penggunaan
resource "cockpit_virtual_machine" "example" {
host_id = "host-uuid-here"
name = "terraform-vm"
memory = 2048
vcpus = 2
autostart = true
os = {
type = "linux"
variant = "ubuntu22.04"
}
storage = {
disks = [
{
size = 20
pool = "default"
}
]
}
networks = [
{
type = "network"
source = "default"
}
]
}Referensi Argumen
host_id(String, Wajib) — UUID dari host Vapor tempat Mesin Virtual akan dijalankan.name(String, Wajib) — Nama mesin virtual.memory(Number, Wajib) — Ukuran memori yang dialokasikan dalam megabyte (MB).vcpus(Number, Wajib) — Jumlah inti CPU virtual yang dialokasikan untuk mesin virtual.cluster_id(String, Opsional) — UUID dari klaster target untuk penjadwalan VM.datacenter_id(String, Opsional) — UUID dari datacenter target.os(Block, Opsional) — Parameter konfigurasi sistem operasi. Berisi:type(String) — Tipe OS (misalnya,linux,windows).variant(String) — Varian distribusi OS tertentu (misalnya,ubuntu22.04).
storage(Block, Opsional) — Parameter konfigurasi penyimpanan. Berisi:disks(List of Blocks) — Daftar konfigurasi disk. Setiap blok disk berisi:size(Number) — Ukuran disk dalam gigabyte (GB).pool(String) — Nama storage pool tempat disk akan disediakan.
networks(Block List, Opsional) — Antarmuka jaringan yang akan dipasang ke VM. Setiap blok jaringan berisi:type(String) — Tipe antarmuka (misalnya,network).source(String) — Nama jaringan sumber atau bridge.
autostart(Boolean, Opsional) — Menentukan apakah mesin virtual akan dijalankan secara otomatis saat host melakukan booting. Default kefalse.
cockpit_kubernetes_cluster
Mengelola klaster Kubernetes yang disediakan melalui layanan Auto-Provisioner Cockpit.
Contoh Penggunaan
resource "cockpit_kubernetes_cluster" "k8s" {
name = "k8s-prod"
version = "v1.36.1+k3s1"
network_id = "network-switch-uuid"
ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ..."
image_path = "/var/lib/libvirt/images/ubuntu-k8s-template.qcow2"
control_plane = {
cpu = 2
memory_mb = 2048
storage_pool_id = "default"
storage_gb = 20
desired_count = 1
}
workers = {
cpu = 2
memory_mb = 2048
storage_pool_id = "default"
storage_gb = 20
desired_count = 3
}
csi_tiers = {
local_path_enabled = true
longhorn_enabled = false
}
}Referensi Argumen
name(String, Wajib) — Nama klaster Kubernetes.version(String, Wajib) — Tag versi Kubernetes K3s target (misalnya,v1.36.1+k3s1).network_id(String, Wajib) — UUID dari switch jaringan tempat node klaster terhubung.ssh_public_key(String, Wajib) — Kunci publik SSH yang diinjeksikan ke dalam node klaster untuk akses administratif.image_path(String, Opsional) — Jalur ke templat OS atau golden image yang digunakan untuk penyediaan node.control_plane(Block, Wajib) — Spesifikasi node untuk control plane. Berisi:cpu(Number) — Inti CPU per node control plane.memory_mb(Number) — Memori dalam MB per node control plane.storage_pool_id(String) — ID storage pool untuk disk OS node.storage_gb(Number) — Ukuran disk dalam GB.desired_count(Number) — Jumlah node control plane (harus ganjil untuk HA, misalnya, 1, 3, 5).
workers(Block, Wajib) — Spesifikasi node untuk worker node. Berisi:cpu(Number) — Inti CPU per worker node.memory_mb(Number) — Memori dalam MB per worker node.storage_pool_id(String) — ID storage pool untuk disk OS node.storage_gb(Number) — Ukuran disk dalam GB.desired_count(Number) — Jumlah worker node yang diinginkan.
csi_tiers(Block, Opsional) — Konfigurasi integrasi penyimpanan untuk Kubernetes Container Storage Interface (CSI). Berisi:local_path_enabled(Boolean) — Mengaktifkan atau menonaktifkan driver CSI local path.longhorn_enabled(Boolean) — Mengaktifkan atau menonaktifkan driver penyimpanan blok terdistribusi Longhorn.
cockpit_datastore
Mengelola penyimpanan datastore (storage pool) pada host Vapor.
Contoh Penggunaan
resource "cockpit_datastore" "example" {
name = "nfs-images"
host_id = "host-uuid-here"
type = "netfs"
path = "/var/lib/libvirt/images/nfs-images"
source = "10.0.0.5:/exports/images"
autostart = true
scope = "shared"
}Referensi Argumen
name(String, Wajib) — Nama storage pool atau datastore.host_id(String, Wajib) — UUID dari host Vapor tempat datastore dikonfigurasi.type(String, Wajib) — Tipe storage pool (misalnya,dir,netfs,logical,fs).path(String, Opsional) — Jalur mount target filesystem lokal atau direktori untuk pool.source(String, Opsional) — Jalur sumber atau pengenal ekspor (seperti string ekspor NFS jarak jauh).target(String, Opsional) — Pengenal atau jalur penyimpanan target.autostart(Boolean, Opsional) — Menentukan apakah storage pool akan dijalankan secara otomatis saat sistem host booting. Default ketrue.scope(String, Opsional) — Cakupan logis dari datastore. Nilai yang didukung adalahlocalataushared. Default kelocal.
cockpit_switch
Mengelola switch jaringan (jaringan virtual) pada host Vapor.
Contoh Penggunaan
resource "cockpit_switch" "example" {
name = "vnet-nat-example"
host_id = "host-uuid-here"
mode = "nat"
ip_address = "192.168.100.1"
netmask = "255.255.255.0"
dhcp_start = "192.168.100.10"
dhcp_end = "192.168.100.100"
autostart = true
}Referensi Argumen
name(String, Wajib) — Nama switch jaringan virtual.host_id(String, Wajib) — UUID dari host Vapor target.mode(String, Wajib) — Mode penerusan jaringan. Nilai yang didukung adalahnat,bridge,route, danisolated.bridge(String, Opsional) — Nama perangkat antarmuka bridge host.ip_address(String, Opsional) — Alamat IP yang ditetapkan ke antarmuka bridge.netmask(String, Opsional) — Subnet mask dari jaringan bridge.dhcp_start(String, Opsional) — Alamat IP awal untuk kolam alokasi DHCP.dhcp_end(String, Opsional) — Alamat IP akhir untuk kolam alokasi DHCP.autostart(Boolean, Opsional) — Menentukan apakah switch virtual akan dijalankan secara otomatis saat host booting. Default ketrue.domain(String, Opsional) — Prefiks nama domain DNS yang akan ditetapkan ke klien DHCP.
Kompilasi Pengembangan Lokal
Untuk keperluan pengembangan atau pengujian perubahan penyedia kustom secara lokal, Anda dapat membangun biner penyedia dari kode sumber menggunakan perintah berikut:
go build -o terraform-provider-cockpit