locals.tf (44 lines of code) (raw):

locals { locations_cached_or_live = data.local_file.locations.content regions_by_display_name = { for v in local.regions_recommended_or_not : v.display_name => v } regions_by_name = { for v in local.regions_recommended_or_not : v.name => v } regions_by_name_or_display_name = merge(local.regions_by_display_name, local.regions_by_name) regions_data_merged = [ for v in jsondecode(local.locations_cached_or_live).value : merge( { name = v.name display_name = v.displayName paired_region_name = try(one(v.metadata.pairedRegion).name, null) geography = v.metadata.geography geography_group = v.metadata.geographyGroup recommended = v.metadata.regionCategory == "Recommended" }, { zones = sort(lookup(local.regions_to_zones_map, v.displayName, [])) } ) if v.metadata.regionType == "Physical" ] # Filter out regions that are not recommended regions_recommended_or_not = [for v in local.regions_data_merged : v if v.recommended] regions_to_zones_map = { for v in local.regions_zonemappings : v.location => v.zones } regions_zonemappings = flatten([for v in jsondecode(local.regions_zonemappings_cached_or_live).resourceTypes : v.zoneMappings if v.resourceType == "virtualMachines"]) regions_zonemappings_cached_or_live = data.local_file.compute_provider.content } locals { # Flatten a list of var.node_pools and zones node_pools = flatten([ for pool in var.node_pools : [ for zone in try(local.regions_by_name_or_display_name[var.location].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 os_sku = pool.os_sku zone = zone } ] ]) } locals { log_analytics_tables = ["AKSAudit", "AKSAuditAdmin", "AKSControlPlane", "ContainerLogV2"] }