Skip to content

Commit 248752f

Browse files
committed
Support template from Content Library
Signed-off-by: Stéphane Este-Gracias <sestegra@gmail.com>
1 parent aa75060 commit 248752f

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

main.tf

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,25 @@ data "vsphere_network" "network" {
3232
}
3333

3434
data "vsphere_virtual_machine" "template" {
35+
count = var.content_library == null ? 1 : 0
3536
name = var.vmtemp
3637
datacenter_id = data.vsphere_datacenter.dc.id
3738
}
3839

40+
data "vsphere_content_library" "library" {
41+
count = var.content_library != null ? 1 : 0
42+
name = var.content_library
43+
depends_on = [var.tag_depends_on]
44+
}
45+
46+
data "vsphere_content_library_item" "library_item_template" {
47+
count = var.content_library != null ? 1 : 0
48+
library_id = data.vsphere_content_library.library[0].id
49+
type = "ovf"
50+
name = var.vmtemp
51+
depends_on = [var.tag_depends_on]
52+
}
53+
3954
data "vsphere_tag_category" "category" {
4055
count = var.tags != null ? length(var.tags) : 0
4156
name = keys(var.tags)[count.index]
@@ -56,7 +71,7 @@ data "vsphere_folder" "folder" {
5671

5772
locals {
5873
interface_count = length(var.ipv4submask) #Used for Subnet handeling
59-
template_disk_count = length(data.vsphere_virtual_machine.template.disks)
74+
template_disk_count = var.content_library == null ? length(data.vsphere_virtual_machine.template[0].disks) : 0
6075
}
6176

6277
// Cloning a Linux or Windows VM from a given template.
@@ -71,9 +86,9 @@ resource "vsphere_virtual_machine" "vm" {
7186
custom_attributes = var.custom_attributes
7287
annotation = var.annotation
7388
extra_config = var.extra_config
74-
firmware = var.firmware == null ? data.vsphere_virtual_machine.template.firmware : var.firmware
75-
efi_secure_boot_enabled = var.efi_secure_boot == null ? data.vsphere_virtual_machine.template.efi_secure_boot_enabled : var.efi_secure_boot
76-
enable_disk_uuid = var.enable_disk_uuid == null ? data.vsphere_virtual_machine.template.enable_disk_uuid : var.enable_disk_uuid
89+
firmware = var.content_library == null && var.firmware == null ? data.vsphere_virtual_machine.template[0].firmware : var.firmware
90+
efi_secure_boot_enabled = var.content_library == null && var.efi_secure_boot == null ? data.vsphere_virtual_machine.template[0].efi_secure_boot_enabled : var.efi_secure_boot
91+
enable_disk_uuid = var.content_library == null && var.enable_disk_uuid == null ? data.vsphere_virtual_machine.template[0].enable_disk_uuid : var.enable_disk_uuid
7792
storage_policy_id = var.storage_policy_id
7893

7994
datastore_cluster_id = var.datastore_cluster != "" ? data.vsphere_datastore_cluster.datastore_cluster[0].id : null
@@ -91,9 +106,9 @@ resource "vsphere_virtual_machine" "vm" {
91106
memory_hot_add_enabled = var.memory_hot_add_enabled
92107
memory_share_level = var.memory_share_level
93108
memory_share_count = var.memory_share_level == "custom" ? var.memory_share_count : null
94-
guest_id = data.vsphere_virtual_machine.template.guest_id
109+
guest_id = var.content_library == null ? data.vsphere_virtual_machine.template[0].guest_id : null
95110
scsi_bus_sharing = var.scsi_bus_sharing
96-
scsi_type = var.scsi_type != "" ? var.scsi_type : data.vsphere_virtual_machine.template.scsi_type
111+
scsi_type = var.scsi_type != "" ? var.scsi_type : (var.content_library == null ? data.vsphere_virtual_machine.template[0].scsi_type : null)
97112
scsi_controller_count = max(
98113
max(0, flatten([
99114
for item in values(var.data_disk) : [
@@ -116,19 +131,19 @@ resource "vsphere_virtual_machine" "vm" {
116131
for_each = keys(var.network) #data.vsphere_network.network[*].id #other option
117132
content {
118133
network_id = data.vsphere_network.network[network_interface.key].id
119-
adapter_type = var.network_type != null ? var.network_type[network_interface.key] : data.vsphere_virtual_machine.template.network_interface_types[0]
134+
adapter_type = var.network_type != null ? var.network_type[network_interface.key] : (var.content_library == null ? data.vsphere_virtual_machine.template[0].network_interface_types[0] : null)
120135
}
121136
}
122137
// Disks defined in the original template
123138
dynamic "disk" {
124-
for_each = data.vsphere_virtual_machine.template.disks
139+
for_each = var.content_library == null ? data.vsphere_virtual_machine.template[0].disks : []
125140
iterator = template_disks
126141
content {
127142
label = length(var.disk_label) > 0 ? var.disk_label[template_disks.key] : "disk${template_disks.key}"
128-
size = var.disk_size_gb != null ? var.disk_size_gb[template_disks.key] : data.vsphere_virtual_machine.template.disks[template_disks.key].size
143+
size = var.disk_size_gb != null ? var.disk_size_gb[template_disks.key] : data.vsphere_virtual_machine.template[0].disks[template_disks.key].size
129144
unit_number = var.scsi_controller != null ? var.scsi_controller * 15 + template_disks.key : template_disks.key
130-
thin_provisioned = data.vsphere_virtual_machine.template.disks[template_disks.key].thin_provisioned
131-
eagerly_scrub = data.vsphere_virtual_machine.template.disks[template_disks.key].eagerly_scrub
145+
thin_provisioned = data.vsphere_virtual_machine.template[0].disks[template_disks.key].thin_provisioned
146+
eagerly_scrub = data.vsphere_virtual_machine.template[0].disks[template_disks.key].eagerly_scrub
132147
datastore_id = var.disk_datastore != "" ? data.vsphere_datastore.disk_datastore[0].id : null
133148
storage_policy_id = length(var.template_storage_policy_id) > 0 ? var.template_storage_policy_id[template_disks.key] : null
134149
io_reservation = length(var.io_reservation) > 0 ? var.io_reservation[template_disks.key] : null
@@ -174,7 +189,7 @@ resource "vsphere_virtual_machine" "vm" {
174189
}
175190
}
176191
clone {
177-
template_uuid = data.vsphere_virtual_machine.template.id
192+
template_uuid = var.content_library == null ? data.vsphere_virtual_machine.template[0].id : data.vsphere_content_library_item.library_item_template[0].id
178193
linked_clone = var.linked_clone
179194
timeout = var.timeout
180195

tests/smoke/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ vm = {
1313
linuxvm = {
1414
vmname = "example-server-linux",
1515
vmtemp = "fill"
16+
content_library = null
1617
annotation = "Terraform Smoke Test"
1718
instances = 0
1819
is_windows_image = false

tests/smoke/main.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ variable "vm" {
77
type = map(object({
88
vmname = string
99
vmtemp = string
10+
content_library = string
1011
annotation = string
1112
dc = string
1213
vmrp = string
@@ -24,6 +25,7 @@ module "example-server-basic" {
2425
source = "../../"
2526
for_each = var.vm
2627
vmtemp = each.value.vmtemp
28+
content_library = each.value.content_library
2729
annotation = each.value.annotation
2830
is_windows_image = each.value.is_windows_image
2931
instances = each.value.instances

variables.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,11 @@ variable "vmtemp" {
128128
description = "Name of the template available in the vSphere."
129129
}
130130

131+
variable "content_library" {
132+
description = "Name of the content library where the OVF template is stored."
133+
default = null
134+
}
135+
131136
variable "instances" {
132137
description = "number of instances you want deploy from the template."
133138
default = 1

0 commit comments

Comments
 (0)