Skip to content

Commit 8035012

Browse files
committed
updating module to support more features
1 parent 5795647 commit 8035012

File tree

3 files changed

+317
-137
lines changed

3 files changed

+317
-137
lines changed

main.tf

Lines changed: 105 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ locals {
1313
# Generates SSH2 key Pair for Linux VM's (Dev Environment only)
1414
#---------------------------------------------------------------
1515
resource "tls_private_key" "rsa" {
16-
count = var.generate_admin_ssh_key == true && var.os_flavor == "linux" ? 1 : 0
16+
count = var.generate_admin_ssh_key ? 1 : 0
1717
algorithm = "RSA"
1818
rsa_bits = 4096
1919
}
@@ -49,15 +49,15 @@ data "azurerm_storage_account" "storeacc" {
4949
}
5050

5151
resource "random_password" "passwd" {
52-
count = var.disable_password_authentication != true || var.os_flavor == "windows" && var.admin_password == null ? 1 : 0
52+
count = (var.os_flavor == "linux" && var.disable_password_authentication == false && var.admin_password == null ? 1 : (var.os_flavor == "windows" && var.admin_password == null ? 1 : 0))
5353
length = var.random_password_length
5454
min_upper = 4
5555
min_lower = 2
5656
min_numeric = 4
5757
special = false
5858

5959
keepers = {
60-
admin_password = var.os_flavor
60+
admin_password = var.vmscaleset_name
6161
}
6262
}
6363

@@ -71,8 +71,16 @@ resource "azurerm_public_ip" "pip" {
7171
resource_group_name = data.azurerm_resource_group.rg.name
7272
allocation_method = var.public_ip_allocation_method
7373
sku = var.public_ip_sku
74-
domain_name_label = format("vm%spip0${count.index + 1}", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")))
75-
tags = merge({ "ResourceName" = lower("pip-vm-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}-0${count.index + 1}") }, var.tags, )
74+
sku_tier = var.public_ip_sku_tier
75+
domain_name_label = var.domain_name_label
76+
availability_zone = var.public_ip_availability_zone
77+
tags = merge({ "resourcename" = lower("pip-vm-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}-0${count.index + 1}") }, var.tags, )
78+
79+
lifecycle {
80+
ignore_changes = [
81+
tags,
82+
]
83+
}
7684
}
7785

7886
#---------------------------------------
@@ -84,15 +92,22 @@ resource "azurerm_lb" "vmsslb" {
8492
location = data.azurerm_resource_group.rg.location
8593
resource_group_name = data.azurerm_resource_group.rg.name
8694
sku = var.load_balancer_sku
87-
tags = merge({ "ResourceName" = var.load_balancer_type == "public" ? lower("lbext-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}") : lower("lbint-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}") }, var.tags, )
95+
tags = merge({ "resourcename" = var.load_balancer_type == "public" ? lower("lbext-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}") : lower("lbint-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}") }, var.tags, )
8896

8997
frontend_ip_configuration {
9098
name = var.load_balancer_type == "public" ? lower("lbext-frontend-${var.vmscaleset_name}") : lower("lbint-frontend-${var.vmscaleset_name}")
99+
availability_zone = var.lb_availability_zone
91100
public_ip_address_id = var.enable_load_balancer == true && var.load_balancer_type == "public" ? azurerm_public_ip.pip[count.index].id : null
92101
private_ip_address_allocation = var.load_balancer_type == "private" ? var.private_ip_address_allocation : null
93102
private_ip_address = var.load_balancer_type == "private" && var.private_ip_address_allocation == "Static" ? var.lb_private_ip_address : null
94103
subnet_id = var.load_balancer_type == "private" ? data.azurerm_subnet.snet.id : null
95104
}
105+
106+
lifecycle {
107+
ignore_changes = [
108+
tags,
109+
]
110+
}
96111
}
97112

98113
#---------------------------------------
@@ -128,6 +143,9 @@ resource "azurerm_lb_probe" "lbp" {
128143
resource_group_name = data.azurerm_resource_group.rg.name
129144
loadbalancer_id = azurerm_lb.vmsslb[count.index].id
130145
port = var.load_balancer_health_probe_port
146+
protocol = var.lb_probe_protocol
147+
request_path = var.lb_probe_protocol != "Tcp" ? var.lb_probe_request_path : null
148+
number_of_probes = var.number_of_probes
131149
}
132150

133151
#--------------------------
@@ -143,21 +161,45 @@ resource "azurerm_lb_rule" "lbrule" {
143161
frontend_port = tostring(var.load_balanced_port_list[count.index])
144162
backend_port = tostring(var.load_balanced_port_list[count.index])
145163
frontend_ip_configuration_name = azurerm_lb.vmsslb[0].frontend_ip_configuration.0.name
146-
backend_address_pool_id = azurerm_lb_backend_address_pool.bepool[0].id
164+
backend_address_pool_ids = [azurerm_lb_backend_address_pool.bepool[0].id]
165+
}
166+
167+
#----------------------------------------------------------------------------------------------------
168+
# Proximity placement group for virtual machines, virtual machine scale sets and availability sets.
169+
#----------------------------------------------------------------------------------------------------
170+
resource "azurerm_proximity_placement_group" "appgrp" {
171+
count = var.enable_proximity_placement_group ? 1 : 0
172+
name = lower("proxigrp-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}")
173+
resource_group_name = data.azurerm_resource_group.rg.name
174+
location = data.azurerm_resource_group.rg.location
175+
tags = merge({ "resourcename" = lower("proxigrp-${var.vmscaleset_name}-${data.azurerm_resource_group.rg.location}") }, var.tags, )
176+
177+
lifecycle {
178+
ignore_changes = [
179+
tags,
180+
]
181+
}
147182
}
148183

149184
#---------------------------------------------------------------
150185
# Network security group for Virtual Machine Network Interface
151186
#---------------------------------------------------------------
152187
resource "azurerm_network_security_group" "nsg" {
188+
count = var.existing_network_security_group_id == null ? 1 : 0
153189
name = lower("nsg_${var.vmscaleset_name}_${data.azurerm_resource_group.rg.location}_in")
154190
resource_group_name = data.azurerm_resource_group.rg.name
155191
location = data.azurerm_resource_group.rg.location
156-
tags = merge({ "ResourceName" = lower("nsg_${var.vmscaleset_name}_${data.azurerm_resource_group.rg.location}_in") }, var.tags, )
192+
tags = merge({ "resourcename" = lower("nsg_${var.vmscaleset_name}_${data.azurerm_resource_group.rg.location}_in") }, var.tags, )
193+
194+
lifecycle {
195+
ignore_changes = [
196+
tags,
197+
]
198+
}
157199
}
158200

159201
resource "azurerm_network_security_rule" "nsg_rule" {
160-
for_each = local.nsg_inbound_rules
202+
for_each = { for k, v in local.nsg_inbound_rules : k => v if k != null }
161203
name = each.key
162204
priority = 100 * (each.value.idx + 1)
163205
direction = "Inbound"
@@ -169,36 +211,46 @@ resource "azurerm_network_security_rule" "nsg_rule" {
169211
destination_address_prefix = element(concat(data.azurerm_subnet.snet.address_prefixes, [""]), 0)
170212
description = "Inbound_Port_${each.value.security_rule.destination_port_range}"
171213
resource_group_name = data.azurerm_resource_group.rg.name
172-
network_security_group_name = azurerm_network_security_group.nsg.name
214+
network_security_group_name = azurerm_network_security_group.nsg.0.name
173215
depends_on = [azurerm_network_security_group.nsg]
174216
}
175217

176218
#---------------------------------------
177219
# Linux Virutal machine scale set
178220
#---------------------------------------
179221
resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
180-
count = var.os_flavor == "linux" ? 1 : 0
181-
name = format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1)
182-
resource_group_name = data.azurerm_resource_group.rg.name
183-
location = data.azurerm_resource_group.rg.location
184-
overprovision = var.overprovision
185-
sku = var.virtual_machine_size
186-
instances = var.instances_count
187-
zones = var.availability_zones
188-
zone_balance = var.availability_zone_balance
189-
single_placement_group = var.single_placement_group
190-
admin_username = var.admin_username
191-
admin_password = var.disable_password_authentication != true && var.admin_password == null ? random_password.passwd[count.index].result : var.admin_password
192-
tags = merge({ "ResourceName" = format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1) }, var.tags, )
193-
source_image_id = var.source_image_id != null ? var.source_image_id : null
194-
upgrade_mode = var.os_upgrade_mode
195-
health_probe_id = var.enable_load_balancer ? azurerm_lb_probe.lbp[0].id : null
196-
provision_vm_agent = true
197-
disable_password_authentication = var.disable_password_authentication
198-
199-
admin_ssh_key {
200-
username = var.admin_username
201-
public_key = var.generate_admin_ssh_key == true && var.os_flavor == "linux" ? tls_private_key.rsa[0].public_key_openssh : file(var.admin_ssh_key_data)
222+
count = var.os_flavor == "linux" ? 1 : 0
223+
name = format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1)
224+
computer_name_prefix = var.computer_name_prefix == null && var.instances_count == 1 ? substr(var.vmscaleset_name, 0, 15) : substr(format("%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1), 0, 15)
225+
resource_group_name = data.azurerm_resource_group.rg.name
226+
location = data.azurerm_resource_group.rg.location
227+
sku = var.virtual_machine_size
228+
instances = var.instances_count
229+
admin_username = var.admin_username
230+
admin_password = var.disable_password_authentication == false && var.admin_password == null ? element(concat(random_password.passwd.*.result, [""]), 0) : var.admin_password
231+
custom_data = var.custom_data
232+
disable_password_authentication = var.disable_password_authentication
233+
overprovision = var.overprovision
234+
do_not_run_extensions_on_overprovisioned_machines = var.do_not_run_extensions_on_overprovisioned_machines
235+
encryption_at_host_enabled = var.enable_encryption_at_host
236+
health_probe_id = var.enable_load_balancer ? azurerm_lb_probe.lbp[0].id : null
237+
platform_fault_domain_count = var.platform_fault_domain_count
238+
provision_vm_agent = true
239+
proximity_placement_group_id = var.enable_proximity_placement_group ? azurerm_proximity_placement_group.appgrp.0.id : null
240+
scale_in_policy = var.scale_in_policy
241+
single_placement_group = var.single_placement_group
242+
source_image_id = var.source_image_id != null ? var.source_image_id : null
243+
upgrade_mode = var.os_upgrade_mode
244+
zones = var.availability_zones
245+
zone_balance = var.availability_zone_balance
246+
tags = merge({ "resourcename" = format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1) }, var.tags, )
247+
248+
dynamic "admin_ssh_key" {
249+
for_each = var.disable_password_authentication ? [1] : []
250+
content {
251+
username = var.admin_username
252+
public_key = var.admin_ssh_key_data == null ? tls_private_key.rsa[0].public_key_openssh : file(var.admin_ssh_key_data)
253+
}
202254
}
203255

204256
dynamic "source_image_reference" {
@@ -212,8 +264,11 @@ resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
212264
}
213265

214266
os_disk {
215-
storage_account_type = var.os_disk_storage_account_type
216-
caching = "ReadWrite"
267+
storage_account_type = var.os_disk_storage_account_type
268+
caching = var.os_disk_caching
269+
disk_encryption_set_id = var.disk_encryption_set_id
270+
disk_size_gb = var.disk_size_gb
271+
write_accelerator_enabled = var.enable_os_disk_write_accelerator
217272
}
218273

219274
dynamic "data_disk" {
@@ -222,6 +277,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
222277
lun = data_disk.key
223278
disk_size_gb = data_disk.value
224279
caching = "ReadWrite"
280+
create_option = "Empty"
225281
storage_account_type = var.additional_data_disks_storage_account_type
226282
}
227283
}
@@ -232,7 +288,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
232288
dns_servers = var.dns_servers
233289
enable_ip_forwarding = var.enable_ip_forwarding
234290
enable_accelerated_networking = var.enable_accelerated_networking
235-
network_security_group_id = azurerm_network_security_group.nsg.id
291+
network_security_group_id = var.existing_network_security_group_id == null ? azurerm_network_security_group.nsg.0.id : var.existing_network_security_group_id
236292

237293
ip_configuration {
238294
name = lower("ipconig-${format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1)}")
@@ -242,10 +298,10 @@ resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
242298
load_balancer_inbound_nat_rules_ids = var.enable_load_balancer && var.enable_lb_nat_pool ? [azurerm_lb_nat_pool.natpol[0].id] : null
243299

244300
dynamic "public_ip_address" {
245-
for_each = var.assign_public_ip_to_each_vm_in_vmss ? [{}] : []
301+
for_each = var.assign_public_ip_to_each_vm_in_vmss ? [1] : []
246302
content {
247-
name = lower("pip-${format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), "0${count.index + 1}")}")
248-
domain_name_label = format("vm-%s-pip0${count.index + 1}", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")))
303+
name = lower("pip-${format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), "0${count.index + 1}")}")
304+
public_ip_prefix_id = var.public_ip_prefix_id
249305
}
250306
}
251307
}
@@ -256,11 +312,14 @@ resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
256312
enable_automatic_os_upgrade = true
257313
}
258314

259-
rolling_upgrade_policy {
260-
max_batch_instance_percent = 20
261-
max_unhealthy_instance_percent = 20
262-
max_unhealthy_upgraded_instance_percent = 20
263-
pause_time_between_batches = "PT0S"
315+
dynamic "rolling_upgrade_policy" {
316+
for_each = var.os_upgrade_mode == "Automatic" ? [1] : []
317+
content {
318+
max_batch_instance_percent = var.rolling_upgrade_policy.max_batch_instance_percent
319+
max_unhealthy_instance_percent = var.rolling_upgrade_policy.max_unhealthy_instance_percent
320+
max_unhealthy_upgraded_instance_percent = var.rolling_upgrade_policy.max_unhealthy_upgraded_instance_percent
321+
pause_time_between_batches = var.rolling_upgrade_policy.pause_time_between_batches
322+
}
264323
}
265324

266325
automatic_instance_repair {
@@ -278,7 +337,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "linux_vmss" {
278337
resource "azurerm_windows_virtual_machine_scale_set" "winsrv_vmss" {
279338
count = var.os_flavor == "windows" ? 1 : 0
280339
name = format("%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")))
281-
computer_name_prefix = format("%s%s", lower(replace(var.vm_computer_name, "/[[:^alnum:]]/", "")), count.index + 1)
340+
computer_name_prefix = var.computer_name_prefix == null && var.instances_count == 1 ? substr(var.vmscaleset_name, 0, 15) : substr(format("%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1), 0, 15)
282341
resource_group_name = data.azurerm_resource_group.rg.name
283342
location = data.azurerm_resource_group.rg.location
284343
overprovision = var.overprovision
@@ -329,7 +388,7 @@ resource "azurerm_windows_virtual_machine_scale_set" "winsrv_vmss" {
329388
dns_servers = var.dns_servers
330389
enable_ip_forwarding = var.enable_ip_forwarding
331390
enable_accelerated_networking = var.enable_accelerated_networking
332-
network_security_group_id = azurerm_network_security_group.nsg.id
391+
network_security_group_id = var.existing_network_security_group_id == null ? azurerm_network_security_group.nsg.0.id : var.existing_network_security_group_id
333392

334393
ip_configuration {
335394
name = lower("ipconfig-${format("vm%s%s", lower(replace(var.vmscaleset_name, "/[[:^alnum:]]/", "")), count.index + 1)}")
@@ -499,7 +558,7 @@ resource "azurerm_monitor_diagnostic_setting" "vmmsdiag" {
499558
resource "azurerm_monitor_diagnostic_setting" "nsg" {
500559
count = var.log_analytics_workspace_name != null && var.storage_account_name != null ? 1 : 0
501560
name = lower("nsg-${var.vmscaleset_name}-diag")
502-
target_resource_id = azurerm_network_security_group.nsg.id
561+
target_resource_id = azurerm_network_security_group.nsg.0.id # need modification as per new alignment
503562
storage_account_id = var.storage_account_name != null ? data.azurerm_storage_account.storeacc.0.id : null
504563
log_analytics_workspace_id = data.azurerm_log_analytics_workspace.logws.0.id
505564

output.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ output "load_balancer_rules_id" {
4848

4949
output "network_security_group_id" {
5050
description = "The resource id of Network security group"
51-
value = azurerm_network_security_group.nsg.id
51+
value = var.existing_network_security_group_id == null ? azurerm_network_security_group.nsg.*.id : null
5252
}
5353

5454
output "linux_virtual_machine_scale_set_name" {

0 commit comments

Comments
 (0)