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