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 の追加 にある。