modules/vcenter-vm/main.tf (72 lines of code) (raw):
/**
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
data "vsphere_datacenter" "datacenter" {
name = var.datacenter
}
data "vsphere_compute_cluster" "cluster" {
name = var.cluster
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_datastore" "datastore" {
name = var.datastore
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_resource_pool" "resource_pool" {
name = var.resource_pool
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_network" "network" {
name = var.network
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_storage_policy" "storage_policy" {
for_each = { for k, v in var.disks : v.storage_policy => k... }
name = each.key
}
data "vsphere_storage_policy" "default_storage_policy" {
name = var.default_storage_policy_id
}
resource "vsphere_virtual_machine" "vsphere_vm" {
name = var.vm_name
datastore_id = data.vsphere_datastore.datastore.id
resource_pool_id = data.vsphere_resource_pool.resource_pool.id
folder = var.folder
guest_id = var.guest_os_type
annotation = var.annotation
num_cpus = var.num_cpu
memory = var.num_memory
wait_for_guest_net_timeout = 0
network_interface {
network_id = data.vsphere_network.network.id
}
dynamic "cdrom" {
for_each = try(var.cdrom_path, null) == null ? {} : { 0 = var.cdrom_path }
content {
datastore_id = data.vsphere_datastore.datastore.id
path = cdrom.value
}
}
dynamic "disk" {
for_each = var.disks
content {
label = disk.key
size = disk.value.size
thin_provisioned = disk.value.thin_provisioned
unit_number = disk.value.unit_number
storage_policy_id = lookup(data.vsphere_storage_policy.storage_policy, disk.value.storage_policy, data.vsphere_storage_policy.default_storage_policy).id
}
}
}