@@ -13,7 +13,7 @@ locals {
1313# Generates SSH2 key Pair for Linux VM's (Dev Environment only)
1414# ---------------------------------------------------------------
1515resource "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
5151resource "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# ---------------------------------------------------------------
152187resource "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
159201resource "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# ---------------------------------------
179221resource "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" {
278337resource "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" {
499558resource "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
0 commit comments