-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.tf
More file actions
232 lines (197 loc) · 8.44 KB
/
main.tf
File metadata and controls
232 lines (197 loc) · 8.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
terraform {
required_version = "~> 1.2"
required_providers {
vcd = {
source = "vmware/vcd"
version = "~> 3.8"
}
}
}
data "vcd_vdc_group" "vdc_group" {
org = var.vdc_org_name
name = var.vdc_group_name
}
data "vcd_nsxt_edgegateway" "edge_gateway" {
org = var.vdc_org_name
owner_id = data.vcd_vdc_group.vdc_group.id
name = var.vdc_edge_name
}
locals {
network_data = { for net in var.vapp_org_networks : net.name => net }
}
data "vcd_network_routed_v2" "segment_routed" {
for_each = { for name, net in local.network_data : name => net if net.type == "routed" }
org = var.vdc_org_name
edge_gateway_id = data.vcd_nsxt_edgegateway.edge_gateway.id
name = each.value.name
}
data "vcd_network_isolated_v2" "segment_isolated" {
for_each = { for name, net in local.network_data : name => net if net.type == "isolated" }
org = var.vdc_org_name
owner_id = data.vcd_vdc_group.vdc_group.id
name = each.value.name
}
data "vcd_vm_sizing_policy" "sizing_policy" {
name = var.vm_sizing_policy_name
}
data "vcd_catalog" "template_catalog" {
org = var.catalog_org_name
name = var.catalog_name
}
data "vcd_catalog_vapp_template" "template" {
count = length(var.catalog_template_name) > 0 ? 1 : 0
org = var.vdc_org_name
catalog_id = data.vcd_catalog.template_catalog.id
name = var.catalog_template_name
}
data "vcd_catalog" "boot_catalog" {
for_each = var.boot_catalog_name != "" ? { "boot_catalog" = var.boot_catalog_name } : {}
org = var.boot_catalog_org_name
name = each.value
}
data "vcd_catalog_media" "inserted_media_iso" {
for_each = var.inserted_media_iso_name != "" ? { "inserted_media_iso" = var.inserted_media_iso_name } : {}
org = var.catalog_org_name
catalog_id = var.boot_catalog_name != "" ? data.vcd_catalog.boot_catalog["boot_catalog"].id : null
name = each.value
}
data "vcd_catalog_media" "boot_image_iso" {
count = var.boot_iso_image_name != "" ? 1 : 0
org = var.catalog_org_name
catalog_id = var.boot_catalog_name != "" ? data.vcd_catalog.boot_catalog["boot_catalog"].id : null
name = var.boot_iso_image_name
}
data "vcd_vapp" "vapp" {
name = var.vapp_name
org = var.vdc_org_name
vdc = var.vdc_name
}
data "vcd_vapp_org_network" "vappOrgNet" {
for_each = { for net in local.network_data : net.name => net }
org = var.vdc_org_name
vdc = var.vdc_name
vapp_name = data.vcd_vapp.vapp.name
org_network_name = each.value.name
}
resource "vcd_inserted_media" "media_iso" {
for_each = var.inserted_media_iso_name != "" ? zipmap(var.vm_name, var.vm_name) : {}
org = var.vdc_org_name
vdc = var.vdc_name
catalog = var.boot_catalog_name
name = var.inserted_media_iso_name
vapp_name = data.vcd_vapp.vapp.name
vm_name = each.value
eject_force = var.inserted_media_eject_force
depends_on = [vcd_vapp_vm.vm]
}
resource "vcd_vm_internal_disk" "internal_disk" {
for_each = {
for idx, disk in flatten([
for vm in vcd_vapp_vm.vm : [
for disk in var.internal_disks : {
vm_name = vm.name
size_in_mb = disk.size_in_mb
bus_number = disk.bus_number
unit_number = disk.unit_number
bus_type = disk.bus_type
iops = disk.iops
storage_profile = disk.storage_profile
}
]
]) : "${disk.vm_name}-${disk.unit_number}" => disk
}
org = var.vdc_org_name
vdc = var.vdc_name
vapp_name = data.vcd_vapp.vapp.name
vm_name = each.value.vm_name
size_in_mb = each.value.size_in_mb
bus_number = each.value.bus_number
unit_number = each.value.unit_number
bus_type = each.value.bus_type
iops = each.value.iops
storage_profile = each.value.storage_profile
allow_vm_reboot = var.vm_internal_disk_allow_vm_reboot
depends_on = [vcd_vapp_vm.vm]
}
resource "vcd_vapp_vm" "vm" {
for_each = { for i in range(var.vm_count) : i => i }
org = var.vdc_org_name
vdc = var.vdc_name
vapp_name = data.vcd_vapp.vapp.name
name = var.vm_name_format != "" ? format(var.vm_name_format, var.vm_name[each.key % length(var.vm_name)], each.key + 1) : var.vm_name[each.key % length(var.vm_name)]
computer_name = var.computer_name_format != "" ? format(var.computer_name_format, var.computer_name[each.key % length(var.computer_name)], each.key + 1) : var.computer_name[each.key % length(var.computer_name)]
vapp_template_id = length(var.catalog_template_name) > 0 ? data.vcd_catalog_vapp_template.template[0].id : null
cpu_hot_add_enabled = var.vm_cpu_hot_add_enabled
memory_hot_add_enabled = var.vm_memory_hot_add_enabled
sizing_policy_id = data.vcd_vm_sizing_policy.sizing_policy.id
cpus = var.vm_min_cpu
os_type = var.vm_os_type
hardware_version = var.vm_hw_version
firmware = var.vm_firmware
guest_properties = var.enable_guest_properties ? var.guest_properties_map : {}
boot_options {
boot_delay = var.vm_boot_delay
boot_retry_enabled = var.vm_boot_retry_enabled
boot_retry_delay = var.vm_boot_retry_delay
efi_secure_boot = var.vm_efi_secure_boot
enter_bios_setup_on_next_boot = var.vm_enter_bios_setup_on_next_boot
}
boot_image_id = var.boot_iso_image_name != "" ? data.vcd_catalog_media.boot_image_iso[0].id : null
dynamic "metadata_entry" {
for_each = var.vm_metadata_entries
content {
key = metadata_entry.value.key
value = metadata_entry.value.value
type = metadata_entry.value.type
user_access = metadata_entry.value.user_access
is_system = metadata_entry.value.is_system
}
}
dynamic "disk" {
for_each = can(var.vm_disks) ? slice(var.vm_disks, each.key * var.disks_per_vm, (each.key + 1) * var.disks_per_vm) : []
content {
name = can(disk.value) ? disk.value.name : null
bus_number = can(disk.value) ? disk.value.bus_number : null
unit_number = can(disk.value) ? disk.value.unit_number : null
}
}
dynamic "network" {
for_each = var.network_interfaces
content {
type = network.value.type
adapter_type = network.value.adapter_type
name = network.value.name
ip_allocation_mode = network.value.ip_allocation_mode
ip = network.value.ip_allocation_mode == "MANUAL" ? element(var.vm_ips, each.key * var.vm_ips_index_multiplier + network.key) : ""
is_primary = network.value.is_primary
}
}
dynamic "override_template_disk" {
for_each = var.override_template_disks
content {
bus_type = override_template_disk.value.bus_type
size_in_mb = override_template_disk.value.size_in_mb
bus_number = override_template_disk.value.bus_number
unit_number = override_template_disk.value.unit_number
iops = override_template_disk.value.iops
storage_profile = override_template_disk.value.storage_profile
}
}
customization {
force = var.vm_customization_force
enabled = var.vm_customization_enabled
change_sid = var.vm_customization_change_sid
allow_local_admin_password = var.vm_customization_allow_local_admin_password
must_change_password_on_first_login = var.vm_customization_must_change_password_on_first_login
auto_generate_password = var.vm_customization_auto_generate_password
admin_password = var.vm_customization_admin_password
number_of_auto_logons = var.vm_customization_number_of_auto_logons
join_domain = var.vm_customization_join_domain
join_org_domain = var.vm_customization_join_org_domain
join_domain_name = var.vm_customization_join_domain_name
join_domain_user = var.vm_customization_join_domain_user
join_domain_password = var.vm_customization_join_domain_password
join_domain_account_ou = var.vm_customization_join_domain_account_ou
initscript = var.vm_customization_initscript
}
}