modules/template_architecture_definition/locals.tf (234 lines of code) (raw):

locals { # Determine template architecture definition inputs from starter module tfvars starter_module_tfvars = jsondecode(file("${var.starter_module_folder_path}/terraform.tfvars.json")) default_prefix = try(local.starter_module_tfvars.default_prefix, "alz") optional_postfix = try(local.starter_module_tfvars.optional_postfix, "") management_group_configuration = try(local.starter_module_tfvars.management_group_configuration, {}) platform_management_group_children = try(local.starter_module_tfvars.platform_management_group_children, {}) landing_zone_management_group_children = try(local.starter_module_tfvars.landing_zone_management_group_children, {}) default_template_file_path = "${path.module}/templates/architecture_definition.json.tftpl" template_file_path = var.architecture_definition_template_path != "" ? var.architecture_definition_template_path : local.default_template_file_path # Customer has provided a custom architecture definition has_architecture_definition_override = var.architecture_definition_override_path != "" # ALZ archetypes alz_root_archtype = ["root"] alz_platform_archtype = ["platform"] alz_landing_zone_archtype = ["landing_zones"] alz_decommissioned_archtype = ["decommissioned"] alz_sandboxes_archtype = ["sandbox"] alz_management_archtype = ["management"] alz_connectivity_archtype = ["connectivity"] alz_identity_archtype = ["identity"] alz_corp_archtype = ["corp"] alz_online_archtype = ["online"] # Management group configuration archetypes config_root_archtypes = try(local.management_group_configuration.root.archetypes, []) config_platform_archtypes = try(local.management_group_configuration.platform.archetypes, []) config_landingzones_archtypes = try(local.management_group_configuration.landingzones.archetypes, []) config_decommissioned_archtypes = try(local.management_group_configuration.decommissioned.archetypes, []) config_sandbox_archtypes = try(local.management_group_configuration.sandbox.archetypes, []) config_management_archtypes = try(local.management_group_configuration.management.archetypes, []) config_connectivity_archtypes = try(local.management_group_configuration.connectivity.archetypes, []) config_identity_archtypes = try(local.management_group_configuration.identity.archetypes, []) config_corp_archtypes = try(local.management_group_configuration.corp.archetypes, []) config_online_archtypes = try(local.management_group_configuration.online.archetypes, []) config_confidential_corp_archtypes = try(local.management_group_configuration.confidential_corp.archetypes, []) config_confidential_online_archtypes = try(local.management_group_configuration.confidential_online.archetypes, []) # management group layered archetypes root_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_root_archtype, local.config_root_archtypes) : local.config_root_archtypes platform_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_platform_archtype, local.config_platform_archtypes) : local.config_platform_archtypes landingzones_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_landing_zone_archtype, local.config_landingzones_archtypes) : local.config_landingzones_archtypes decommissioned_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_decommissioned_archtype, local.config_decommissioned_archtypes) : local.config_decommissioned_archtypes sandbox_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_sandboxes_archtype, local.config_sandbox_archtypes) : local.config_sandbox_archtypes management_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_management_archtype, local.config_management_archtypes) : local.config_management_archtypes connectivity_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_connectivity_archtype, local.config_connectivity_archtypes) : local.config_connectivity_archtypes identity_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_identity_archtype, local.config_identity_archtypes) : local.config_identity_archtypes corp_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_corp_archtype, local.config_corp_archtypes) : local.config_corp_archtypes online_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_online_archtype, local.config_online_archtypes) : local.config_online_archtypes confidential_corp_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_corp_archtype, local.config_confidential_corp_archtypes) : local.config_confidential_corp_archtypes confidential_online_archtypes = var.apply_alz_archetypes_via_architecture_definition_template ? concat(local.alz_online_archtype, local.config_confidential_online_archtypes) : local.config_confidential_online_archtypes management_group_format_variables = { default_prefix = local.default_prefix optional_postfix = local.optional_postfix } root_management_group_id = try(templatestring(local.management_group_configuration.root.id, local.management_group_format_variables), "") platform_management_group_id = try(templatestring(local.management_group_configuration.platform.id, local.management_group_format_variables), "") landing_zone_management_group_id = try(templatestring(local.management_group_configuration.landingzones.id, local.management_group_format_variables), "") decommissioned_management_group_id = try(templatestring(local.management_group_configuration.decommissioned.id, local.management_group_format_variables), "") sandbox_management_group_id = try(templatestring(local.management_group_configuration.sandbox.id, local.management_group_format_variables), "") management_management_group_id = try(templatestring(local.management_group_configuration.management.id, local.management_group_format_variables), "") connectivity_management_group_id = try(templatestring(local.management_group_configuration.connectivity.id, local.management_group_format_variables), "") identity_management_group_id = try(templatestring(local.management_group_configuration.identity.id, local.management_group_format_variables), "") corp_management_group_id = try(templatestring(local.management_group_configuration.corp.id, local.management_group_format_variables), "") online_management_group_id = try(templatestring(local.management_group_configuration.online.id, local.management_group_format_variables), "") confidential_corp_management_group_id = try(templatestring(local.management_group_configuration.confidential_corp.id, local.management_group_format_variables), "") confidential_online_management_group_id = try(templatestring(local.management_group_configuration.confidential_online.id, local.management_group_format_variables), "") root_display_name = try(local.management_group_configuration.root.display_name, "") platform_display_name = try(local.management_group_configuration.platform.display_name, "") landing_zone_display_name = try(local.management_group_configuration.landingzones.display_name, "") decommissioned_display_name = try(local.management_group_configuration.decommissioned.display_name, "") sandbox_display_name = try(local.management_group_configuration.sandbox.display_name, "") management_display_name = try(local.management_group_configuration.management.display_name, "") connectivity_display_name = try(local.management_group_configuration.connectivity.display_name, "") identity_display_name = try(local.management_group_configuration.identity.display_name, "") corp_display_name = try(local.management_group_configuration.corp.display_name, "") online_display_name = try(local.management_group_configuration.online.display_name, "") confidential_corp_display_name = try(local.management_group_configuration.confidential_corp.display_name, "") confidential_online_display_name = try(local.management_group_configuration.confidential_online.display_name, "") alz_management_groups = [ { archetypes = jsonencode(local.root_archtypes) display_name = local.root_display_name exists = false id = local.root_management_group_id parent_id = jsonencode(null) }, { archetypes = jsonencode(local.platform_archtypes) display_name = local.platform_display_name exists = false id = local.platform_management_group_id parent_id = jsonencode(local.root_management_group_id) }, { archetypes = jsonencode(local.landingzones_archtypes) display_name = local.landing_zone_display_name exists = false id = local.landing_zone_management_group_id parent_id = jsonencode(local.root_management_group_id) }, { archetypes = jsonencode(local.sandbox_archtypes) display_name = local.sandbox_display_name exists = false id = local.sandbox_management_group_id parent_id = jsonencode(local.root_management_group_id) }, { archetypes = jsonencode(local.decommissioned_archtypes) display_name = local.decommissioned_display_name exists = false id = local.decommissioned_management_group_id parent_id = jsonencode(local.root_management_group_id) }, { archetypes = jsonencode(local.management_archtypes) display_name = local.management_display_name exists = false id = local.management_management_group_id parent_id = jsonencode(local.platform_management_group_id) }, { archetypes = jsonencode(local.connectivity_archtypes) display_name = local.connectivity_display_name exists = false id = local.connectivity_management_group_id parent_id = jsonencode(local.platform_management_group_id) }, { archetypes = jsonencode(local.identity_archtypes) display_name = local.identity_display_name exists = false id = local.identity_management_group_id parent_id = jsonencode(local.platform_management_group_id) }, { archetypes = jsonencode(local.corp_archtypes) display_name = local.corp_display_name exists = false id = local.corp_management_group_id parent_id = jsonencode(local.landing_zone_management_group_id) }, { archetypes = jsonencode(local.online_archtypes) display_name = local.online_display_name exists = false id = local.online_management_group_id parent_id = jsonencode(local.landing_zone_management_group_id) }, { archetypes = jsonencode(local.confidential_corp_archtypes) display_name = local.confidential_corp_display_name exists = false id = local.confidential_corp_management_group_id parent_id = jsonencode(local.landing_zone_management_group_id) }, { archetypes = jsonencode(local.confidential_online_archtypes) display_name = local.confidential_online_display_name exists = false id = local.confidential_online_management_group_id parent_id = jsonencode(local.landing_zone_management_group_id) } ] platform_management_groups = [for k, v in local.platform_management_group_children : { archetypes = jsonencode(try(v.archetypes, [])) display_name = try(v.display_name, "") exists = false id = try(templatestring(v.id, local.management_group_format_variables), "") parent_id = jsonencode(local.platform_management_group_id) } ] landing_zone_management_groups = [for k, v in local.landing_zone_management_group_children : { archetypes = jsonencode(try(v.archetypes, [])) display_name = try(v.display_name, "") exists = false id = try(templatestring(v.id, local.management_group_format_variables), "") parent_id = jsonencode(local.landing_zone_management_group_id) } ] management_groups = concat(local.alz_management_groups, local.platform_management_groups, local.landing_zone_management_groups) template_vars = { architecture_definition_name = var.architecture_definition_name management_groups = local.management_groups } template_file = templatefile(local.template_file_path, local.template_vars) # Validate management group configuration management_groups_validation_map = { root = { id = local.root_management_group_id display_name = local.root_display_name } platform = { id = local.platform_management_group_id, display_name = local.platform_display_name } landing_zone = { id = local.landing_zone_management_group_id display_name = local.landing_zone_display_name } decommissioned = { id = local.decommissioned_management_group_id display_name = local.decommissioned_display_name } sandbox = { id = local.sandbox_management_group_id display_name = local.sandbox_display_name } management = { id = local.management_management_group_id display_name = local.management_display_name } connectivity = { id = local.connectivity_management_group_id display_name = local.connectivity_display_name } identity = { id = local.identity_management_group_id display_name = local.identity_display_name } corp = { id = local.corp_management_group_id display_name = local.corp_display_name } online = { id = local.online_management_group_id display_name = local.online_display_name } confidential_corp = { id = local.confidential_corp_management_group_id display_name = local.confidential_corp_display_name } confidential_online = { id = local.confidential_online_management_group_id display_name = local.confidential_online_display_name } } management_groups_validation = [for k, v in local.management_groups_validation_map : k if v.id == "" || v.display_name == ""] }