Skip to content

Terraform

どのファイルが何を担うか、モジュールで何を指定できるかを示す。 追加と変更の手順は 運用 を参照する。

ルートモジュール

作業ディレクトリは常に terraform/ にする。

ファイル 役割
backend.tf GCS バックエンド(pve-state / terraform/state)
provider.tf bpg/proxmox プロバイダ
variables.tf Proxmox 接続用の入力変数
vms.tf VM の module 呼び出し(定義の正)
lxcs.tf LXC の module 呼び出し(定義の正)
modules/vm/ VM 用再利用モジュール
modules/lxc/ LXC 用再利用モジュール

一時ファイル

既存リソースの import 時のみ imports.tf を一時作成する。 手順は 既存リソースの import を参照する。

設計上のポイント

  • VM と LXC はそれぞれ 1 リソースを 1 つの module ブロックにする
  • ノード未指定のとき、VM モジュールは pve に置く
  • cloud-init 利用時は snippet を Proxmox にアップロードするため、ノードへの SSH(root)が必要である
  • import 時の差分抑制のため、一部属性で lifecycle.ignore_changes を使う(例: VM の description、LXC の timeout_*)

modules/vm の主な変数

変数 説明
vm_id VM ID
name VM 名
node_name Proxmox ノード名(デフォルト: pve)
cores / memory / disk CPU、メモリ、ディスクサイズ
on_boot ホスト起動時に VM を起動するか
started apply 時に起動状態にするか(デフォルト: true)
bios seabios または ovmf
cdrom ISO のマウント(オプション)
efi_disk OVMF 利用時の EFI ディスク(オプション)
serial_device シリアルデバイス(オプション)
disk_import_from cloud image 等の import 元(オプション)
cloud_init cloud-init 設定(オプション)
network_device NIC(cloud_init 時未指定なら vmbr0)

terraform/modules/vm/cloud-init/ に cloud-init テンプレートがあり、未指定時は ubuntu-base を使う。

modules/lxc の主な変数

変数 説明
vm_id コンテナ ID
node_name Proxmox ノード名
unprivileged 非特権コンテナかどうか
start_on_boot ホスト起動時に起動するか
memory / disk / cpu リソース設定
network_interface ネットワーク設定
initialization ホスト名と IP / DNS 設定
operating_system テンプレートと OS タイプ
console コンソール設定(デフォルトあり)
features nesting など(デフォルトで nesting 有効)

モジュールは console にデフォルト(enabled=true, tty_count=2, type=tty)を持つため、通常は省略できる。

ログイン名とパスワードは変数に無い。 コンテナ内のユーザーはテンプレートの root で、パスワードを決める手順は 新規 LXC の追加 にある。

参考リンク