diff --git a/fast/stages/1-resman/tenant-root.tf b/fast/stages/1-resman/tenant-root.tf
index 7c00bc806a..c65bb0c02c 100644
--- a/fast/stages/1-resman/tenant-root.tf
+++ b/fast/stages/1-resman/tenant-root.tf
@@ -41,22 +41,62 @@ module "automation-project" {
tags = merge(local.tags, {
(var.tag_names.context) = {
description = "Resource management context."
- iam = {}
+ iam = try(local.tags.context.iam, {})
values = {
- data = {}
- gke = {}
- gcve = {}
- networking = {}
- sandbox = {}
- security = {}
+ data = {
+ iam = try(local.tags.context.values.data.iam, {})
+ description = try(local.tags.context.values.data.description, null)
+ }
+ gke = {
+ iam = try(local.tags.context.values.gke.iam, {})
+ description = try(local.tags.context.values.gke.description, null)
+ }
+ gcve = {
+ iam = try(local.tags.context.values.gcve.iam, {})
+ description = try(local.tags.context.values.gcve.description, null)
+ }
+ networking = {
+ iam = try(local.tags.context.values.networking.iam, {})
+ description = try(local.tags.context.values.networking.description, null)
+ }
+ project-factory = {
+ iam = try(local.tags.context.values.project-factory.iam, {})
+ description = try(local.tags.context.values.project-factory.description, null)
+ }
+ sandbox = {
+ iam = try(local.tags.context.values.sandbox.iam, {})
+ description = try(local.tags.context.values.sandbox.description, null)
+ }
+ security = {
+ iam = try(local.tags.context.values.security.iam, {})
+ description = try(local.tags.context.values.security.description, null)
+ }
}
}
(var.tag_names.environment) = {
description = "Environment definition."
- iam = {}
+ iam = try(local.tags.environment.iam, {})
values = {
- development = {}
- production = {}
+ development = {
+ iam = try(local.tags.environment.values.development.iam, {})
+ iam_bindings = {
+ pf = {
+ members = [module.branch-pf-sa.iam_email]
+ role = "roles/resourcemanager.tagUser"
+ }
+ }
+ description = try(local.tags.environment.values.development.description, null)
+ }
+ production = {
+ iam = try(local.tags.environment.values.production.iam, {})
+ iam_bindings = {
+ pf = {
+ members = [module.branch-pf-sa.iam_email]
+ role = "roles/resourcemanager.tagUser"
+ }
+ }
+ description = try(local.tags.environment.values.production.description, null)
+ }
}
}
})
diff --git a/fast/stages/1-resman/top-level-folders.tf b/fast/stages/1-resman/top-level-folders.tf
index 2668468104..e2e8901cfc 100644
--- a/fast/stages/1-resman/top-level-folders.tf
+++ b/fast/stages/1-resman/top-level-folders.tf
@@ -68,7 +68,7 @@ locals {
module "top-level-folder" {
source = "../../../modules/folder"
for_each = local.top_level_folders
- parent = "organizations/${var.organization.id}"
+ parent = local.root_node
name = each.value.name
contacts = each.value.contacts
firewall_policy = each.value.firewall_policy
diff --git a/fast/stages/1-tenant-factory/README.md b/fast/stages/1-tenant-factory/README.md
index 2716f2f032..c253bf9dc4 100644
--- a/fast/stages/1-tenant-factory/README.md
+++ b/fast/stages/1-tenant-factory/README.md
@@ -309,13 +309,13 @@ gcloud storage cp gs://{prefix}-{tenant-shortname}-prod-iac-core-0/tfvars/0-boot
|---|---|:---:|:---:|:---:|:---:|
| [automation](variables-fast.tf#L19) | Automation resources created by the bootstrap stage. | object({…})
| ✓ | | 0-bootstrap
|
| [billing_account](variables-fast.tf#L42) | Billing account id. If billing account is not part of the same org set `is_org_level` to `false`. To disable handling of billing IAM roles set `no_iam` to `true`. | object({…})
| ✓ | | 0-bootstrap
|
-| [logging](variables-fast.tf#L96) | Logging resources created by the bootstrap stage. | object({…})
| ✓ | | 0-bootstrap
|
-| [org_policy_tags](variables-fast.tf#L115) | Organization policy tags. | object({…})
| ✓ | | 0-bootstrap
|
-| [organization](variables-fast.tf#L105) | Organization details. | object({…})
| ✓ | | 0-bootstrap
|
-| [prefix](variables-fast.tf#L132) | Prefix used for resources that need unique names. Use 9 characters or less. | string
| ✓ | | 0-bootstrap
|
-| [custom_roles](variables-fast.tf#L53) | Custom roles defined at the org level, in key => id format. | object({…})
| | null
| 0-bootstrap
|
-| [groups](variables-fast.tf#L68) | Group names or IAM-format principals to grant organization-level permissions. If just the name is provided, the 'group:' principal and organization domain are interpolated. | object({…})
| | {}
| 0-bootstrap
|
-| [locations](variables-fast.tf#L83) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…})
| | {}
| 0-bootstrap
|
+| [logging](variables-fast.tf#L99) | Logging resources created by the bootstrap stage. | object({…})
| ✓ | | 0-bootstrap
|
+| [org_policy_tags](variables-fast.tf#L118) | Organization policy tags. | object({…})
| ✓ | | 0-bootstrap
|
+| [organization](variables-fast.tf#L108) | Organization details. | object({…})
| ✓ | | 0-bootstrap
|
+| [prefix](variables-fast.tf#L135) | Prefix used for resources that need unique names. Use 9 characters or less. | string
| ✓ | | 0-bootstrap
|
+| [custom_roles](variables-fast.tf#L53) | Custom roles defined at the org level, in key => id format. | object({…})
| | null
| 0-bootstrap
|
+| [groups](variables-fast.tf#L71) | Group names or IAM-format principals to grant organization-level permissions. If just the name is provided, the 'group:' principal and organization domain are interpolated. | object({…})
| | {}
| 0-bootstrap
|
+| [locations](variables-fast.tf#L86) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…})
| | {}
| 0-bootstrap
|
| [outputs_location](variables.tf#L17) | Path where providers and tfvars files for the following stages are written. Leave empty to disable. | string
| | null
| |
| [root_node](variables.tf#L23) | Root folder under which tenants are created, in folders/nnnn format. Defaults to the organization if null. | string
| | null
| |
| [tag_names](variables.tf#L36) | Customized names for resource management tags. | object({…})
| | {}
| |
diff --git a/fast/stages/1-tenant-factory/variables-fast.tf b/fast/stages/1-tenant-factory/variables-fast.tf
index b7eb168cfd..be76b320a9 100644
--- a/fast/stages/1-tenant-factory/variables-fast.tf
+++ b/fast/stages/1-tenant-factory/variables-fast.tf
@@ -56,11 +56,14 @@ variable "custom_roles" {
type = object({
gcve_network_admin = string
network_firewall_policies_admin = string
- ngfw_enterprise_admin = string
- organization_admin_viewer = string
- service_project_network_admin = string
- storage_viewer = string
- tenant_network_admin = string
+ # TODO: remove after v34.0.0
+ network_firewall_policies_viewer = optional(string)
+ ngfw_enterprise_admin = optional(string)
+ ngfw_enterprise_viewer = optional(string)
+ organization_admin_viewer = string
+ service_project_network_admin = string
+ storage_viewer = string
+ tenant_network_admin = string
})
default = null
}