diff --git a/main.tf b/main.tf index 51512b01..94431eeb 100644 --- a/main.tf +++ b/main.tf @@ -102,6 +102,7 @@ module "budget" { create_budget = var.budget_amount != null projects = [module.project-factory.project_id] + project_numbers = [module.project-factory.project_number] billing_account = var.billing_account amount = var.budget_amount alert_spent_percents = var.budget_alert_spent_percents diff --git a/metadata.yaml b/metadata.yaml index 8e2b5f13..16aeb31a 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -382,6 +382,6 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 5.41, < 7" + version: ">= 5.41, < 8" - source: hashicorp/google-beta - version: ">= 5.41, < 7" + version: ">= 5.41, < 8" diff --git a/modules/budget/README.md b/modules/budget/README.md index 0b96a947..da5d5fd5 100644 --- a/modules/budget/README.md +++ b/modules/budget/README.md @@ -33,6 +33,7 @@ module "project_myproject" { | display\_name | The display name of the budget. If not set defaults to `Budget For ` | `string` | `null` | no | | labels | A single label and value pair specifying that usage from only this set of labeled resources should be included in the budget. | `map(string)` | `{}` | no | | monitoring\_notification\_channels | A list of monitoring notification channels in the form `[projects/{project_id}/notificationChannels/{channel_id}]`. A maximum of 5 channels are allowed. | `list(string)` | `[]` | no | +| project\_numbers | The project numbers to include in this budget. If empty project numbers will be determined automatically from the projects variable | `list(string)` | `[]` | no | | projects | The project ids to include in this budget. If empty budget will include all projects | `list(string)` | n/a | yes | | services | A list of services ids to be included in the budget. If omitted, all services will be included in the budget. Service ids can be found at https://cloud.google.com/skus/ | `list(string)` | `null` | no | diff --git a/modules/budget/main.tf b/modules/budget/main.tf index 13bde8d3..e2fd7dc7 100644 --- a/modules/budget/main.tf +++ b/modules/budget/main.tf @@ -15,17 +15,20 @@ */ locals { - project_name = length(var.projects) == 0 ? "All Projects" : var.projects[0] + project_name = length(var.project_numbers) == 0 && length(var.projects) == 0 ? "All Projects" : try(var.projects[0], var.project_numbers[0]) display_name = var.display_name == null ? "Budget For ${local.project_name}" : var.display_name all_updates_rule = var.alert_pubsub_topic == null && length(var.monitoring_notification_channels) == 0 ? [] : ["1"] custom_period = var.calendar_period == "CUSTOM" ? [1] : [] start_date = length(local.custom_period) != 0 ? split("-", var.custom_period_start_date) : null end_date = length(local.custom_period) != 0 ? split("-", var.custom_period_end_date) : null - projects = length(var.projects) == 0 ? null : [ + projects = length(var.project_numbers) > 0 ? [ + for project_number in var.project_numbers : + "projects/${project_number}" + ] : length(var.projects) > 0 ? [ for project in data.google_project.project : "projects/${project.number}" - ] + ] : null services = var.services == null ? null : [ for id in var.services : "services/${id}" @@ -34,7 +37,7 @@ locals { data "google_project" "project" { depends_on = [var.projects] - count = var.create_budget ? length(var.projects) : 0 + count = var.create_budget && length(var.project_numbers) == 0 ? length(var.projects) : 0 project_id = element(var.projects, count.index) } diff --git a/modules/budget/metadata.yaml b/modules/budget/metadata.yaml index c894d388..a926d475 100644 --- a/modules/budget/metadata.yaml +++ b/modules/budget/metadata.yaml @@ -66,6 +66,10 @@ spec: description: The project ids to include in this budget. If empty budget will include all projects varType: list(string) required: true + - name: project_numbers + description: The project numbers to include in this budget. If empty project numbers will be determined automatically from the projects variable + varType: list(string) + defaultValue: [] - name: amount description: The amount to use as the budget varType: number @@ -145,4 +149,4 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 4.28, < 7" + version: ">= 4.28, < 8" diff --git a/modules/budget/variables.tf b/modules/budget/variables.tf index 75cb6fb3..d31f345d 100644 --- a/modules/budget/variables.tf +++ b/modules/budget/variables.tf @@ -24,6 +24,16 @@ variable "projects" { type = list(string) } +variable "project_numbers" { + description = "The project numbers to include in this budget. If empty project numbers will be determined automatically from the projects variable" + type = list(string) + default = [] + validation { + condition = length(var.project_numbers) == 0 || length(var.project_numbers) == length(var.projects) + error_message = "Length of project_numbers must match length of projects if project_numbers are provided." + } +} + variable "amount" { description = "The amount to use as the budget" type = number diff --git a/modules/essential_contacts/metadata.yaml b/modules/essential_contacts/metadata.yaml index 5bd0f1e0..69931d07 100644 --- a/modules/essential_contacts/metadata.yaml +++ b/modules/essential_contacts/metadata.yaml @@ -102,6 +102,6 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 3.43, < 7" + version: ">= 3.43, < 8" - source: hashicorp/google-beta - version: ">= 3.43, < 7" + version: ">= 3.43, < 8" diff --git a/modules/fabric-project/metadata.yaml b/modules/fabric-project/metadata.yaml index 82b499f6..faec9e39 100644 --- a/modules/fabric-project/metadata.yaml +++ b/modules/fabric-project/metadata.yaml @@ -176,4 +176,4 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 5.41, < 7" + version: ">= 5.41, < 8" diff --git a/modules/gsuite_enabled/metadata.yaml b/modules/gsuite_enabled/metadata.yaml index 21a45136..ed2c7f8a 100644 --- a/modules/gsuite_enabled/metadata.yaml +++ b/modules/gsuite_enabled/metadata.yaml @@ -275,6 +275,6 @@ spec: - source: DeviaVir/gsuite version: ~> 0.1 - source: hashicorp/google - version: ">= 4.11, < 7" + version: ">= 4.11, < 8" - source: hashicorp/google-beta - version: ">= 4.11, < 7" + version: ">= 4.11, < 8" diff --git a/modules/project_services/metadata.yaml b/modules/project_services/metadata.yaml index 56483187..60ed2202 100644 --- a/modules/project_services/metadata.yaml +++ b/modules/project_services/metadata.yaml @@ -127,6 +127,6 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 3.43, < 7" + version: ">= 3.43, < 8" - source: hashicorp/google-beta - version: ">= 3.43, < 7" + version: ">= 3.43, < 8" diff --git a/modules/quota_manager/metadata.yaml b/modules/quota_manager/metadata.yaml index 55ea06c7..8ca8fc69 100644 --- a/modules/quota_manager/metadata.yaml +++ b/modules/quota_manager/metadata.yaml @@ -102,4 +102,4 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google-beta - version: ">= 4.11, < 7" + version: ">= 4.11, < 8" diff --git a/modules/shared_vpc_access/metadata.yaml b/modules/shared_vpc_access/metadata.yaml index d2605346..9127be61 100644 --- a/modules/shared_vpc_access/metadata.yaml +++ b/modules/shared_vpc_access/metadata.yaml @@ -129,6 +129,6 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 3.43, < 7" + version: ">= 3.43, < 8" - source: hashicorp/google-beta - version: ">= 3.43, < 7" + version: ">= 3.43, < 8" diff --git a/modules/svpc_service_project/metadata.yaml b/modules/svpc_service_project/metadata.yaml index 98a18918..af19a594 100644 --- a/modules/svpc_service_project/metadata.yaml +++ b/modules/svpc_service_project/metadata.yaml @@ -260,6 +260,6 @@ spec: - serviceusage.googleapis.com providerVersions: - source: hashicorp/google - version: ">= 4.5, < 7" + version: ">= 4.5, < 8" - source: hashicorp/google-beta - version: ">= 4.5, < 7" + version: ">= 4.5, < 8"