Fix regression in project factory module context (#3708)

* fix regression in pf

* regression test
This commit is contained in:
Ludovico Magnocavallo
2026-02-05 19:06:34 +01:00
committed by GitHub
parent 97297d6065
commit 06da98fac6
4 changed files with 36 additions and 8 deletions

View File

@@ -47,7 +47,6 @@ The code is meant to be executed by a high level service account with powerful p
- [Variables](#variables)
- [Outputs](#outputs)
- [Tests](#tests)
- [Tags with $iam_principals interpolation](#tags-with-iam_principals-interpolation)
<!-- END TOC -->
## Folder hierarchy
@@ -869,6 +868,7 @@ compute.disableSerialPortAccess:
| [service_accounts](outputs.tf#L158) | Service account emails. | |
| [storage_buckets](outputs.tf#L163) | Bucket names. | |
<!-- END TFDOC -->
## Tests
These tests validate fixes to the project factory.
@@ -876,6 +876,13 @@ These tests validate fixes to the project factory.
```hcl
module "project-factory" {
source = "./fabric/modules/project-factory"
context = {
condition_vars = {
organization = {
id = 1234567890
}
}
}
data_defaults = {
billing_account = "012345-67890A-ABCDEF"
locations = {
@@ -895,7 +902,7 @@ module "project-factory" {
projects = "data/projects"
}
}
# tftest modules=4 resources=24 files=test-0,test-1,test-2 inventory=test-1.yaml
# tftest modules=5 resources=25 files=test-0,test-1,test-2 inventory=test-1.yaml
```
```yaml
@@ -905,6 +912,13 @@ services:
- iam.googleapis.com
- contactcenteraiplatform.googleapis.com
- container.googleapis.com
iam_bindings_additive:
test_context:
role: roles/viewer
member: user:user1@example.com
condition:
title: Test context
expression: resource.matchTag('${organization.id}/context', 'project-factory')
# tftest-file id=test-0 path=data/projects/test-0.yaml
```
@@ -929,8 +943,6 @@ services:
# tftest-file id=test-2 path=data/projects/test-2.yaml
```
### Tags with $iam_principals interpolation
This test validates that `$iam_principals:service_accounts/...` interpolation works correctly
within tags IAM definitions when referencing automation service accounts created by the same
project-factory.
@@ -974,4 +986,3 @@ tags:
- $iam_principals:service_accounts/tags-iam-test/automation/rw
# tftest-file id=tags-iam-test path=data/projects/tags-iam-test.yaml
```

View File

@@ -39,7 +39,7 @@ resource "terraform_data" "defaults_preconditions" {
}
# precondition {
# condition = local.projects_input == null
# error_message = yamlencode(local.budget_project_sets)
# error_message = yamlencode(var.context.condition_vars)
# }
}
}

View File

@@ -95,11 +95,11 @@ module "projects" {
each.value.contacts, var.data_merges.contacts
)
context = merge(local.ctx, {
condition_vars = {
condition_vars = merge(local.ctx.condition_vars, {
folder_ids = {
for k, v in local.ctx_folder_ids : replace(k, "$folder_ids:", "") => v
}
}
})
folder_ids = local.ctx_folder_ids
})
default_service_account = try(each.value.default_service_account, "keep")

View File

@@ -20,3 +20,20 @@ values:
project_id: test-1
module.project-factory.module.projects["test-2"].google_project.project[0]:
project_id: bar-test-2
module.project-factory.module.projects-iam["test-0"].google_project_iam_member.bindings["test_context"]:
condition:
- description: null
expression: resource.matchTag('1234567890/context', 'project-factory')
title: Test context
member: user:user1@example.com
project: foo-test-0
role: roles/viewer
counts:
google_project: 3
google_project_iam_member: 6
google_project_service: 10
google_project_service_identity: 3
google_storage_project_service_account: 1
modules: 5
resources: 25
terraform_data: 2