概要
とりあえず動かしてみたい人向けです
クローン元の VM は事前に作成してあることが前提です
環境
- vSphere 6.7.0.30000
- terraform v0.12.1
- CentOS 7.7.1908
事前準備
今回はクローンすることで VM を作成します
またストレージやネットワークなども事前に準備済みとします
tf ファイル
おそらくクローンで VM を作成する際の最低限の設定になります
vim resources.tf
variable "vsphere_user" {}
variable "vsphere_password" {}
variable "vsphere_server" {}
provider "vsphere" {
user = "${var.vsphere_user}"
password = "${var.vsphere_password}"
vsphere_server = "${var.vsphere_server}"
allow_unverified_ssl = true
}
data "vsphere_datacenter" "dc" {
name = "dc1"
}
data "vsphere_datastore" "datastore" {
name = "datastore1"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_compute_cluster" "cluster" {
name = "cluster1"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_network" "network" {
name = "network1"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_virtual_machine" "template" {
name = "seed_vm1"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
resource "vsphere_virtual_machine" "vm" {
name = "terraform-test"
resource_pool_id = "${data.vsphere_compute_cluster.cluster.resource_pool_id}"
datastore_id = "${data.vsphere_datastore.datastore.id}"
num_cpus = 2
memory = 1024
guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
network_interface {
network_id = "${data.vsphere_network.network.id}"
adapter_type = "vmxnet3"
}
disk {
label = "disk0"
size = "${data.vsphere_virtual_machine.template.disks.0.size}"
eagerly_scrub = "${data.vsphere_virtual_machine.template.disks.0.eagerly_scrub}"
thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
}
clone {
template_uuid = "${data.vsphere_virtual_machine.template.id}"
customize {
linux_options {
host_name = "terraform-test"
domain = "test.internal"
}
network_interface {
ipv4_address = "192.168.100.11"
ipv4_netmask = 24
}
ipv4_gateway = "192.168.100.1"
}
}
}
動作確認
terraform init
terraform plan -var 'vsphere_user=administrator@vsphere.local' -var 'vsphere_password=xxxxxxxxxx' -var 'vsphere_server=192.168.100.10'
terraform apply -var 'vsphere_user=administrator@vsphere.local' -var 'vsphere_password=xxxxxxxxxx' -var 'vsphere_server=192.168.100.10'
削除
terraform destroy -var 'vsphere_user=administrator@vsphere.local' -var 'vsphere_password=xxxxxxxxxx' -var 'vsphere_server=192.168.100.10'
軽く解説
使っている terraform の機能 (リソース) は variable
, provider
, data
そして resource
になります
実際に VM を作成しているのは resource
になります
variable
はその名の通り変数を定義しています
今回は vCenter の「ログインユーザ名」「パスワード」「アドレス」を変数にしています
.tf
ファイル内に書いても問題ないですが今回は実行時に引数で実行するようにしました
provider
は vSphere Provider を使う定義をしています
変数で設定した認証情報はここに設定します
data
は vSphere 内の各リソース (データセンターやクラスタ、データストア、ネットワーク、テンプレートなど) を定義します
各リソース内で datacenter_id
を指定しています
これは Moref で取得できる ID で名前ではありません
terraform では ${data.vsphere_datacenter.dc.id}
という感じで事前に定義したデータセンターの data
を使うことで自動的に Moref からデータセンターの ID を引っ張ってきて設定してくれます
ID を引っ張ってくるのは terraform plan
時に取得して確認します
Provider が提供する参照可能なデータはリファレンスを見ると良いです
resourece
で VM の作成を行います
今回はクローンして VM を作成するので vsphere_virtual_machine.clone
リソースを使います
ここでクローン元の VM を指定します
template_uuid
には事前に data
で定義した data "vsphere_virtual_machine" "template"
から id
を参照すれば OK です
あとはディスクの情報とネットワークの情報を指定すれば OK です
今回は作成する VM の IP アドレスは固定 IP を指定するので IP の情報も記載しました
DHCP 環境のネットワークであれば IP アドレスやゲートウェイの指定は不要です
それ以外の情報はクローン元の VM と同じにするので ${data.vsphere_virtual_machine.template.disks.0.size}
みたいな感じでクローン元の VM の情報を参照しています
最後に
Terraform vSphere をとりあえず動かしてみました
今回は紹介しませんでしたが実はポイントはクローン元の VM でこっちがちゃんと設定できていないと apply に失敗します
例えば vmware-tools のインストール漏れやネットワークインタフェースの設定が漏れていると IP アドレスが取得できなくてエラーになることがあります
vSphere Provider で VM がうまく作成できない場合は大抵ネットワーク周りかなと思います
あとは今回はすべてのリソースを resources.tf
配下に作成しましたが terraform は *.tf
ファイルを自動で読み込んでくれるので各リソースごとに設定などをまとめたりできます
0 件のコメント:
コメントを投稿