7-fortigate/shared/locals.tf (119 lines of code) (raw):

locals { ######################################## # Production prod_pub_idx = one([ for index, s in data.terraform_remote_state.prod_networking.outputs.base_subnets_names : index if can(regex(".*prod-public.*", s)) ]) prod_app_idx = one([ for index, s in data.terraform_remote_state.prod_networking.outputs.base_subnets_names : index if can(regex(".*prod-app.*", s)) ]) prod_data_idx = one([ for index, s in data.terraform_remote_state.prod_networking.outputs.base_subnets_names : index if can(regex(".*prod-data.*", s)) ]) prod_pub_snet_range = data.terraform_remote_state.prod_networking.outputs.base_subnets_ips[local.prod_pub_idx] prod_app_snet_range = data.terraform_remote_state.prod_networking.outputs.base_subnets_ips[local.prod_app_idx] prod_data_snet_range = data.terraform_remote_state.prod_networking.outputs.base_subnets_ips[local.prod_data_idx] prod_vpc_project_id = data.terraform_remote_state.prod_networking.outputs.base_host_project_id prod_vpc_name = data.terraform_remote_state.prod_networking.outputs.base_network_name ######################################## # Nonproduction nprod_pub_idx = one([ for index, s in data.terraform_remote_state.nprod_networking.outputs.base_subnets_names : index if can(regex(".*np-public.*", s)) ]) nprod_app_idx = one([ for index, s in data.terraform_remote_state.nprod_networking.outputs.base_subnets_names : index if can(regex(".*np-app.*", s)) ]) nprod_data_idx = one([ for index, s in data.terraform_remote_state.nprod_networking.outputs.base_subnets_names : index if can(regex(".*np-data.*", s)) ]) nprod_pub_snet_range = data.terraform_remote_state.nprod_networking.outputs.base_subnets_ips[local.nprod_pub_idx] nprod_app_snet_range = data.terraform_remote_state.nprod_networking.outputs.base_subnets_ips[local.nprod_app_idx] nprod_data_snet_range = data.terraform_remote_state.nprod_networking.outputs.base_subnets_ips[local.nprod_data_idx] nprod_vpc_project_id = data.terraform_remote_state.nprod_networking.outputs.base_host_project_id nprod_vpc_name = data.terraform_remote_state.nprod_networking.outputs.base_network_name ######################################## # Development dev_pub_idx = one([ for index, s in data.terraform_remote_state.dev_networking.outputs.base_subnets_names : index if can(regex(".*dev-public.*", s)) ]) dev_app_idx = one([ for index, s in data.terraform_remote_state.dev_networking.outputs.base_subnets_names : index if can(regex(".*dev-app.*", s)) ]) dev_data_idx = one([ for index, s in data.terraform_remote_state.dev_networking.outputs.base_subnets_names : index if can(regex(".*dev-data.*", s)) ]) dev_pub_snet_range = data.terraform_remote_state.dev_networking.outputs.base_subnets_ips[local.dev_pub_idx] dev_app_snet_range = data.terraform_remote_state.dev_networking.outputs.base_subnets_ips[local.dev_app_idx] dev_data_snet_range = data.terraform_remote_state.dev_networking.outputs.base_subnets_ips[local.dev_data_idx] dev_vpc_project_id = data.terraform_remote_state.dev_networking.outputs.base_host_project_id dev_vpc_name = data.terraform_remote_state.dev_networking.outputs.base_network_name ######################################## # Management mgmt_pri_idx = one([ for index, s in data.terraform_remote_state.mgmt_networking.outputs.base_subnets_names : index if can(regex(".*mgmt-primary.*", s)) ]) mgmt_pri_snet_range = data.terraform_remote_state.mgmt_networking.outputs.base_subnets_ips[local.mgmt_pri_idx] ######################################## # Identity iden_pri_idx = one([ for index, s in data.terraform_remote_state.iden_networking.outputs.base_subnets_names : index if can(regex(".*iden-primary.*", s)) ]) iden_pri_snet_range = data.terraform_remote_state.iden_networking.outputs.base_subnets_ips[local.iden_pri_idx] ######################################## # Everything else # primary_subnet_idx = one([ for index, s in data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_subnets_names : index if can(regex(".*primary.*", s)) ]) vpc_primary_subnet = data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_subnets_ips[local.primary_subnet_idx] vpc_private_network_project_id = regex("prj-net-hub-base-\\w+", data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_subnets_self_links[0]) vpc_private_network = data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_network_name vpc_private_network_self_link = data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_network_self_link vpc_subnets_names = data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_subnets_names vpc_subnets_self_links = data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_subnets_self_links vpc_primary_subnet_self_link = local.vpc_subnets_self_links[local.primary_subnet_idx] default_region = data.terraform_remote_state.networks_shared.outputs.base_shared_vpc_subnets_regions[0] # Manage this as part of a comprehensive IPAM system # The hard coded numbers are arbitrary, but reasonable. internal_ilb_address = cidrhost(local.vpc_primary_subnet, 5) private_network_gateway = cidrhost(local.vpc_primary_subnet, 1) private_active_address = cidrhost(local.vpc_primary_subnet, 3) private_passive_address = cidrhost(local.vpc_primary_subnet, 4) # Bootstrap info seed_project_id = data.terraform_remote_state.bootstrap.outputs.seed_project_id //fortigate_image = "projects/fortigcp-project-001/global/images/fortinet-fgtondemand-743-20240208-001-w-license" fortigate_image = "${local.seed_project_id}/fgtvmgvnic-image" } # networks / shared data "terraform_remote_state" "networks_shared" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/networks/envs/shared" } } data "terraform_remote_state" "prod_networking" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/networks/production" } } data "terraform_remote_state" "nprod_networking" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/networks/nonproduction" } } data "terraform_remote_state" "dev_networking" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/networks/development" } } data "terraform_remote_state" "mgmt_networking" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/networks/management" } } data "terraform_remote_state" "iden_networking" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/networks/identity" } } data "terraform_remote_state" "bootstrap" { backend = "gcs" config = { bucket = var.remote_state_bucket prefix = "terraform/bootstrap/state" } }