locals.tf (80 lines of code) (raw):
locals {
private_dns_zone_name = try(reverse(split("/", var.private_dns_zone_id))[0], null)
valid_private_dns_zone_regexs = [
"private\\.[a-z0-9]+\\.azmk8s\\.io",
"privatelink\\.[a-z0-9]+\\.azmk8s\\.io",
"[a-zA-Z0-9\\-]{1,32}\\.private\\.[a-z]+\\.azmk8s\\.io",
"[a-zA-Z0-9\\-]{1,32}\\.privatelink\\.[a-z]+\\.azmk8s\\.io",
]
}
locals {
default_node_pool_available_zones = setsubtract(local.zones, local.restricted_zones)
filtered_vms = [
for sku in data.azapi_resource_list.example.output.value :
sku if(sku.resourceType == "virtualMachines" && sku.name == var.default_node_pool_vm_sku)
]
restricted_zones = try(local.filtered_vms[0].restrictions[0].restrictionInfo.zones, [])
zones = local.filtered_vms[0].locationInfo[0].zones
}
locals {
filtered_vms_by_node_pool = {
for pool_name, pool in var.node_pools : pool_name => [
for sku in data.azapi_resource_list.example.output.value :
sku if(sku.resourceType == "virtualMachines" && sku.name == pool.vm_size)
]
}
my_node_pool_zones_by_pool = {
for pool_name, pool in var.node_pools : pool_name => setsubtract(
local.filtered_vms_by_node_pool[pool_name][0].locationInfo[0].zones,
try(local.filtered_vms_by_node_pool[pool_name][0].restrictions[0].restrictionInfo.zones, [])
)
}
zonetagged_node_pools = {
for pool_name, pool in var.node_pools : pool_name => merge(pool, { zones = local.my_node_pool_zones_by_pool[pool_name] })
}
}
locals {
# Flatten a list of var.node_pools and zones
node_pools = flatten([
for pool in local.zonetagged_node_pools : [
for zone in pool.zones : {
# concatenate name and zone trim to 12 characters
name = "${substr(pool.name, 0, 10)}${zone}"
vm_size = pool.vm_size
orchestrator_version = pool.orchestrator_version
max_count = pool.max_count
min_count = pool.min_count
tags = pool.tags
labels = pool.labels
os_sku = pool.os_sku
os_disk_type = pool.os_disk_type
mode = pool.mode
os_disk_size_gb = pool.os_disk_size_gb
zone = [zone]
}
]
])
}
locals {
log_analytics_tables = ["AKSAudit", "AKSAuditAdmin", "AKSControlPlane", "ContainerLogV2"]
}
# Helper locals to make the dynamic block more readable
# There are three attributes here to cater for resources that
# support both user and system MIs, only system MIs, and only user MIs
locals {
managed_identities = {
user_assigned = length(var.managed_identities.user_assigned_resource_ids) > 0 ? {
this = {
type = "UserAssigned"
user_assigned_resource_ids = var.managed_identities.user_assigned_resource_ids
}
} : {
this = {
type = "UserAssigned"
user_assigned_resource_ids = azurerm_user_assigned_identity.aks[*].id
}
}
}
}
locals {
network_resource_group_id = regex("(.*?/resourceGroups/[^/]+)", var.network.node_subnet_id)[0]
}
locals {
dns_service_ip = local.has_network_service_cidr ? (try(var.network.dns_service_ip, null) != null ? var.network.dns_service_ip : cidrhost(var.network.service_cidr, 10)) : null
has_network_service_cidr = try(var.network.service_cidr, null) != null
}