From 12b206a72fe37fad2346b26607bc4319549a4f4d Mon Sep 17 00:00:00 2001 From: apichick Date: Tue, 10 Jun 2025 08:49:47 +0200 Subject: [PATCH] Added backend preference to global application load balancers (#3139) --- modules/net-lb-app-ext/README.md | 2 +- modules/net-lb-app-ext/backend-service.tf | 1 + modules/net-lb-app-ext/variables-backend-service.tf | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/net-lb-app-ext/README.md b/modules/net-lb-app-ext/README.md index 6007752f7..fb598f2d2 100644 --- a/modules/net-lb-app-ext/README.md +++ b/modules/net-lb-app-ext/README.md @@ -1065,7 +1065,7 @@ After provisioning this change, and verifying that the new certificate is provis | [name](variables.tf#L108) | Load balancer name. | string | ✓ | | | [project_id](variables.tf#L204) | Project id. | string | ✓ | | | [backend_buckets_config](variables.tf#L17) | Backend buckets configuration. | map(object({…})) | | {} | -| [backend_service_configs](variables-backend-service.tf#L19) | Backend service level configuration. | map(object({…})) })) | | {} | +| [backend_service_configs](variables-backend-service.tf#L19) | Backend service level configuration. | map(object({…})) })) | | {} | | [description](variables.tf#L50) | Optional description used for resources. | string | | "Terraform managed." | | [forwarding_rules_config](variables.tf#L56) | The optional forwarding rules configuration. | map(object({…})) | | {…} | | [group_configs](variables.tf#L77) | Optional unmanaged groups to create. Can be referenced in backends via key or outputs. | map(object({…})) | | {} | diff --git a/modules/net-lb-app-ext/backend-service.tf b/modules/net-lb-app-ext/backend-service.tf index 70a3dab23..2b1d3a43b 100644 --- a/modules/net-lb-app-ext/backend-service.tf +++ b/modules/net-lb-app-ext/backend-service.tf @@ -78,6 +78,7 @@ resource "google_compute_backend_service" "default" { for_each = { for b in coalesce(each.value.backends, []) : b.backend => b } content { group = lookup(local.group_ids, backend.key, backend.key) + preference = backend.value.preference balancing_mode = backend.value.balancing_mode # UTILIZATION, RATE capacity_scaler = backend.value.capacity_scaler description = backend.value.description diff --git a/modules/net-lb-app-ext/variables-backend-service.tf b/modules/net-lb-app-ext/variables-backend-service.tf index 9b2cf576e..613298311 100644 --- a/modules/net-lb-app-ext/variables-backend-service.tf +++ b/modules/net-lb-app-ext/variables-backend-service.tf @@ -37,6 +37,7 @@ variable "backend_service_configs" { backends = list(object({ # group renamed to backend backend = string + preference = optional(string, "DEFAULT") balancing_mode = optional(string, "UTILIZATION") capacity_scaler = optional(number, 1) description = optional(string, "Terraform managed.") @@ -163,6 +164,15 @@ variable "backend_service_configs" { ])) error_message = "When specified, balancing mode needs to be 'RATE' or 'UTILIZATION'." } + validation { + condition = alltrue(flatten([ + for backend_service in values(var.backend_service_configs) : [ + for backend in backend_service.backends : contains( + ["DEFAULT", "PREFERRED"], coalesce(backend.preference, "DEFAULT") + )] + ])) + error_message = "When specified, balancing mode needs to be 'DEFAULT' or 'PREFERRED'." + } validation { condition = alltrue([ for backend_service in values(var.backend_service_configs) :