|
1 | 1 | locals { |
2 | | - # Create a flat list of projects with region keys for consumption in a for_each meta argument |
3 | | - app_service_plans_flatlist = flatten([ |
4 | | - for region_key, region_val in var.regions : [ |
5 | | - for asp_key, asp_val in var.app_service_plan.instances : { |
6 | | - key = "${asp_key}-${region_key}" |
7 | | - asp_key = asp_key |
8 | | - asp_val = asp_val |
9 | | - region_key = region_key |
10 | | - } |
| 2 | + # There are multiple App Service Plans and possibly multiple regions. |
| 3 | + # We cannot nest for loops inside a map, so first iterate all permutations of both as a list of objects... |
| 4 | + app_service_object_list = flatten([ |
| 5 | + for region in keys(var.regions) : [ |
| 6 | + for app_service_plan, config in var.app_service_plan.instances : merge( |
| 7 | + { |
| 8 | + region = region # 1st iterator |
| 9 | + app_service_plan = app_service_plan # 2nd iterator |
| 10 | + }, |
| 11 | + config # the rest of the key/value pairs for a specific app_service_plan |
| 12 | + ) |
11 | 13 | ] |
12 | 14 | ]) |
13 | 15 |
|
14 | | - # Project the above list into a map with unique keys for consumption in a for_each meta argument |
15 | | - app_service_plans_map = { for asp in local.app_service_plans_flatlist : asp.key => asp } |
| 16 | + # ...then project the list of objects into a map with unique keys (combining the iterators), for consumption by a for_each meta argument |
| 17 | + app_service_plans_map = { |
| 18 | + for object in local.app_service_object_list : "${object.app_service_plan}-${object.region}" => object |
| 19 | + } |
16 | 20 | } |
17 | 21 |
|
18 | 22 | module "app-service-plan" { |
19 | 23 | for_each = local.app_service_plans_map |
20 | 24 |
|
21 | 25 | source = "../../../dtos-devops-templates/infrastructure/modules/app-service-plan" |
22 | 26 |
|
23 | | - name = "${module.regions_config[each.value.region_key].names.app-service-plan}-${lower(each.value.asp_key)}" |
24 | | - resource_group_name = azurerm_resource_group.core[each.value.region_key].name |
25 | | - location = each.value.region_key |
| 27 | + name = "${module.regions_config[each.value.region].names.app-service-plan}-${lower(each.value.app_service_plan)}" |
| 28 | + resource_group_name = azurerm_resource_group.core[each.value.region].name |
| 29 | + location = each.value.region |
26 | 30 |
|
27 | 31 | log_analytics_workspace_id = data.terraform_remote_state.audit.outputs.log_analytics_workspace_id[local.primary_region] |
28 | 32 | monitor_diagnostic_setting_appserviceplan_metrics = local.monitor_diagnostic_setting_appserviceplan_metrics |
29 | | - |
30 | | - os_type = var.app_service_plan.os_type |
31 | | - sku_name = var.app_service_plan.sku_name |
32 | | - |
33 | | - vnet_integration_subnet_id = module.subnets["${module.regions_config[each.value.region_key].names.subnet}-apps"].id |
| 33 | + os_type = lookup(each.value, "os_type", var.app_service_plan.os_type) |
| 34 | + sku_name = lookup(each.value, "sku_name", var.app_service_plan.sku_name) |
| 35 | + vnet_integration_subnet_id = module.subnets["${module.regions_config[each.value.region].names.subnet}-apps"].id |
| 36 | + wildcard_ssl_cert_name = each.value.wildcard_ssl_cert_key |
| 37 | + wildcard_ssl_cert_pfx_blob_key_vault_secret_name = each.value.wildcard_ssl_cert_key != null ? data.terraform_remote_state.hub.outputs.key_vault_certificates["${each.value.wildcard_ssl_cert_key}-${each.value.region}"].pfx_blob_secret_name : null |
| 38 | + wildcard_ssl_cert_key_vault_id = each.value.wildcard_ssl_cert_key != null ? data.terraform_remote_state.hub.outputs.key_vault["${each.value.region}"].key_vault_id : null |
34 | 39 |
|
35 | 40 | tags = var.tags |
36 | 41 |
|
37 | 42 | ## autoscale rule |
38 | | - metric = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.metric, var.app_service_plan.autoscale.scaling_rule.metric) : var.app_service_plan.autoscale.scaling_rule.metric |
39 | | - |
40 | | - capacity_min = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.capacity_min, var.app_service_plan.autoscale.scaling_rule.capacity_min) : var.app_service_plan.autoscale.scaling_rule.capacity_min |
41 | | - capacity_max = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.capacity_max, var.app_service_plan.autoscale.scaling_rule.capacity_max) : var.app_service_plan.autoscale.scaling_rule.capacity_max |
42 | | - capacity_def = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.capacity_def, var.app_service_plan.autoscale.scaling_rule.capacity_def) : var.app_service_plan.autoscale.scaling_rule.capacity_def |
43 | | - |
44 | | - time_grain = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.time_grain, var.app_service_plan.autoscale.scaling_rule.time_grain) : var.app_service_plan.autoscale.scaling_rule.time_grain |
45 | | - statistic = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.statistic, var.app_service_plan.autoscale.scaling_rule.statistic) : var.app_service_plan.autoscale.scaling_rule.statistic |
46 | | - time_window = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.time_window, var.app_service_plan.autoscale.scaling_rule.time_window) : var.app_service_plan.autoscale.scaling_rule.time_window |
47 | | - time_aggregation = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.time_aggregation, var.app_service_plan.autoscale.scaling_rule.time_aggregation) : var.app_service_plan.autoscale.scaling_rule.time_aggregation |
48 | | - |
49 | | - inc_operator = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.inc_operator, var.app_service_plan.autoscale.scaling_rule.inc_operator) : var.app_service_plan.autoscale.scaling_rule.inc_operator |
50 | | - inc_threshold = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.inc_threshold, var.app_service_plan.autoscale.scaling_rule.inc_threshold) : var.app_service_plan.autoscale.scaling_rule.inc_threshold |
51 | | - inc_scale_direction = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.inc_scale_direction, var.app_service_plan.autoscale.scaling_rule.inc_scale_direction) : var.app_service_plan.autoscale.scaling_rule.inc_scale_direction |
52 | | - inc_scale_type = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.inc_scale_type, var.app_service_plan.autoscale.scaling_rule.inc_scale_type) : var.app_service_plan.autoscale.scaling_rule.inc_scale_type |
53 | | - inc_scale_value = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.inc_scale_value, var.app_service_plan.autoscale.scaling_rule.inc_scale_value) : var.app_service_plan.autoscale.scaling_rule.inc_scale_value |
54 | | - inc_scale_cooldown = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.inc_scale_cooldown, var.app_service_plan.autoscale.scaling_rule.inc_scale_cooldown) : var.app_service_plan.autoscale.scaling_rule.inc_scale_cooldown |
55 | | - |
56 | | - dec_operator = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.dec_operator, var.app_service_plan.autoscale.scaling_rule.dec_operator) : var.app_service_plan.autoscale.scaling_rule.dec_operator |
57 | | - dec_threshold = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.dec_threshold, var.app_service_plan.autoscale.scaling_rule.dec_threshold) : var.app_service_plan.autoscale.scaling_rule.dec_threshold |
58 | | - dec_scale_direction = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.dec_scale_direction, var.app_service_plan.autoscale.scaling_rule.dec_scale_direction) : var.app_service_plan.autoscale.scaling_rule.dec_scale_direction |
59 | | - dec_scale_type = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.dec_scale_type, var.app_service_plan.autoscale.scaling_rule.dec_scale_type) : var.app_service_plan.autoscale.scaling_rule.dec_scale_type |
60 | | - dec_scale_value = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.dec_scale_value, var.app_service_plan.autoscale.scaling_rule.dec_scale_value) : var.app_service_plan.autoscale.scaling_rule.dec_scale_value |
61 | | - dec_scale_cooldown = each.value.asp_val.autoscale_override != null ? coalesce(each.value.asp_val.autoscale_override.scaling_rule.dec_scale_cooldown, var.app_service_plan.autoscale.scaling_rule.dec_scale_cooldown) : var.app_service_plan.autoscale.memory_percentage.dec_scale_cooldown |
| 43 | + metric = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.metric, var.app_service_plan.autoscale.scaling_rule.metric) : var.app_service_plan.autoscale.scaling_rule.metric |
| 44 | + |
| 45 | + capacity_min = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.capacity_min, var.app_service_plan.autoscale.scaling_rule.capacity_min) : var.app_service_plan.autoscale.scaling_rule.capacity_min |
| 46 | + capacity_max = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.capacity_max, var.app_service_plan.autoscale.scaling_rule.capacity_max) : var.app_service_plan.autoscale.scaling_rule.capacity_max |
| 47 | + capacity_def = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.capacity_def, var.app_service_plan.autoscale.scaling_rule.capacity_def) : var.app_service_plan.autoscale.scaling_rule.capacity_def |
| 48 | + |
| 49 | + time_grain = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.time_grain, var.app_service_plan.autoscale.scaling_rule.time_grain) : var.app_service_plan.autoscale.scaling_rule.time_grain |
| 50 | + statistic = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.statistic, var.app_service_plan.autoscale.scaling_rule.statistic) : var.app_service_plan.autoscale.scaling_rule.statistic |
| 51 | + time_window = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.time_window, var.app_service_plan.autoscale.scaling_rule.time_window) : var.app_service_plan.autoscale.scaling_rule.time_window |
| 52 | + time_aggregation = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.time_aggregation, var.app_service_plan.autoscale.scaling_rule.time_aggregation) : var.app_service_plan.autoscale.scaling_rule.time_aggregation |
| 53 | + |
| 54 | + inc_operator = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.inc_operator, var.app_service_plan.autoscale.scaling_rule.inc_operator) : var.app_service_plan.autoscale.scaling_rule.inc_operator |
| 55 | + inc_threshold = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.inc_threshold, var.app_service_plan.autoscale.scaling_rule.inc_threshold) : var.app_service_plan.autoscale.scaling_rule.inc_threshold |
| 56 | + inc_scale_direction = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.inc_scale_direction, var.app_service_plan.autoscale.scaling_rule.inc_scale_direction) : var.app_service_plan.autoscale.scaling_rule.inc_scale_direction |
| 57 | + inc_scale_type = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.inc_scale_type, var.app_service_plan.autoscale.scaling_rule.inc_scale_type) : var.app_service_plan.autoscale.scaling_rule.inc_scale_type |
| 58 | + inc_scale_value = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.inc_scale_value, var.app_service_plan.autoscale.scaling_rule.inc_scale_value) : var.app_service_plan.autoscale.scaling_rule.inc_scale_value |
| 59 | + inc_scale_cooldown = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.inc_scale_cooldown, var.app_service_plan.autoscale.scaling_rule.inc_scale_cooldown) : var.app_service_plan.autoscale.scaling_rule.inc_scale_cooldown |
| 60 | + |
| 61 | + dec_operator = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.dec_operator, var.app_service_plan.autoscale.scaling_rule.dec_operator) : var.app_service_plan.autoscale.scaling_rule.dec_operator |
| 62 | + dec_threshold = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.dec_threshold, var.app_service_plan.autoscale.scaling_rule.dec_threshold) : var.app_service_plan.autoscale.scaling_rule.dec_threshold |
| 63 | + dec_scale_direction = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.dec_scale_direction, var.app_service_plan.autoscale.scaling_rule.dec_scale_direction) : var.app_service_plan.autoscale.scaling_rule.dec_scale_direction |
| 64 | + dec_scale_type = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.dec_scale_type, var.app_service_plan.autoscale.scaling_rule.dec_scale_type) : var.app_service_plan.autoscale.scaling_rule.dec_scale_type |
| 65 | + dec_scale_value = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.dec_scale_value, var.app_service_plan.autoscale.scaling_rule.dec_scale_value) : var.app_service_plan.autoscale.scaling_rule.dec_scale_value |
| 66 | + dec_scale_cooldown = each.value.autoscale_override != null ? coalesce(each.value.autoscale_override.scaling_rule.dec_scale_cooldown, var.app_service_plan.autoscale.scaling_rule.dec_scale_cooldown) : var.app_service_plan.autoscale.scaling_rule.dec_scale_cooldown |
62 | 67 | } |
0 commit comments