Skip to content

Cockpit Terraform プロバイダー

Cockpit Terraform プロバイダーを使用すると、Infrastructure as Code (IaC) を使用して Cockpit リソースを管理できます。Cockpit は、複数の Vapor 仮想化環境を管理するための集中管理コントロールプレーンとして機能し、このプロバイダーを使用することで、ホスト、仮想マシン、Kubernetes クラスター、データストア、およびネットワークスイッチのプロビジョニングとライフサイクル管理を自動化できます。

公式のプロバイダーレジストリページは、Terraform Registry - awanio/cockpit からアクセスできます。

要件

  • Terraform >= 1.0
  • Go >= 1.25 (ソースからプロバイダーをビルドする場合にのみ必要)

プロバイダーの構成

プロバイダーを使用するには、Terraform 構成ファイルで宣言します。プロバイダーには、Cockpit サービスアカウントの資格情報 (クライアント ID およびクライアントシークレット) と、Cockpit API エンドポイントの URL が必要です。

スキーマの構成

hcl
terraform {
  required_providers {
    cockpit = {
      source  = "awanio/cockpit"
      version = "~> 1.0.0" # 必要なバージョンに調整してください
    }
  }
}

provider "cockpit" {
  host          = "http://localhost:7771/api/v1"
  client_id     = "your-service-account-client-id"
  client_secret = "your-service-account-client-secret"
}

環境変数

構成パラメーターは、環境変数を使用して渡すこともできます。これは、HCL ファイル内に機密性の高い資格情報をハードコーディングするのを防ぐために推奨されるアプローチです。

  • COCKPIT_HOST — Cockpit API のベース URL (例: http://localhost:7771/api/v1)。
  • COCKPIT_CLIENT_ID — サービスアカウントのクライアント ID。
  • COCKPIT_CLIENT_SECRET — サービスアカウントのクライアントシークレット。

リソース

cockpit_host

Cockpit オーケストレーターに接続される Vapor ホストサーバーの登録と接続を管理します。

使用例

hcl
resource "cockpit_host" "example" {
  address   = "10.0.0.15"
  port      = 7770
  api_token = "vapor-api-token-here"
  parent_id = "datacenter-or-cluster-uuid"
}

引数リファレンス

  • address (文字列、必須) — Vapor ホストの IP アドレスまたは完全修飾ドメイン名 (FQDN)。
  • port (数値、任意) — Vapor API サービスがリッスンしているポート。デフォルトは 7770
  • api_token (文字列、必須、機密) — Vapor ホストとの認証に使用される API トークン。
  • parent_id (文字列、必須) — ホストが配置されるデータセンターまたはクラスターの UUID。

cockpit_virtual_machine

Cockpit オーケストレーター内での仮想マシン (VM) のライフサイクルを管理します。

使用例

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"
    }
  ]
}

引数リファレンス

  • host_id (文字列、必須) — 仮想マシンを実行する Vapor ホストの UUID。
  • name (文字列、必須) — 仮想マシンの名前。
  • memory (数値、必須) — 割り当てられるメモリサイズ (MB 単位)。
  • vcpus (数値、必須) — 仮想マシンに割り当てられる仮想 CPU コアの数。
  • cluster_id (文字列、任意) — VM スケジューリングのターゲットクラスターの UUID。
  • datacenter_id (文字列、任意) — ターゲットデータセンターの UUID。
  • os (ブロック、任意) — オペレーティングシステムの構成パラメーター。以下を含みます。
    • type (文字列) — OS タイプ (例: linux, windows)。
    • variant (文字列) — 特定の OS ディストリビューションバリアント (例: ubuntu22.04)。
  • storage (ブロック、任意) — ストレージ構成パラメーター。以下を含みます。
    • disks (ブロックのリスト) — ディスク構成のリスト。各ディスクブロックには以下が含まれます。
      • size (数値) — ディスクのサイズ (GB 単位)。
      • pool (文字列) — ディスクがプロビジョニングされるストレージプールの名前。
  • networks (ブロックのリスト、任意) — VM に接続するネットワークインターフェース。各ネットワークブロックには以下が含まれます。
    • type (文字列) — インターフェースのタイプ (例: network)。
    • source (文字列) — ソースネットワークまたはブリッジの名前。
  • autostart (ブーリアン、任意) — ホストの起動時に仮想マシンを自動的に起動するかどうか。デフォルトは false

cockpit_kubernetes_cluster

Cockpit の自動プロビジョナーサービスを介してプロビジョニングされた Kubernetes クラスターを管理します。

使用例

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
  }
}

引数リファレンス

  • name (文字列、必須) — クラスターの名前。
  • version (文字列、必須) — ターゲットとなる K3s Kubernetes のバージョンタグ (例: v1.36.1+k3s1)。
  • network_id (文字列、必須) — クラスターノードが接続されるネットワークスイッチの UUID。
  • ssh_public_key (文字列、必須) — 管理アクセスのためにクラスターノードに挿入される SSH 公開鍵。
  • image_path (文字列、任意) — ノードのプロビジョニングに使用される OS テンプレートまたはゴールデンイメージのパス。
  • control_plane (ブロック、必須) — コントロールプレーンノードの仕様。以下を含みます。
    • cpu (数値) — コントロールプレーンノードあたりの CPU コア数。
    • memory_mb (数値) — コントロールプレーンノードあたりのメモリ (MB 単位)。
    • storage_pool_id (文字列) — ノードの OS ディスク用のストレージプール ID。
    • storage_gb (数値) — ディスクサイズ (GB 単位)。
    • desired_count (数値) — コントロールプレーンノードの数 (高可用性のために奇数にする必要があります。例: 1, 3, 5)。
  • workers (ブロック、必須) — ワーカーノードの仕様。以下を含みます。
    • cpu (数値) — ワーカーノードあたりの CPU コア数。
    • memory_mb (数値) — ワーカーノードあたりのメモリ (MB 単位)。
    • storage_pool_id (文字列) — ノードの OS ディスク用のストレージプール ID。
    • storage_gb (数値) — ディスクサイズ (GB 単位)。
    • desired_count (数値) — ワーカーノードの希望数。
  • csi_tiers (ブロック、任意) — Kubernetes Container Storage Interface (CSI) のストレージ統合構成。以下を含みます。
    • local_path_enabled (ブーリアン) — local path CSI ドライバーの有効化または無効化。
    • longhorn_enabled (ブーリアン) — Longhorn 分散ブロックストレージドライバーの有効化または無効化。

cockpit_datastore

Vapor ホスト上のストレージデータストア (ストレージプール) を管理します。

使用例

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"
}

引数リファレンス

  • name (文字列、必須) — ストレージプールまたはデータストアの名前。
  • host_id (文字列、必須) — データストアが構成されている Vapor ホストの UUID。
  • type (文字列、必須) — ストレージプールのタイプ (例: dir, netfs, logical, fs)。
  • path (文字列、任意) — プールのローカルファイルシステムのマウントパスまたはディレクトリ。
  • source (文字列、任意) — ソースパスまたはエクスポート識別子 (リモート NFS エクスポート文字列など)。
  • target (文字列、任意) — ターゲットストレージのパスまたは識別子。
  • autostart (ブーリアン、任意) — ホストシステムの起動時にストレージプールを自動的に起動するかどうか。デフォルトは true
  • scope (文字列、任意) — データストアの論理スコープ。サポートされている値は local または shared です。デフォルトは local

cockpit_switch

Vapor ホスト上のネットワークスイッチ (仮想ネットワーク) を管理します。

使用例

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
}

引数リファレンス

  • name (文字列、必須) — 仮想ネットワークスイッチの名前。
  • host_id (文字列、必須) — ターゲットとなる Vapor ホストの UUID。
  • mode (文字列、必須) — ネットワークフォワーディングモード。サポートされている値は natbridgeroute、および isolated です。
  • bridge (文字列、任意) — ホストブリッジインターフェースデバイスの名前。
  • ip_address (文字列、任意) — ブリッジインターフェースに割り当てられる IP アドレス。
  • netmask (文字列、任意) — ブリッジネットワークのサブネットマスク。
  • dhcp_start (文字列、任意) — DHCP 割り当てプールの開始 IP アドレス。
  • dhcp_end (文字列、任意) — DHCP 割り当てプールの終了 IP アドレス。
  • autostart (ブーリアン、任意) — ホストの起動時に仮想スイッチを自動的に起動するかどうか。デフォルトは true
  • domain (文字列、任意) — DHCP クライアントに割り当てる DNS ドメイン名プレフィックス。

ローカル開発用コンパイル

開発またはカスタムプロバイダーの変更をローカルでテストするために、次のコマンドを使用してソースからプロバイダーバイナリをビルドできます。

bash
go build -o terraform-provider-cockpit