Skip to content

Instantly share code, notes, and snippets.

@joe-at-cp
Created August 25, 2020 15:14
Show Gist options
  • Select an option

  • Save joe-at-cp/82498b875ac08165564967b6da1dff10 to your computer and use it in GitHub Desktop.

Select an option

Save joe-at-cp/82498b875ac08165564967b6da1dff10 to your computer and use it in GitHub Desktop.
Terraform - VMware Deploy VM From Template With Generated Config Drive ISO
provider "vsphere" {
user = var.vsphere_user
password = var.vsphere_password
vsphere_server = var.vsphere_server
# If you have a self-signed cert
allow_unverified_ssl = true
}
data "vsphere_datacenter" "dc" {
name = "Datacenter"
}
data "vsphere_datastore" "datastore" {
name = "datastore1"
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_resource_pool" "pool" {
name = "LabNet"
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_network" "network" {
name = "Lan"
datacenter_id = data.vsphere_datacenter.dc.id
}
#Generate config ISO
resource "null_resource" "genisoimage" {
provisioner "local-exec" {
command = "genisoimage -r -V config-2 -o config.iso config/"
}
}
#Upload Config Drive to Datastore
resource "vsphere_file" "config_drive" {
depends_on = ["null_resource.genisoimage"]
datacenter = data.vsphere_datacenter.dc.name
datastore = data.vsphere_datastore.datastore.name
source_file = "/home/dev/Terraform/VMware/config.iso"
destination_file = "/ISO/config.iso"
}
data "vsphere_virtual_machine" "template" {
name = "Check_Point_R80.40_T48_06012020"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
resource "vsphere_virtual_machine" "vm" {
depends_on = ["vsphere_file.config_drive"]
name = "Check_Point_R80.40"
resource_pool_id = data.vsphere_resource_pool.pool.id
datastore_id = data.vsphere_datastore.datastore.id
num_cpus = 2
memory = 4096
guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
wait_for_guest_net_routable = false
wait_for_guest_ip_timeout = 0
wait_for_guest_net_timeout = 0
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}"
}
cdrom {
datastore_id = data.vsphere_datastore.datastore.id
path = "ISO/config.iso"
}
clone {
template_uuid = "${data.vsphere_virtual_machine.template.id}"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment