Skip to content

Commit 2feaedd

Browse files
Merge pull request #8 from nerdeverde/feature/multiple_template_disks
Support multiple disks in source template
2 parents d3cf768 + 1fccf08 commit 2feaedd

File tree

1 file changed

+41
-24
lines changed

1 file changed

+41
-24
lines changed

main.tf

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ data "vsphere_tag" "tag" {
4242
}
4343

4444
locals {
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

Comments
 (0)