* dp rewrite stage 0, projects * remove plan files * generalize handling of basepath for projects in project-factory module * central-0 ---> core-0 * add schemas, validate YAMLs, tags * aspect types * data catalog policy tag factory * add support for data catalog taxonomy to project factory * complete retrofit of old stage configuration, except networking * shared vpc networking * networking * data platform as pf dataset * docs * test * remove legacy dp stage, fix tests and links * boilerplate * tfdoc * fix unrelated tfdoc * schemas * fix errors * schema * duplicate schemas * yamllint * Fix module naming convention for aspect-types * Fix factories_config in vpcs.tf for net-vpc-factory compatibility * Update schema documentation based on schema changes * Fix false rename conflict in .config.yaml files * Sync schemas and update documentation * Fix path expansion for aspect-types and revert projects_input to master * Restore path expansion for org_policies in projects-iam call * Fix trailing newlines in schema duplicates to satisfy duplicate-diff * Fix path expansion for data_catalog_taxonomy in taxonomies.tf * Update inventory for data-platform test and clean up debug prints * Add full values to data-platform inventory * Align Stage 2 VPC Factory integration with Stage 0 and fix tests TAG=agy * Fix project factory context resolution and data platform datasets - Update tag context keys in project factory to use file key without 'projects/' prefix. - Fix tag reference in product-0.yaml. - Fix shared_vpc_service_config in shared-0.yaml by moving service account to network_users. - Set parent for domain-0 folder to data-platform. - Mock net-dev-0 project ID in tests. - Update inventories. TAG=agy CONV=4b37fa5b-bf59-4604-9e8f-b55353d967a0 * Fix project-level tag keys context resolution in project factory * Fix commented out tag reference in domain-0 .config.yaml * Fix merge() calls with empty arguments in project-factory and data-catalog-policy-tag * Update Data Platform dataset README with prerequisites and customization guide * Add Table of Contents to Data Platform dataset README * docs: update Data Platform README with project templates tip * Document data platform output files and linking sequence in README * Update data platform README with VPC-SC and delegated IAM details * Refactor data platform dataset and align stage defaults * Update test inventory and variables for data platform with new prefix
201 lines
5.2 KiB
HCL
201 lines
5.2 KiB
HCL
/**
|
|
* 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
|
|
}
|
|
)
|
|
}
|