自前のProxmox環境にVMやコンテナを立てるためのTerraformフレームワーク。
基本的なコマンドは、Taskfileに集約し、基礎となる環境ファイルはtemplateディレクトリに格納している。
公式のドキュメントはこちら。
絶賛3.0.1開発中のProxmox Providerのリポジトリはこちら。
- Terraform: v1.13.3
- Proxmox: 8.3.4
- proxmox provider: 3.0.1-rc6
- Containerに関しては、
rc5,rc6においてこちらのISSUEが存在するため、rc4を使用している
- Containerに関しては、
$ terraform version
Terraform v1.13.3まず、以下のようにロール、ユーザーを作成し、作成したロールをユーザーに割り当てる。 以下のコマンドはPVEクラスタのノード上であればどこで実行しても良い。 また、GUIでも作成可能だがRoleは多少面倒なのでRoleだけはコマンドで作成するのがおすすめ。
$ pveum role add TerraformProv -privs "Datastore.AllocateSpace Datastore.Audit Pool.Allocate Sys.Audit Sys.Console Sys.Modify VM.Allocate VM.Audit VM.Clone VM.Config.CDROM VM.Config.Cloudinit VM.Config.CPU VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Migrate VM.Monitor VM.PowerMgmt SDN.Use"$ pveum user add terraform-prov@pve --password <password>$ pveum aclmod / -user terraform-prov@pve -role TerraformProv最後に作成したユーザーを用いてGUI上で任意のidでトークンを作成する。 以下のような画面が出ればOK
- TOKENをべたがきするようになっているため、流出に注意
$ task create-provider
# modules/proxmox_vm/provider.tf及び
# modules/proxmox_lxc/provider.tfが作成されるprovider.tfにProxmox API Tokenの情報を記述する
以下のコマンドをproxmoxのノード上で実行する
スクリプトはこちらを参考にしました。
コピペ用はこちら。
$ wget https://cloud-images.ubuntu.com/oracular/current/oracular-server-cloudimg-amd64.img -O ubuntu-24.10-server-cloudimg-amd64.img
# Base VM configuration
$ qm create 9200 --net0 virtio,bridge=vmbr0
$ qm importdisk 9200 ubuntu-24.10-server-cloudimg-amd64.img local-lvm
$ qm set 9200 --name ubuntu-24.10a
$ qm set 9200 --scsihw virtio-scsi-pci --virtio0 local-lvm:vm-9200-disk-0
$ qm set 9200 --boot order=virtio0
$ qm set 9200 --ide2 local-lvm:cloudinit
$ qm set 9200 --nameserver 127.0.0.53 --searchdomain localdomain
# Convert VM to VM Template
$ qm template 9200- 以下のコマンドでenvを作成する
$ task create-vm -- VM_NAME
$ task create-ct -- CT_NAMEenvs/dev/terraform.tfvarsを適宜編集する
以下はざっくりした説明
- hostname : VMのホスト名
- username : VMにログインするユーザ名
- public_key : VMにログインするための公開鍵
- cores : CPUのコア数
- memory : メモリのサイズ (MB)
- disk_size : ディスクのサイズ (GB)
- ip_address : VMに割り当てるIPアドレス
- gateway : VMに割り当てるゲートウェイ
- target_node : Proxmoxのノード名
- template : VMのテンプレート名
- storage : VMのストレージ名
- bride : VMに割り当てるネットワークブリッジ
- vmid : VMのID
$ cd envs/dev
$ make tf-init
$ make tf-applyこちらに詳しい手順が記載されています。
- Proxmox VEとTerraformでインターン生に仮想マシンを払い出す話 詳しい説明は、それぞれのTemplateのREADMEを参照
