4-appfactory/envs/shared/main.tf (76 lines of code) (raw):
/**
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
locals {
application_names = [for k, v in var.applications : k]
expanded_microservices = flatten([
for key, services in var.applications : [
for service_name, service in services : {
app_name = key
service_name = service_name
acronym = local.acronym[key]
service = service
}
]
])
}
// One folder per application, will group admin/service projects under it
resource "google_folder" "app_folder" {
for_each = toset(local.application_names)
display_name = each.key
parent = var.common_folder_id
deletion_protection = false
}
module "components" {
source = "../../modules/app-group-baseline"
for_each = tomap({
for app_service in local.expanded_microservices : "${app_service.app_name}.${app_service.service_name}" => app_service
})
service_name = each.value.service_name
acronym = each.value.acronym
org_id = var.org_id
billing_account = var.billing_account
folder_id = google_folder.app_folder[each.value.app_name].folder_id
envs = var.envs
bucket_prefix = var.bucket_prefix
location = var.location
trigger_location = var.trigger_location
bucket_force_destroy = var.bucket_force_destroy
tf_apply_branches = var.tf_apply_branches
gar_project_id = local.gar_project_id
gar_repository_name = local.gar_image_name
docker_tag_version_terraform = local.gar_tag_version
cluster_projects_ids = local.cluster_projects_ids
cloudbuild_sa_roles = {
development = {
roles = ["roles/owner"]
}
nonproduction = {
roles = ["roles/owner"]
}
production = {
roles = ["roles/owner"]
}
}
// microservices-specific configuration to baseline module
admin_project_id = each.value.service.admin_project_id
create_admin_project = each.value.service.create_admin_project
create_infra_project = each.value.service.create_infra_project
cloudbuildv2_repository_config = var.cloudbuildv2_repository_config
service_perimeter_mode = var.service_perimeter_mode
service_perimeter_name = var.service_perimeter_name
access_level_name = var.access_level_name
workerpool_id = data.terraform_remote_state.bootstrap.outputs.cb_private_workerpool_id
}