Skip to content

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

hcl
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

hcl
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 ke 7770.
  • 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

hcl
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 ke false.

cockpit_kubernetes_cluster

Mengelola klaster Kubernetes yang disediakan melalui layanan Auto-Provisioner Cockpit.

Contoh Penggunaan

hcl
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

hcl
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 ke true.
  • scope (String, Opsional) — Cakupan logis dari datastore. Nilai yang didukung adalah local atau shared. Default ke local.

cockpit_switch

Mengelola switch jaringan (jaringan virtual) pada host Vapor.

Contoh Penggunaan

hcl
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 adalah nat, bridge, route, dan isolated.
  • 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 ke true.
  • 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:

bash
go build -o terraform-provider-cockpit