diff --git a/modules/project-factory/README.md b/modules/project-factory/README.md index 4600340e6..a5811dc60 100644 --- a/modules/project-factory/README.md +++ b/modules/project-factory/README.md @@ -768,7 +768,7 @@ compute.disableSerialPortAccess: | [projects-defaults.tf](./projects-defaults.tf) | None | | | | [projects-log-buckets.tf](./projects-log-buckets.tf) | None | logging-bucket | | | [projects-service-accounts.tf](./projects-service-accounts.tf) | None | iam-service-account | | -| [projects.tf](./projects.tf) | None | project | | +| [projects.tf](./projects.tf) | None | project | terraform_data | | [variables-billing.tf](./variables-billing.tf) | None | | | | [variables-folders.tf](./variables-folders.tf) | None | | | | [variables-projects.tf](./variables-projects.tf) | None | | | @@ -831,7 +831,7 @@ module "project-factory" { projects = "data/projects" } } -# tftest modules=4 resources=23 files=test-0,test-1,test-2 +# tftest modules=4 resources=24 files=test-0,test-1,test-2 ``` ```yaml diff --git a/modules/project-factory/projects.tf b/modules/project-factory/projects.tf index 9788ca0d3..0b0cb8cad 100644 --- a/modules/project-factory/projects.tf +++ b/modules/project-factory/projects.tf @@ -28,7 +28,8 @@ locals { _projects_input = { for k, v in merge(local._folder_projects_raw, local._projects_raw) : basename(k) => merge( - try(local._templates_raw[v.project_template], {}), v + try(local._templates_raw[v.project_template], {}), + v ) } _projects_path = try( @@ -57,6 +58,19 @@ locals { projects_input = merge(var.projects, local._projects_output) } +resource "terraform_data" "project-preconditions" { + lifecycle { + precondition { + condition = alltrue([ + for k, v in local._projects_input : + try(v.project_template, null) == null || + lookup(local._templates_raw, v.project_template, null) != null + ]) + error_message = "Missing project templates referenced in projects." + } + } +} + module "projects" { source = "../project" for_each = local.projects_input diff --git a/tests/fast/stages/s0_org_setup/simple.yaml b/tests/fast/stages/s0_org_setup/simple.yaml index adc1a0190..4a8f6e5cb 100644 --- a/tests/fast/stages/s0_org_setup/simple.yaml +++ b/tests/fast/stages/s0_org_setup/simple.yaml @@ -2837,5 +2837,5 @@ counts: google_tags_tag_value_iam_binding: 4 local_file: 9 modules: 48 - resources: 312 - terraform_data: 2 + resources: 313 + terraform_data: 3 diff --git a/tests/fast/stages/s2_networking/ncc.yaml b/tests/fast/stages/s2_networking/ncc.yaml index b634c983a..d751d43f7 100644 --- a/tests/fast/stages/s2_networking/ncc.yaml +++ b/tests/fast/stages/s2_networking/ncc.yaml @@ -2047,5 +2047,5 @@ counts: google_storage_bucket_object: 2 modules: 23 random_id: 3 - resources: 183 - terraform_data: 1 + resources: 184 + terraform_data: 2 diff --git a/tests/fast/stages/s2_networking/nva.yaml b/tests/fast/stages/s2_networking/nva.yaml index 787c5da51..b7216827b 100644 --- a/tests/fast/stages/s2_networking/nva.yaml +++ b/tests/fast/stages/s2_networking/nva.yaml @@ -45,5 +45,5 @@ counts: google_storage_bucket_object: 2 modules: 35 random_id: 3 - resources: 202 - terraform_data: 1 + resources: 203 + terraform_data: 2 diff --git a/tests/fast/stages/s2_networking/simple.yaml b/tests/fast/stages/s2_networking/simple.yaml index cad7ef689..99a28ba4f 100644 --- a/tests/fast/stages/s2_networking/simple.yaml +++ b/tests/fast/stages/s2_networking/simple.yaml @@ -2054,5 +2054,5 @@ counts: google_storage_bucket_object: 2 modules: 25 random_id: 3 - resources: 185 - terraform_data: 1 + resources: 186 + terraform_data: 2 diff --git a/tests/fast/stages/s2_networking/vpns.yaml b/tests/fast/stages/s2_networking/vpns.yaml index 19ddf84bb..b4533768e 100644 --- a/tests/fast/stages/s2_networking/vpns.yaml +++ b/tests/fast/stages/s2_networking/vpns.yaml @@ -2471,5 +2471,5 @@ counts: google_storage_bucket_object: 2 modules: 27 random_id: 15 - resources: 214 - terraform_data: 1 + resources: 215 + terraform_data: 2 diff --git a/tests/fast/stages/s2_project_factory/simple.yaml b/tests/fast/stages/s2_project_factory/simple.yaml index cc9f07be2..0eff74fac 100644 --- a/tests/fast/stages/s2_project_factory/simple.yaml +++ b/tests/fast/stages/s2_project_factory/simple.yaml @@ -23,5 +23,5 @@ counts: google_storage_bucket_object: 1 google_tags_tag_binding: 2 modules: 8 - resources: 19 - terraform_data: 1 + resources: 20 + terraform_data: 2 diff --git a/tests/fast/stages/s2_security/simple.yaml b/tests/fast/stages/s2_security/simple.yaml index a9292d6e2..61e75f0c4 100644 --- a/tests/fast/stages/s2_security/simple.yaml +++ b/tests/fast/stages/s2_security/simple.yaml @@ -419,5 +419,5 @@ counts: google_storage_bucket_object: 2 google_tags_tag_binding: 2 modules: 15 - resources: 50 - terraform_data: 1 + resources: 51 + terraform_data: 2 diff --git a/tests/modules/project_factory/examples/example.yaml b/tests/modules/project_factory/examples/example.yaml index 3005a4426..9654d9d0a 100644 --- a/tests/modules/project_factory/examples/example.yaml +++ b/tests/modules/project_factory/examples/example.yaml @@ -719,5 +719,5 @@ counts: google_tags_tag_value: 2 google_tags_tag_value_iam_binding: 1 modules: 27 - resources: 94 - terraform_data: 1 + resources: 95 + terraform_data: 2