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) :