
Check the Examples from below link for vSphere.
https://www.terraform.io/docs/providers/vsphere/index.html
Topic
Connect to vSphere via Terraform
Create Folder
Create Resource Pool
Create a VM
Create a VM from Template
Prerequisite:
- Terraform Installed
- vSphere Environment
- vCenter/ESXi username and password
- Text editor (Visual Studio Code )
Lets start building code for vSphere.
Connect to vSphere via Terraform:
# Configuration for vSphere Provider
provider "vsphere" {
user = "[email protected]"
password = "VMware1!"
vsphere_server = "bdl-lab-vcs01.bdl.local"
# using self signed cert
allow_unverified_ssl = true
}
Now Define few variables before starting this.
/* =======================================================================
Datacenter level details Start
=========================================================================*/
# Use to mention datacenter here we have bdl-lab-01
data "vsphere_datacenter" "dc" {
name = "BDL-LAB-01"
}
# Use to mention cluster in datacenter here we ComputeCluster01
variable "cluster" {
default = "ComputeCluster01"
}
# Declare a compute cluster
data "vsphere_compute_cluster" "compute_cluster" {
name = "${var.cluster}"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
/* ====================================================================
Datacenter level details End
====================================================================== */
2. Create Folder
# Use for creating folder under VM view, give name under path only
resource “vsphere_folder” “TerraformFolder” {
path = “TerraformFolder”
type = “vm”
datacenter_id = “${data.vsphere_datacenter.dc.id}”
}
# Provide a resource pool name here i am using Terraform-Resource-Pool
resource “vsphere_resource_pool” “resource_pool” {
name = “Terraform-Resource-Pool”
parent_resource_pool_id = “${data.vsphere_compute_cluster.compute_cluster.resource_pool_id}”
}
# Provide Datastore name for VM
data “vsphere_datastore” “datastore” {
name = “VSANNFS04”
datacenter_id = “${data.vsphere_datacenter.dc.id}”
}
# Provide Network Name
data “vsphere_network” “network” {
name = “VM Network”
datacenter_id = “${data.vsphere_datacenter.dc.id}”
}

Note: Below code is for a New VM Creation
resource "vsphere_virtual_machine" "vm" {
# VM name here
name = "Terraform-VM01"
# this is picked up from parent_resouce_pool_id line
resource_pool_id = "${data.vsphere_compute_cluster.compute_cluster.resource_pool_id}"
datastore_id = "${data.vsphere_datastore.datastore.id}"
num_cpus = 1
memory = 512
guest_id = "other3xLinux64Guest"
network_interface {
network_id = "${data.vsphere_network.network.id}"
}
disk {
label = "disk0"
size = 10
}
}Below is the code to create a VM from Template.
data “vsphere_virtual_machine” “template” {
name = “CentOS7-Template”
datacenter_id = “${data.vsphere_datacenter.dc.id}”
}
resource “vsphere_virtual_machine” “vm” {
name = “Terraform-VM01”
resource_pool_id = “${data.vsphere_compute_cluster.compute_cluster.resource_pool_id}”
datastore_id = “${data.vsphere_datastore.datastore.id}”
num_cpus = 1
memory = 512
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 = “${data.vsphere_virtual_machine.template.network_interface_types[0]}”
}
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}”
}
}

Lets see the output.



Lets check the vSphere

If you search VM then it appears under VM


Leave a Reply