Skip to content

Commit b9010c1

Browse files
Merge pull request #19 from SamyCoenen/feature/disk-datastore
Feature/disk datastore - Tested, Working as expected
2 parents 17a22ad + 20216ec commit b9010c1

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

examples/linux/main.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ module "example-server-linuxvm-advanced" {
3636
"VM Network" = ["192.168.0.4", ""] // Here the first instance will use Static Ip and Second set to DHCP
3737
"test" = ["", "192.168.0.3"]
3838
}
39+
disk_datastore = "vsanDatastore"
40+
data_disk_datastore = ["vsanDatastore", "nfsDatastore"]
3941
data_disk_size_gb = [10, 5] // Aditional Disks to be used
4042
thin_provisioned = ["true", "false"]
4143
vmdns = ["192.168.0.2", "192.168.0.1"]

examples/windows/main.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ module "example-server-windowsvm-advanced" {
5656
"VM Network" = ["192.168.0.4", ""] // Here the first instance will use Static Ip and Second DHCP
5757
"test" = ["", "192.168.0.3"]
5858
}
59+
disk_datastore = "vsanDatastore"
60+
data_disk_datastore = ["vsanDatastore", "nfsDatastore"]
5961
data_disk_size_gb = [10, 5] // Aditional Disks to be used
6062
thin_provisioned = ["true", "false"]
6163
vmdns = ["192.168.0.2", "192.168.0.1"]

main.tf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@ data "vsphere_datastore" "datastore" {
1414
datacenter_id = data.vsphere_datacenter.dc.id
1515
}
1616

17+
data "vsphere_datastore" "disk_datastore" {
18+
count = var.disk_datastore != "" ? 1 : 0
19+
name = var.disk_datastore
20+
datacenter_id = data.vsphere_datacenter.dc.id
21+
}
22+
23+
data "vsphere_datastore" "data_disk_datastore" {
24+
for_each = toset(var.data_disk_datastore)
25+
name = each.key
26+
datacenter_id = data.vsphere_datacenter.dc.id
27+
}
28+
1729
data "vsphere_resource_pool" "pool" {
1830
name = var.vmrp
1931
datacenter_id = data.vsphere_datacenter.dc.id
@@ -95,6 +107,7 @@ resource "vsphere_virtual_machine" "Linux" {
95107
unit_number = template_disks.key
96108
thin_provisioned = data.vsphere_virtual_machine.template.disks[template_disks.key].thin_provisioned
97109
eagerly_scrub = data.vsphere_virtual_machine.template.disks[template_disks.key].eagerly_scrub
110+
datastore_id = var.disk_datastore != "" ? data.vsphere_datastore.disk_datastore[0].id : null
98111
}
99112
}
100113

@@ -108,6 +121,7 @@ resource "vsphere_virtual_machine" "Linux" {
108121
unit_number = terraform_disks.key + local.template_disk_count
109122
thin_provisioned = var.thin_provisioned != null ? var.thin_provisioned[terraform_disks.key] : null
110123
eagerly_scrub = var.eagerly_scrub != null ? var.eagerly_scrub[terraform_disks.key] : null
124+
datastore_id = length(var.data_disk_datastore) > 0 ? data.vsphere_datastore.data_disk_datastore[var.data_disk_datastore[terraform_disks.key]].id : null
111125
}
112126
}
113127

@@ -185,6 +199,7 @@ resource "vsphere_virtual_machine" "Windows" {
185199
unit_number = template_disks.key
186200
thin_provisioned = data.vsphere_virtual_machine.template.disks[template_disks.key].thin_provisioned
187201
eagerly_scrub = data.vsphere_virtual_machine.template.disks[template_disks.key].eagerly_scrub
202+
datastore_id = var.disk_datastore != "" ? data.vsphere_datastore.disk_datastore[0].id : null
188203
}
189204
}
190205

@@ -198,6 +213,7 @@ resource "vsphere_virtual_machine" "Windows" {
198213
unit_number = terraform_disks.key + local.template_disk_count
199214
thin_provisioned = var.thin_provisioned != null ? var.thin_provisioned[terraform_disks.key] : null
200215
eagerly_scrub = var.eagerly_scrub != null ? var.eagerly_scrub[terraform_disks.key] : null
216+
datastore_id = length(var.data_disk_datastore) > 0 ? data.vsphere_datastore.data_disk_datastore[var.data_disk_datastore[terraform_disks.key]].id : null
201217
}
202218
}
203219

variables.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,20 @@ variable "data_disk_size_gb" {
156156
default = []
157157
}
158158

159+
variable "disk_datastore"{
160+
type = string
161+
default = ""
162+
}
163+
164+
variable "data_disk_datastore" {
165+
type = list
166+
default = []
167+
# validation {
168+
# condition = length(var.disk_datastore) == 0 || length(var.disk_datastore) == length(var.data_disk_size_gb)
169+
# error_message = "The list of disk datastore must be equal in length to disk_size_gb"
170+
# }
171+
}
172+
159173
variable "thin_provisioned" {
160174
description = "If true, this disk is thin provisioned, with space for the file being allocated on an as-needed basis."
161175
type = list

0 commit comments

Comments
 (0)