Skip to content

Commit 8017703

Browse files
Merge pull request #92 from damnsam/unit_number-support
Unit number support
2 parents c4f25cd + 0083e51 commit 8017703

File tree

4 files changed

+61
-32
lines changed

4 files changed

+61
-32
lines changed

main.tf

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,18 @@ resource "vsphere_virtual_machine" "vm" {
8585
guest_id = data.vsphere_virtual_machine.template.guest_id
8686
scsi_bus_sharing = var.scsi_bus_sharing
8787
scsi_type = var.scsi_type != "" ? var.scsi_type : data.vsphere_virtual_machine.template.scsi_type
88-
scsi_controller_count = max(max(0, flatten([
89-
for item in values(var.data_disk) : [
90-
for elem, val in item :
91-
elem == "data_disk_scsi_controller" ? val : 0
92-
]
93-
])...) + 1, var.scsi_controller)
88+
scsi_controller_count = max(
89+
max(0,flatten([
90+
for item in values(var.data_disk) : [
91+
for elem, val in item :
92+
elem == "data_disk_scsi_controller" ? val : 0
93+
]])...) + 1,
94+
ceil((max(0,flatten([
95+
for item in values(var.data_disk) : [
96+
for elem, val in item :
97+
elem == "unit_number" ? val : 0
98+
] ])...) + 1) / 15),
99+
var.scsi_controller)
94100
wait_for_guest_net_routable = var.wait_for_guest_net_routable
95101
wait_for_guest_ip_timeout = var.wait_for_guest_ip_timeout
96102
wait_for_guest_net_timeout = var.wait_for_guest_net_timeout
@@ -125,7 +131,27 @@ resource "vsphere_virtual_machine" "vm" {
125131
content {
126132
label = terraform_disks.key
127133
size = lookup(terraform_disks.value, "size_gb", null)
128-
unit_number = lookup(terraform_disks.value, "data_disk_scsi_controller", 0) ? terraform_disks.value.data_disk_scsi_controller * 15 + index(keys(var.data_disk), terraform_disks.key) + (var.scsi_controller == tonumber(terraform_disks.value["data_disk_scsi_controller"]) ? local.template_disk_count : 0) : index(keys(var.data_disk), terraform_disks.key) + local.template_disk_count
134+
unit_number = (
135+
lookup(
136+
terraform_disks.value,
137+
"unit_number",
138+
-1
139+
) < 0 ? (
140+
lookup(
141+
terraform_disks.value,
142+
"data_disk_scsi_controller",
143+
0
144+
) > 0 ? (
145+
(terraform_disks.value.data_disk_scsi_controller * 15) +
146+
index(keys(var.data_disk), terraform_disks.key) +
147+
(var.scsi_controller == tonumber(terraform_disks.value["data_disk_scsi_controller"]) ? local.template_disk_count : 0)
148+
) : (
149+
index(keys(var.data_disk), terraform_disks.key) + local.template_disk_count
150+
)
151+
) : (
152+
tonumber(terraform_disks.value["unit_number"])
153+
)
154+
)
129155
thin_provisioned = lookup(terraform_disks.value, "thin_provisioned", "true")
130156
eagerly_scrub = lookup(terraform_disks.value, "eagerly_scrub", "false")
131157
datastore_id = lookup(terraform_disks.value, "datastore_id", null)

tests/sanity/README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,19 @@ vm = {
3939
data_disk_scsi_controller = 1,
4040
datastore_id = "datastore-90679"
4141
}
42+
disk4 = {
43+
size_gb = 5,
44+
thin_provisioned = true,
45+
unit_number = 30,
46+
datastore_id = "datastore-90679"
47+
}
4248
}
4349
network = {
4450
"VM Port Group" = ["10.13.13.2", ""], # To use DHCP create Empty list for each instance
4551
"VM Port Group" = ["", ""]
4652
}
53+
tags = {}
54+
annotation = null
4755
},
4856
windowsvm = {
4957
vmname = "example-server-windows",
@@ -62,6 +70,8 @@ vm = {
6270
"VM Port Group" = ["", ""]
6371
}
6472
}
73+
tags = {}
74+
annotation = null
6575
}
6676
```
6777

tests/sanity/main.tf

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,6 @@ variable "env" {
1919
default = "dev"
2020
}
2121

22-
data "vsphere_storage_policy" "this" {
23-
name = "Test"
24-
}
25-
26-
output "disk_id" {
27-
value = data.vsphere_storage_policy.this.id
28-
}
29-
3022
variable "vm" {
3123
type = map(object({
3224
vmname = string
@@ -46,22 +38,21 @@ variable "vm" {
4638
}
4739

4840
module "example-server-basic" {
49-
source = "../../"
50-
for_each = var.vm
51-
vmnameformat = "%03d${var.env}"
52-
template_storage_policy_id = [data.vsphere_storage_policy.this.id]
53-
tag_depends_on = [vsphere_tag.tag.id]
54-
tags = each.value.tags
55-
vmtemp = each.value.vmtemp
56-
is_windows_image = each.value.is_windows_image
57-
instances = each.value.instances
58-
vmname = each.value.vmname
59-
vmrp = each.value.vmrp
60-
vmfolder = each.value.vmfolder
61-
network = each.value.network
62-
vmgateway = each.value.vmgateway
63-
dc = each.value.dc
64-
datastore = each.value.datastore
65-
data_disk = each.value.data_disk
41+
source = "../../"
42+
for_each = var.vm
43+
vmnameformat = "%03d${var.env}"
44+
tag_depends_on = [vsphere_tag.tag.id]
45+
tags = each.value.tags
46+
vmtemp = each.value.vmtemp
47+
is_windows_image = each.value.is_windows_image
48+
instances = each.value.instances
49+
vmname = each.value.vmname
50+
vmrp = each.value.vmrp
51+
vmfolder = each.value.vmfolder
52+
network = each.value.network
53+
vmgateway = each.value.vmgateway
54+
dc = each.value.dc
55+
datastore = each.value.datastore
56+
data_disk = each.value.data_disk
6657
}
6758

tests/smoke/main.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ variable "vm" {
1212
network = map(list(string))
1313
vmgateway = string
1414
dns_servers = list(string)
15+
data_disk = map(map(string))
1516
}))
1617
}
1718

@@ -29,4 +30,5 @@ module "example-server-basic" {
2930
vmgateway = each.value.vmgateway
3031
dc = each.value.dc
3132
datastore = each.value.datastore #Either
33+
data_disk = each.value.data_disk
3234
}

0 commit comments

Comments
 (0)