From eb19e05995f1136f7d339b707cadd49769e7680b Mon Sep 17 00:00:00 2001 From: djpbessems Date: Wed, 31 Mar 2021 09:27:34 +0200 Subject: [PATCH] Initial draft w/ new vsphere provider --- terraform/DC01.tf | 53 ++++++++++++++++++++++------------- terraform/SRV01.tf | 56 ++++++++++++++++++++++--------------- terraform/contentlibrary.tf | 28 ------------------- terraform/main.tf | 25 +++++++++-------- terraform/variables.tf | 34 ++++++++++++++-------- terraform/vm.tfvars | 13 +++++++++ terraform/vsphere.tfvars | 18 ++++++------ 7 files changed, 125 insertions(+), 102 deletions(-) delete mode 100644 terraform/contentlibrary.tf create mode 100644 terraform/vm.tfvars diff --git a/terraform/DC01.tf b/terraform/DC01.tf index 55ef4f2..24145eb 100644 --- a/terraform/DC01.tf +++ b/terraform/DC01.tf @@ -1,11 +1,26 @@ -resource "vsphere_virtual_machine" "TF-DC01" { - name = "TF-DC01" +data "vsphere_ovf_vm_template" { + name = "ovf-dc" resource_pool_id = data.vsphere_resource_pool.pool.id - datastore_id = data.vsphere_datastore.vmdatastore.id + datastore_id = data.vpshere_datastore.datastore.id + host_system_id = data.vsphere_host.host.id + + remote_ovf_url = "https://${var.repo_username}:${var.repo_password}@sn.itch.fyi/Repository/rel/ADDS-appliance.ova" + deployment_option = "standalone" +} + +resource "vsphere_virtual_machine" "vm-dc" { + name = "TF-DC01" + + num_cpus = var.vm_numcpu + memory = var.vm_memory + + datacenter_id = data.vsphere_datacenter.dc.id folder = var.vsphere_vmfolder - num_cpus = 2 - memory = 4096 + guest_id = data.vsphere_ovf_vm_template.ovf-dc.guest_id + resource_pool_id = data.vsphere_ovf_vm_template.ovf-dc.resource_pool_id + datastore_id = data.vsphere_ovf_vm_template.ovf-dc.datastore_id + host_system_id = data.vsphere_ovf_vm_template.ovf-dc.host_system_id network_interface { network_id = data.vsphere_network.network.id @@ -18,34 +33,32 @@ resource "vsphere_virtual_machine" "TF-DC01" { thin_provisioned = true } + ovf_deploy { + remote_ovf_url = data.vsphere_ovf_vm_template.ovf-dc.remote_ovf_url + deployment_option = data.vsphere_ovf_vm_template.ovf-dc.deployment_option + } + vapp { properties = { - # "deployment.type" = "primary" - "guestinfo.hostname" = "TF-DC01" "guestinfo.ipaddress" = "10.0.0.21" "guestinfo.prefixlength" = "24" - # "guestinfo.dnsserver" = "0.0.0.0" "guestinfo.gateway" = "10.0.0.1" - "addsconfig.domainname" = "srv.io" - "addsconfig.netbiosname" = "SRV" + "addsconfig.domainname" = var.adds_domainname + "addsconfig.netbiosname" = var.adds_netbiosname "addsconfig.administratorpw" = var.adds_password "addsconfig.safemodepw" = var.adds_password - "addsconfig.ntpserver" = "0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org" + "addsconfig.ntpserver" = var.adds_ntpserver - # "dhcpconfig.startip" = "10.0.0.50" - # "dhcpconfig.endip" = "10.0.0.250" - # "dhcpconfig.subnetmask" = "255.255.255.0" - # "dhcpconfig.gateway" = "10.0.0.1" - # "dhcpconfig.leaseduration" = "01:00:00.00" + "dhcpconfig.startip" = var.dhcp_startip + "dhcpconfig.endip" = var.dhcp_endip + "dhcpconfig.subnetmask" = var.dhcp_subnetmask + "dhcpconfig.gateway" = var.dhcp_gateway + "dhcpconfig.leaseduration" = var.dhcp_leaseduration } } - clone { - template_uuid = vsphere_content_library_item.ADDS.id - } - # # This does not actually achieve protection from destruction, see https://github.com/hashicorp/terraform/issues/17599 # lifecycle { # prevent_destroy = true diff --git a/terraform/SRV01.tf b/terraform/SRV01.tf index 89d1f23..d5ece89 100644 --- a/terraform/SRV01.tf +++ b/terraform/SRV01.tf @@ -1,11 +1,26 @@ -resource "vsphere_virtual_machine" "TF-SRV01" { - name = "TF-SRV01" +data "vsphere_ovf_vm_template" { + name = "ovf-srv" resource_pool_id = data.vsphere_resource_pool.pool.id - datastore_id = data.vsphere_datastore.vmdatastore.id + datastore_id = data.vpshere_datastore.datastore.id + host_system_id = data.vsphere_host.host.id + + remote_ovf_url = "https://${var.repo_username}:${var.repo_password}@sn.itch.fyi/Repository/rel/Windows-Server-2019-LTSC.ova" + deployment_option = "domainmember" +} + +resource "vsphere_virtual_machine" "vm-srv" { + name = "TF-SRV01" + + num_cpus = var.vm_numcpu + memory = var.vm_memory + + datacenter_id = data.vsphere_datacenter.dc.id folder = var.vsphere_vmfolder - num_cpus = 2 - memory = 4096 + guest_id = data.vsphere_ovf_vm_template.ovf-srv.guest_id + resource_pool_id = data.vsphere_ovf_vm_template.ovf-srv.resource_pool_id + datastore_id = data.vsphere_ovf_vm_template.ovf-srv.datastore_id + host_system_id = data.vsphere_ovf_vm_template.ovf-srv.host_system_id network_interface { network_id = data.vsphere_network.network.id @@ -24,30 +39,27 @@ resource "vsphere_virtual_machine" "TF-SRV01" { thin_provisioned = true } + ovf_deploy { + remote_ovf_url = data.vsphere_ovf_vm_template.ovf-srv.remote_ovf_url + deployment_option = data.vsphere_ovf_vm_template.ovf-srv.deployment_option + } + vapp { properties = { - # "deployment.type" = "standalone" + "guestinfo.hostname" = "TF-SRV01" + "guestinfo.ipaddress" = "10.0.0.42" + "guestinfo.prefixlength" = "24" + "guestinfo.dnsserver" = "10.0.0.21" + "guestinfo.gateway" = "10.0.0.1" - "guestinfo.hostname" = "TF-SRV01" - # "guestinfo.administratorpw" = "Secret123!" - # "guestinfo.ntpserver" = "0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org" - "guestinfo.ipaddress" = "10.0.0.42" - "guestinfo.prefixlength" = "24" - "guestinfo.dnsserver" = "10.0.0.21" - "guestinfo.gateway" = "10.0.0.1" - - "addsconfig.domainname" = "srv.io" - "addsconfig.username" = "SRV\\Administrator" - "addsconfig.password" = var.adds_password + "addsconfig.domainname" = var.adds_domainname + "addsconfig.username" = var.adds_username + "addsconfig.password" = var.adds_password } } - clone { - template_uuid = vsphere_content_library_item.Server2019.id - } - depends_on = [ - vsphere_virtual_machine.TF-DC01 + vsphere_virtual_machine.vm-dc ] # # This does not actually achieve protection from destruction, see https://github.com/hashicorp/terraform/issues/17599 diff --git a/terraform/contentlibrary.tf b/terraform/contentlibrary.tf deleted file mode 100644 index 85ad934..0000000 --- a/terraform/contentlibrary.tf +++ /dev/null @@ -1,28 +0,0 @@ -resource "vsphere_content_library" "library" { - name = "OVA appliances" - storage_backing = flatten([ - data.vsphere_datastore.cldatastore.id - ]) -} - -resource "vsphere_content_library_item" "Server2019" { - name = "Windows-Server-2019-LTSC" - library_id = vsphere_content_library.library.id - file_url = "https://${var.repo_username}:${var.repo_password}@sn.itch.fyi/Repository/rel/Windows-Server-2019-LTSC.ova" -} -resource "vsphere_content_library_item" "ADCS" { - name = "ADCS-appliance" - library_id = vsphere_content_library.library.id - file_url = "https://${var.repo_username}:${var.repo_password}@sn.itch.fyi/Repository/rel/ADCS-appliance.ova" -} -resource "vsphere_content_library_item" "ADDS" { - name = "ADDS-appliance" - library_id = vsphere_content_library.library.id - file_url = "https://${var.repo_username}:${var.repo_password}@sn.itch.fyi/Repository/rel/ADDS-appliance.ova" -} - -resource "vsphere_content_library_item" "Win10" { - name = "Windows 10" - library_id = vsphere_content_library.library.id - file_url = "https://${var.repo_username}:${var.repo_password}@sn.itch.fyi/Repository/rel/Windows10.ova" -} \ No newline at end of file diff --git a/terraform/main.tf b/terraform/main.tf index 96102a3..202b13b 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -4,38 +4,39 @@ terraform { required_providers { vsphere = { source = "hashicorp/vsphere" - version = "~> 1.24.3" + version = "~> 1.25.0" } } } provider "vsphere" { - vsphere_server = var.vcenter_server - user = var.vsphere_username - password = var.vsphere_password + vsphere_server = var.hv_fqdn + user = var.hv_username + password = var.hv_password allow_unverified_ssl = true } data "vsphere_datacenter" "dc" { - name = var.vsphere_datacenter + name = var.hv_datacenter } data "vsphere_resource_pool" "pool" { - name = "/${var.vsphere_datacenter}/host/${var.vsphere_host}/Resources" + name = "/${var.hv_datacenter}/host/${var.hv_host}/Resources" datacenter_id = data.vsphere_datacenter.dc.id } -data "vsphere_datastore" "vmdatastore" { - name = var.vsphere_vmdatastore - datacenter_id = data.vsphere_datacenter.dc.id +data "vsphere_host" "host" { + name = var.hv_host + datacenter = data.vsphere_datacenter.dc.id } -data "vsphere_datastore" "cldatastore" { - name = var.vsphere_cldatastore + +data "vsphere_datastore" "datastore" { + name = var.hv_datastore datacenter_id = data.vsphere_datacenter.dc.id } data "vsphere_network" "network" { - name = var.vsphere_network + name = var.hv_network datacenter_id = data.vsphere_datacenter.dc.id } \ No newline at end of file diff --git a/terraform/variables.tf b/terraform/variables.tf index db5d2f4..d43d1f5 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -1,17 +1,29 @@ -variable "vcenter_server" {} -variable "vsphere_username" {} -variable "vsphere_password" {} +variable "hv_fqdn" {} +variable "hv_username" {} +variable "hv_password" {} -variable "vsphere_datacenter" {} -variable "vsphere_host" {} -variable "vsphere_hostip" {} +variable "hv_datacenter" {} +variable "hv_host" {} +variable "hv_hostip" {} -variable "vsphere_vmdatastore" {} -variable "vsphere_cldatastore" {} -variable "vsphere_vmfolder" {} -variable "vsphere_network" {} +variable "hv_datastore" {} +variable "hv_vmfolder" {} +variable "hv_network" {} variable "repo_username" {} variable "repo_password" {} -variable "adds_password" {} \ No newline at end of file +variable "vm_numcpu" {} +variable "vm_memory" {} + +variable "adds_domainname" {} +variable "adds_netbiosname" {} +variable "adds_username" {} +variable "adds_password" {} +variable "adds_ntpserver" {} + +variable "dhcp_startip" {} +variable "dhcp_endip" {} +variable "dhcp_subnetmask" {} +variable "dhcp_gateway" {} +variable "dhcp_leaseduration" {} \ No newline at end of file diff --git a/terraform/vm.tfvars b/terraform/vm.tfvars new file mode 100644 index 0000000..85ffc0f --- /dev/null +++ b/terraform/vm.tfvars @@ -0,0 +1,13 @@ +vm_numcpu = 2 +vm_memory = 4096 + +adds_domainname = "srv.io" +adds_netbiosname = "SRV" +adds_username = "SRV\\Administrator" +adds_ntpserver = "0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org" + +dhcp_startip = "10.0.0.50" +dhcp_endip = "10.0.0.250" +dhcp_subnetmask = "255.255.255.0" +dhcp_gateway = "10.0.0.1" +dhcp_leaseduration = "01:00:00.00" \ No newline at end of file diff --git a/terraform/vsphere.tfvars b/terraform/vsphere.tfvars index 8430386..8f8581b 100644 --- a/terraform/vsphere.tfvars +++ b/terraform/vsphere.tfvars @@ -1,9 +1,9 @@ -vcenter_server = "bv11-vc01.bessems.lan" -vsphere_username = "administrator@vsphere.local" -vsphere_datacenter = "DeSchakel" -vsphere_host = "bv11-esx.bessems.eu" -vsphere_hostip = "192.168.11.200" -vsphere_vmdatastore = "Datastore02.SSD" -vsphere_cldatastore = "Datastore01.NAS" -vsphere_vmfolder = "/Terraform" -vsphere_network = "Isolated" +hv_server = "bv11-vc01.bessems.lan" +hv_username = "administrator@vsphere.local" +hv_datacenter = "DeSchakel" +hv_host = "bv11-esx.bessems.eu" +hv_hostip = "192.168.11.200" +hv_vmdatastore = "Datastore02.SSD" +hv_cldatastore = "Datastore01.NAS" +hv_vmfolder = "/Terraform" +hv_network = "Isolated"