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 が必要です。
スキーマの構成
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 ホストサーバーの登録と接続を管理します。
使用例
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) のライフサイクルを管理します。
使用例
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 クラスターを管理します。
使用例
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 ホスト上のストレージデータストア (ストレージプール) を管理します。
使用例
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 ホスト上のネットワークスイッチ (仮想ネットワーク) を管理します。
使用例
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(文字列、必須) — ネットワークフォワーディングモード。サポートされている値はnat、bridge、route、およびisolatedです。bridge(文字列、任意) — ホストブリッジインターフェースデバイスの名前。ip_address(文字列、任意) — ブリッジインターフェースに割り当てられる IP アドレス。netmask(文字列、任意) — ブリッジネットワークのサブネットマスク。dhcp_start(文字列、任意) — DHCP 割り当てプールの開始 IP アドレス。dhcp_end(文字列、任意) — DHCP 割り当てプールの終了 IP アドレス。autostart(ブーリアン、任意) — ホストの起動時に仮想スイッチを自動的に起動するかどうか。デフォルトはtrue。domain(文字列、任意) — DHCP クライアントに割り当てる DNS ドメイン名プレフィックス。
ローカル開発用コンパイル
開発またはカスタムプロバイダーの変更をローカルでテストするために、次のコマンドを使用してソースからプロバイダーバイナリをビルドできます。
go build -o terraform-provider-cockpit