/** * Copyright 2025 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 { _outputs_automation_buckets = { for k, v in local.automation_buckets : v.parent_name => k } _outputs_automation_sas = { for k, v in local.automation_sas : v.prefix => k... } outputs_projects = { for k, v in local.projects_input : k => { aspect_types = ( v.factories_config.aspect_types == null ? {} : module.aspect-types[k].ids ) automation = { bucket = try( module.automation-bucket[local._outputs_automation_buckets[k]].name, null ) service_accounts = { for sa in lookup(local._outputs_automation_sas, k, []) : sa => { email = module.automation-service-accounts[sa].email iam_email = module.automation-service-accounts[sa].iam_email id = module.automation-service-accounts[sa].id } } } kms_keys = local.projects_kms_keys[k] number = module.projects[k].number project_id = module.projects[k].project_id log_buckets = { for sk, sv in lookup(v, "log_buckets", {}) : "${k}/${sk}" => ( module.log-buckets["${k}/${sk}"].id ) } pubsub_topics = { for sk, sv in lookup(v, "pubsub_topics", {}) : "${k}/${sk}" => ( module.pubsub["${k}/${sk}"].id ) } service_accounts = { for sk, sv in lookup(v, "service_accounts", {}) : "${k}/${sk}" => { email = module.service-accounts["${k}/${sk}"].email iam_email = module.service-accounts["${k}/${sk}"].iam_email id = module.service-accounts["${k}/${sk}"].id } } storage_buckets = { for sk, sv in lookup(v, "buckets", {}) : "${k}/${sk}" => ( module.buckets["${k}/${sk}"].name ) } tag_keys = { for sk, sv in module.projects[k].tag_keys : sk => sv.id } tag_values = { for sk, sv in module.projects[k].tag_values : sk => sv.id } tag_vars = { for sk, sv in module.projects[k].tag_keys : sk => sv.namespaced_name # the provider returns allowed_values_regex set to "" not null if try(sv.allowed_values_regex, "") != "" } workload_identity_pools = ( module.projects[k].workload_identity_pool_ids ) workload_identity_providers = ( module.projects[k].workload_identity_providers ) } } outputs_service_accounts = merge( merge([ for k, v in local.outputs_projects : v.service_accounts ]...), { for k, v in module.automation-service-accounts : k => { email = v.email iam_email = v.iam_email id = v.id } } ) } output "folder_ids" { description = "Folder ids." value = local.folder_ids } output "iam_principals" { description = "IAM principals mappings." value = local.iam_principals } output "kms_keys" { description = "KMS key ids." value = local.kms_keys } output "log_buckets" { description = "Log bucket ids." value = merge([ for k, v in local.outputs_projects : v.log_buckets ]...) } output "project_ids" { description = "Project ids." value = local.project_ids } output "project_numbers" { description = "Project numbers." value = { for k, v in local.outputs_projects : k => v.number } } output "projects" { description = "Project attributes." value = local.outputs_projects } output "pubsub_topics" { description = "PubSub topic ids." value = merge([ for k, v in local.outputs_projects : v.pubsub_topics ]...) } output "service_account_emails" { description = "Service account emails." value = { for k, v in local.outputs_service_accounts : k => v.email } } output "service_account_iam_emails" { description = "Service account IAM-format emails." value = { for k, v in local.outputs_service_accounts : k => v.iam_email } } output "service_account_ids" { description = "Service account IDs." value = { for k, v in local.outputs_service_accounts : k => v.id } } output "service_accounts" { description = "Service account emails." value = local.outputs_service_accounts } output "service_agents" { description = "Service agent emails." value = { for k, v in local.projects_service_agents : trimprefix(k, "service_agents/") => { email = trimprefix(v, "serviceAccount:") iam_email = v } } } output "storage_buckets" { description = "Bucket names." value = merge( merge([ for k, v in local.outputs_projects : v.storage_buckets ]...), { for k, v in module.automation-bucket : k => v.name } ) }