@@ -32,10 +32,25 @@ data "vsphere_network" "network" {
3232}
3333
3434data "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+
3954data "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
5772locals {
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
0 commit comments