@@ -42,7 +42,8 @@ data "vsphere_tag" "tag" {
4242}
4343
4444locals {
45- len = length (var. ipv4submask ) # Used for Subnet handeling
45+ interface_count = length (var. ipv4submask ) # Used for Subnet handeling
46+ template_disk_count = length (data. vsphere_virtual_machine . template . disks )
4647}
4748
4849// Cloning a Linux VM from a given template. Note: This is the default option!!
@@ -81,21 +82,29 @@ resource "vsphere_virtual_machine" "Linux" {
8182 }
8283 }
8384
84- disk {
85- label = " disk0"
86- size = data. vsphere_virtual_machine . template . disks [0 ]. size
87- thin_provisioned = data. vsphere_virtual_machine . template . disks [0 ]. thin_provisioned
88- eagerly_scrub = data. vsphere_virtual_machine . template . disks [0 ]. eagerly_scrub
85+ // Disks defined in the original template
86+ dynamic "disk" {
87+ for_each = data. vsphere_virtual_machine . template . disks
88+ iterator = template_disks
89+ content {
90+ label = " disk${ template_disks . key } "
91+ size = data. vsphere_virtual_machine . template . disks [template_disks . key ]. size
92+ unit_number = template_disks. key
93+ thin_provisioned = data. vsphere_virtual_machine . template . disks [template_disks . key ]. thin_provisioned
94+ eagerly_scrub = data. vsphere_virtual_machine . template . disks [template_disks . key ]. eagerly_scrub
95+ }
8996 }
9097
98+ // Additional disks defined by Terraform config
9199 dynamic "disk" {
92100 for_each = var. data_disk_size_gb
101+ iterator = terraform_disks
93102 content {
94- label = " disk${ disk . key + 1 } "
95- size = var. data_disk_size_gb [disk . key ]
96- unit_number = disk . key + 1
97- thin_provisioned = var. thin_provisioned != null ? var. thin_provisioned [disk . key ] : null
98- eagerly_scrub = var. eagerly_scrub != null ? var. eagerly_scrub [disk . key ] : null
103+ label = " disk${ terraform_disks . key + local . template_disk_count } "
104+ size = var. data_disk_size_gb [terraform_disks . key ]
105+ unit_number = terraform_disks . key + local . template_disk_count
106+ thin_provisioned = var. thin_provisioned != null ? var. thin_provisioned [terraform_disks . key ] : null
107+ eagerly_scrub = var. eagerly_scrub != null ? var. eagerly_scrub [terraform_disks . key ] : null
99108 }
100109 }
101110
@@ -115,7 +124,7 @@ resource "vsphere_virtual_machine" "Linux" {
115124 for_each = var. network_cards
116125 content {
117126 ipv4_address = var. ipv4 [var . network_cards [network_interface . key ]][count . index ]
118- ipv4_netmask = " %{ if local . len == 1 } ${ var . ipv4submask [0 ]} %{ else } ${ var . ipv4submask [network_interface . key ]} %{ endif } "
127+ ipv4_netmask = " %{ if local . interface_count == 1 } ${ var . ipv4submask [0 ]} %{ else } ${ var . ipv4submask [network_interface . key ]} %{ endif } "
119128 }
120129 }
121130 dns_server_list = var. vmdns
@@ -160,21 +169,29 @@ resource "vsphere_virtual_machine" "Windows" {
160169 }
161170 }
162171
163- disk {
164- label = " disk0"
165- size = data. vsphere_virtual_machine . template . disks [0 ]. size
166- thin_provisioned = data. vsphere_virtual_machine . template . disks [0 ]. thin_provisioned
167- eagerly_scrub = data. vsphere_virtual_machine . template . disks [0 ]. eagerly_scrub
172+ // Disks defined in the original template
173+ dynamic "disk" {
174+ for_each = data. vsphere_virtual_machine . template . disks
175+ iterator = template_disks
176+ content {
177+ label = " disk${ template_disks . key } "
178+ size = data. vsphere_virtual_machine . template . disks [template_disks . key ]. size
179+ unit_number = template_disks. key
180+ thin_provisioned = data. vsphere_virtual_machine . template . disks [template_disks . key ]. thin_provisioned
181+ eagerly_scrub = data. vsphere_virtual_machine . template . disks [template_disks . key ]. eagerly_scrub
182+ }
168183 }
169184
185+ // Additional disks defined by Terraform config
170186 dynamic "disk" {
171187 for_each = var. data_disk_size_gb
188+ iterator = terraform_disks
172189 content {
173- label = " disk${ disk . key + 1 } "
174- size = var. data_disk_size_gb [disk . key ]
175- unit_number = disk . key + 1
176- thin_provisioned = var. thin_provisioned != null ? var. thin_provisioned [disk . key ] : null
177- eagerly_scrub = var. eagerly_scrub != null ? var. eagerly_scrub [disk . key ] : null
190+ label = " disk${ terraform_disks . key + local . template_disk_count } "
191+ size = var. data_disk_size_gb [terraform_disks . key ]
192+ unit_number = terraform_disks . key + local . template_disk_count
193+ thin_provisioned = var. thin_provisioned != null ? var. thin_provisioned [terraform_disks . key ] : null
194+ eagerly_scrub = var. eagerly_scrub != null ? var. eagerly_scrub [terraform_disks . key ] : null
178195 }
179196 }
180197
@@ -204,12 +221,12 @@ resource "vsphere_virtual_machine" "Windows" {
204221 for_each = var. network_cards
205222 content {
206223 ipv4_address = var. ipv4 [var . network_cards [network_interface . key ]][count . index ]
207- ipv4_netmask = " %{ if local . len == 1 } ${ var . ipv4submask [0 ]} %{ else } ${ var . ipv4submask [network_interface . key ]} %{ endif } "
224+ ipv4_netmask = " %{ if local . interface_count == 1 } ${ var . ipv4submask [0 ]} %{ else } ${ var . ipv4submask [network_interface . key ]} %{ endif } "
208225 }
209226 }
210227 dns_server_list = var. vmdns
211228 dns_suffix_list = var. dns_suffix_list
212229 ipv4_gateway = var. vmgateway
213230 }
214231 }
215- }
232+ }
0 commit comments