Terraform with VMware vSphere

Check the Examples from below link for vSphere.

https://www.terraform.io/docs/providers/vsphere/index.html

Topic

  1. Connect to vSphere via Terraform

  2. Create Folder

  3. Create Resource Pool

  4. Create a VM

  5. Create a VM from Template

Prerequisite:

  1. Terraform Installed
  2. vSphere Environment
  3. vCenter/ESXi username and password
  4. Text editor (Visual Studio Code )

Lets start building code for vSphere.

  1. 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

}
Screen Shot 2020-04-13 at 12.27.34 a.m..jpg

 

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

====================================================================== */
Screen Shot 2020-04-13 at 12.50.18 a.m..jpg

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}”
}
Screen Shot 2020-04-13 at 12.52.17 a.m..jpg
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}”
}
}
Screen Shot 2020-04-13 at 12.58.57 a.m..jpg
Lets see the output.
Screen Shot 2020-04-13 at 1.00.06 a.m..jpg
Screen Shot 2020-04-13 at 1.00.16 a.m..jpg
Screen Shot 2020-04-13 at 1.00.31 a.m..jpg
Lets check the vSphere
Screen Shot 2020-04-13 at 1.03.42 a.m..jpg
If you search VM then it appears under VM
Screen Shot 2020-04-13 at 1.04.28 a.m..jpg
Screen Shot 2020-04-13 at 1.39.04 a.m..jpg

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.