マニュアルはこちらです
https://registry.terraform.io/providers/hashicorp/vsphere/latest/docs
リソースプール、フォルダ、ネットワークを作成してそれを利用する仮想マシンを展開しようと思います。
作業前の状態は以下です。
vSphere 側の準備
仮想マシン展開用のテンプレートになる仮想マシンを用意します。
今回はこのシリーズの「その2」で使用したUbuntuを使用したいと思います。
では、今回もこのTerraform実行ののディレクトリを作成し、そこに作成済みのログイン用のtfファイルをコピーしてください。
今回ですが、各リソース毎にtfファイルを作成して管理しやすくしようと思います。
そのため、共通で使う既存リソースを記載したdata.tfを用意し参照するようにします。
data.tf
# データセンターの取得
data "vsphere_datacenter" "dc" {
name = "DC01"
}
# データストアの取得
data "vsphere_datastore" "datastore" {
name = "nfs01"
datacenter_id = data.vsphere_datacenter.dc.id
}
# クラスタの取得
data "vsphere_compute_cluster" "cluster" {
name = "CL01"
datacenter_id = data.vsphere_datacenter.dc.id
}
# テンプレートVMの取得
data "vsphere_virtual_machine" "template" {
name = "ubuntu-tmp"
datacenter_id = data.vsphere_datacenter.dc.id
}
# vCenter上の分散スイッチの取得
data "vsphere_distributed_virtual_switch" "dvs" {
name = "DSwitch"
datacenter_id = data.vsphere_datacenter.dc.id
}
では、各リソース毎のtfファイルを作成していきましょう・リソースプールのtfファイ名:resource_pool.tf
・フォルダのtfファイ名:vm_folder.tf
・ネットワークのtfファイ名:vm_network.tf
・仮想マシンのtfファイ名:test_vm04.tf
resource_pool.tf
resource "vsphere_resource_pool" "rp" {
name = "Terraform-rp"
parent_resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
# CPU/メモリのリソース設定(必要に応じて変更可能。デフォルトは制限なし)
cpu_share_level = "normal"
memory_share_level = "normal"
}
vm_folder.tf
resource "vsphere_folder" "vm_folder" {
path = "Terraform-vm"
type = "vm"
datacenter_id = data.vsphere_datacenter.dc.id
}
vm_network.tf
resource "vsphere_distributed_port_group" "pg" {
name = "Terraform-vm-nw"
distributed_virtual_switch_uuid = data.vsphere_distributed_virtual_switch.dvs.id
# VLAN ID
vlan_id = 100
}
test_vm04.tf
resource "vsphere_virtual_machine" "vm" {
name = "test-vm-04"
# 作成したリソースプール "Terraform-rp" を指定
resource_pool_id = vsphere_resource_pool.rp.id
# 作成したフォルダ "Terraform-vm" を指定
folder = vsphere_folder.vm_folder.path
datastore_id = data.vsphere_datastore.datastore.id
num_cpus = 2
memory = 2048
guest_id = data.vsphere_virtual_machine.template.guest_id
firmware = data.vsphere_virtual_machine.template.firmware
wait_for_guest_net_timeout = 0 #ネットワーク設定をしていないので確認をキャンセル
network_interface {
# 作成した分散ポートグループ "Terraform-vm-nw" を指定
network_id = vsphere_distributed_port_group.pg.id
adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
}
disk {
label = "disk0"
size = data.vsphere_virtual_machine.template.disks.0.size
eagerly_scrub = false
thin_provisioned = true
}
clone {
template_uuid = data.vsphere_virtual_machine.template.id
linked_clone = true
}
}
実際に実行してみます。
terraform init terraform plan terraform apply以下のように各リソースが作成されていることが確認できたので成功です。 この様に、各tfファイルを揃えておくと terraform apply で一度に作ってくれます。
ちなみ、terraform destroy すると一発で全部消えてしまうのでその点はご注意ください。





