Skip to content

Commit 12b206a

Browse files
authored
Added backend preference to global application load balancers (GoogleCloudPlatform#3139)
1 parent df0ed1a commit 12b206a

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

modules/net-lb-app-ext/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1065,7 +1065,7 @@ After provisioning this change, and verifying that the new certificate is provis
10651065
| [name](variables.tf#L108) | Load balancer name. | <code>string</code> || |
10661066
| [project_id](variables.tf#L204) | Project id. | <code>string</code> || |
10671067
| [backend_buckets_config](variables.tf#L17) | Backend buckets configuration. | <code title="map&#40;object&#40;&#123;&#10; bucket_name &#61; string&#10; compression_mode &#61; optional&#40;string&#41;&#10; custom_response_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; description &#61; optional&#40;string&#41;&#10; edge_security_policy &#61; optional&#40;string&#41;&#10; enable_cdn &#61; optional&#40;bool&#41;&#10; cdn_policy &#61; optional&#40;object&#40;&#123;&#10; bypass_cache_on_request_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; cache_mode &#61; optional&#40;string&#41;&#10; client_ttl &#61; optional&#40;number&#41;&#10; default_ttl &#61; optional&#40;number&#41;&#10; max_ttl &#61; optional&#40;number&#41;&#10; negative_caching &#61; optional&#40;bool&#41;&#10; request_coalescing &#61; optional&#40;bool&#41;&#10; serve_while_stale &#61; optional&#40;number&#41;&#10; signed_url_cache_max_age_sec &#61; optional&#40;number&#41;&#10; cache_key_policy &#61; optional&#40;object&#40;&#123;&#10; include_http_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; query_string_whitelist &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;&#10; negative_caching_policy &#61; optional&#40;object&#40;&#123;&#10; code &#61; optional&#40;number&#41;&#10; ttl &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
1068-
| [backend_service_configs](variables-backend-service.tf#L19) | Backend service level configuration. | <code title="map&#40;object&#40;&#123;&#10; affinity_cookie_ttl_sec &#61; optional&#40;number&#41;&#10; compression_mode &#61; optional&#40;string&#41;&#10; connection_draining_timeout_sec &#61; optional&#40;number&#41;&#10; custom_request_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; custom_response_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; enable_cdn &#61; optional&#40;bool&#41;&#10; health_checks &#61; optional&#40;list&#40;string&#41;, &#91;&#34;default&#34;&#93;&#41;&#10; log_sample_rate &#61; optional&#40;number&#41;&#10; locality_lb_policy &#61; optional&#40;string&#41;&#10; port_name &#61; optional&#40;string&#41;&#10; project_id &#61; optional&#40;string&#41;&#10; protocol &#61; optional&#40;string&#41;&#10; security_policy &#61; optional&#40;string&#41;&#10; session_affinity &#61; optional&#40;string&#41;&#10; timeout_sec &#61; optional&#40;number&#41;&#10; backends &#61; list&#40;object&#40;&#123;&#10; backend &#61; string&#10; balancing_mode &#61; optional&#40;string, &#34;UTILIZATION&#34;&#41;&#10; capacity_scaler &#61; optional&#40;number, 1&#41;&#10; description &#61; optional&#40;string, &#34;Terraform managed.&#34;&#41;&#10; failover &#61; optional&#40;bool, false&#41;&#10; max_connections &#61; optional&#40;object&#40;&#123;&#10; per_endpoint &#61; optional&#40;number&#41;&#10; per_group &#61; optional&#40;number&#41;&#10; per_instance &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; max_rate &#61; optional&#40;object&#40;&#123;&#10; per_endpoint &#61; optional&#40;number&#41;&#10; per_group &#61; optional&#40;number&#41;&#10; per_instance &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; max_utilization &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; cdn_policy &#61; optional&#40;object&#40;&#123;&#10; cache_mode &#61; optional&#40;string&#41;&#10; client_ttl &#61; optional&#40;number&#41;&#10; default_ttl &#61; optional&#40;number&#41;&#10; max_ttl &#61; optional&#40;number&#41;&#10; negative_caching &#61; optional&#40;bool&#41;&#10; serve_while_stale &#61; optional&#40;number&#41;&#10; signed_url_cache_max_age_sec &#61; optional&#40;number&#41;&#10; cache_key_policy &#61; optional&#40;object&#40;&#123;&#10; include_host &#61; optional&#40;bool&#41;&#10; include_named_cookies &#61; optional&#40;list&#40;string&#41;&#41;&#10; include_protocol &#61; optional&#40;bool&#41;&#10; include_query_string &#61; optional&#40;bool&#41;&#10; query_string_blacklist &#61; optional&#40;list&#40;string&#41;&#41;&#10; query_string_whitelist &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;&#10; negative_caching_policy &#61; optional&#40;object&#40;&#123;&#10; code &#61; optional&#40;number&#41;&#10; ttl &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; circuit_breakers &#61; optional&#40;object&#40;&#123;&#10; max_connections &#61; optional&#40;number&#41;&#10; max_pending_requests &#61; optional&#40;number&#41;&#10; max_requests &#61; optional&#40;number&#41;&#10; max_requests_per_connection &#61; optional&#40;number&#41;&#10; max_retries &#61; optional&#40;number&#41;&#10; connect_timeout &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; consistent_hash &#61; optional&#40;object&#40;&#123;&#10; http_header_name &#61; optional&#40;string&#41;&#10; minimum_ring_size &#61; optional&#40;number&#41;&#10; http_cookie &#61; optional&#40;object&#40;&#123;&#10; name &#61; optional&#40;string&#41;&#10; path &#61; optional&#40;string&#41;&#10; ttl &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; iap_config &#61; optional&#40;object&#40;&#123;&#10; oauth2_client_id &#61; optional&#40;string&#41;&#10; oauth2_client_secret &#61; optional&#40;string&#41;&#10; oauth2_client_secret_sha256 &#61; optional&#40;string&#41;&#10; &#125;&#41;&#41;&#10; locality_lb_policies &#61; optional&#40;list&#40;object&#40;&#123;&#10; policy &#61; optional&#40;object&#40;&#123;&#10; name &#61; string&#10; &#125;&#41;&#41;&#10; custom_policy &#61; optional&#40;object&#40;&#123;&#10; name &#61; string&#10; data &#61; optional&#40;string&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#41;&#10; outlier_detection &#61; optional&#40;object&#40;&#123;&#10; consecutive_errors &#61; optional&#40;number&#41;&#10; consecutive_gateway_failure &#61; optional&#40;number&#41;&#10; enforcing_consecutive_errors &#61; optional&#40;number&#41;&#10; enforcing_consecutive_gateway_failure &#61; optional&#40;number&#41;&#10; enforcing_success_rate &#61; optional&#40;number&#41;&#10; max_ejection_percent &#61; optional&#40;number&#41;&#10; success_rate_minimum_hosts &#61; optional&#40;number&#41;&#10; success_rate_request_volume &#61; optional&#40;number&#41;&#10; success_rate_stdev_factor &#61; optional&#40;number&#41;&#10; base_ejection_time &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; interval &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; security_settings &#61; optional&#40;object&#40;&#123;&#10; client_tls_policy &#61; optional&#40;string&#41;&#10; subject_alt_names &#61; optional&#40;list&#40;string&#41;&#41;&#10; aws_v4_authentication &#61; optional&#40;object&#40;&#123;&#10; access_key_id &#61; optional&#40;string&#41;&#10; access_key &#61; optional&#40;string&#41;&#10; access_key_version &#61; optional&#40;string&#41;&#10; origin_region &#61; optional&#40;string&#41;&#10; &#125;&#41;&#41;&#10;&#125;&#41;&#41; &#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41; &#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
1068+
| [backend_service_configs](variables-backend-service.tf#L19) | Backend service level configuration. | <code title="map&#40;object&#40;&#123;&#10; affinity_cookie_ttl_sec &#61; optional&#40;number&#41;&#10; compression_mode &#61; optional&#40;string&#41;&#10; connection_draining_timeout_sec &#61; optional&#40;number&#41;&#10; custom_request_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; custom_response_headers &#61; optional&#40;list&#40;string&#41;&#41;&#10; enable_cdn &#61; optional&#40;bool&#41;&#10; health_checks &#61; optional&#40;list&#40;string&#41;, &#91;&#34;default&#34;&#93;&#41;&#10; log_sample_rate &#61; optional&#40;number&#41;&#10; locality_lb_policy &#61; optional&#40;string&#41;&#10; port_name &#61; optional&#40;string&#41;&#10; project_id &#61; optional&#40;string&#41;&#10; protocol &#61; optional&#40;string&#41;&#10; security_policy &#61; optional&#40;string&#41;&#10; session_affinity &#61; optional&#40;string&#41;&#10; timeout_sec &#61; optional&#40;number&#41;&#10; backends &#61; list&#40;object&#40;&#123;&#10; backend &#61; string&#10; preference &#61; optional&#40;string, &#34;DEFAULT&#34;&#41;&#10; balancing_mode &#61; optional&#40;string, &#34;UTILIZATION&#34;&#41;&#10; capacity_scaler &#61; optional&#40;number, 1&#41;&#10; description &#61; optional&#40;string, &#34;Terraform managed.&#34;&#41;&#10; failover &#61; optional&#40;bool, false&#41;&#10; max_connections &#61; optional&#40;object&#40;&#123;&#10; per_endpoint &#61; optional&#40;number&#41;&#10; per_group &#61; optional&#40;number&#41;&#10; per_instance &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; max_rate &#61; optional&#40;object&#40;&#123;&#10; per_endpoint &#61; optional&#40;number&#41;&#10; per_group &#61; optional&#40;number&#41;&#10; per_instance &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; max_utilization &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; cdn_policy &#61; optional&#40;object&#40;&#123;&#10; cache_mode &#61; optional&#40;string&#41;&#10; client_ttl &#61; optional&#40;number&#41;&#10; default_ttl &#61; optional&#40;number&#41;&#10; max_ttl &#61; optional&#40;number&#41;&#10; negative_caching &#61; optional&#40;bool&#41;&#10; serve_while_stale &#61; optional&#40;number&#41;&#10; signed_url_cache_max_age_sec &#61; optional&#40;number&#41;&#10; cache_key_policy &#61; optional&#40;object&#40;&#123;&#10; include_host &#61; optional&#40;bool&#41;&#10; include_named_cookies &#61; optional&#40;list&#40;string&#41;&#41;&#10; include_protocol &#61; optional&#40;bool&#41;&#10; include_query_string &#61; optional&#40;bool&#41;&#10; query_string_blacklist &#61; optional&#40;list&#40;string&#41;&#41;&#10; query_string_whitelist &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;&#10; negative_caching_policy &#61; optional&#40;object&#40;&#123;&#10; code &#61; optional&#40;number&#41;&#10; ttl &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; circuit_breakers &#61; optional&#40;object&#40;&#123;&#10; max_connections &#61; optional&#40;number&#41;&#10; max_pending_requests &#61; optional&#40;number&#41;&#10; max_requests &#61; optional&#40;number&#41;&#10; max_requests_per_connection &#61; optional&#40;number&#41;&#10; max_retries &#61; optional&#40;number&#41;&#10; connect_timeout &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; consistent_hash &#61; optional&#40;object&#40;&#123;&#10; http_header_name &#61; optional&#40;string&#41;&#10; minimum_ring_size &#61; optional&#40;number&#41;&#10; http_cookie &#61; optional&#40;object&#40;&#123;&#10; name &#61; optional&#40;string&#41;&#10; path &#61; optional&#40;string&#41;&#10; ttl &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; iap_config &#61; optional&#40;object&#40;&#123;&#10; oauth2_client_id &#61; optional&#40;string&#41;&#10; oauth2_client_secret &#61; optional&#40;string&#41;&#10; oauth2_client_secret_sha256 &#61; optional&#40;string&#41;&#10; &#125;&#41;&#41;&#10; locality_lb_policies &#61; optional&#40;list&#40;object&#40;&#123;&#10; policy &#61; optional&#40;object&#40;&#123;&#10; name &#61; string&#10; &#125;&#41;&#41;&#10; custom_policy &#61; optional&#40;object&#40;&#123;&#10; name &#61; string&#10; data &#61; optional&#40;string&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#41;&#10; outlier_detection &#61; optional&#40;object&#40;&#123;&#10; consecutive_errors &#61; optional&#40;number&#41;&#10; consecutive_gateway_failure &#61; optional&#40;number&#41;&#10; enforcing_consecutive_errors &#61; optional&#40;number&#41;&#10; enforcing_consecutive_gateway_failure &#61; optional&#40;number&#41;&#10; enforcing_success_rate &#61; optional&#40;number&#41;&#10; max_ejection_percent &#61; optional&#40;number&#41;&#10; success_rate_minimum_hosts &#61; optional&#40;number&#41;&#10; success_rate_request_volume &#61; optional&#40;number&#41;&#10; success_rate_stdev_factor &#61; optional&#40;number&#41;&#10; base_ejection_time &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; interval &#61; optional&#40;object&#40;&#123;&#10; seconds &#61; number&#10; nanos &#61; optional&#40;number&#41;&#10; &#125;&#41;&#41;&#10; &#125;&#41;&#41;&#10; security_settings &#61; optional&#40;object&#40;&#123;&#10; client_tls_policy &#61; optional&#40;string&#41;&#10; subject_alt_names &#61; optional&#40;list&#40;string&#41;&#41;&#10; aws_v4_authentication &#61; optional&#40;object&#40;&#123;&#10; access_key_id &#61; optional&#40;string&#41;&#10; access_key &#61; optional&#40;string&#41;&#10; access_key_version &#61; optional&#40;string&#41;&#10; origin_region &#61; optional&#40;string&#41;&#10; &#125;&#41;&#41;&#10;&#125;&#41;&#41; &#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41; &#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
10691069
| [description](variables.tf#L50) | Optional description used for resources. | <code>string</code> | | <code>&#34;Terraform managed.&#34;</code> |
10701070
| [forwarding_rules_config](variables.tf#L56) | The optional forwarding rules configuration. | <code title="map&#40;object&#40;&#123;&#10; address &#61; optional&#40;string&#41;&#10; description &#61; optional&#40;string&#41;&#10; ipv6 &#61; optional&#40;bool, false&#41;&#10; name &#61; optional&#40;string&#41;&#10; ports &#61; optional&#40;list&#40;number&#41;, null&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code title="&#123;&#10; &#34;&#34; &#61; &#123;&#125;&#10;&#125;">&#123;&#8230;&#125;</code> |
10711071
| [group_configs](variables.tf#L77) | Optional unmanaged groups to create. Can be referenced in backends via key or outputs. | <code title="map&#40;object&#40;&#123;&#10; zone &#61; string&#10; instances &#61; optional&#40;list&#40;string&#41;&#41;&#10; named_ports &#61; optional&#40;map&#40;number&#41;, &#123;&#125;&#41;&#10; project_id &#61; optional&#40;string&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |

modules/net-lb-app-ext/backend-service.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ resource "google_compute_backend_service" "default" {
7878
for_each = { for b in coalesce(each.value.backends, []) : b.backend => b }
7979
content {
8080
group = lookup(local.group_ids, backend.key, backend.key)
81+
preference = backend.value.preference
8182
balancing_mode = backend.value.balancing_mode # UTILIZATION, RATE
8283
capacity_scaler = backend.value.capacity_scaler
8384
description = backend.value.description

modules/net-lb-app-ext/variables-backend-service.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ variable "backend_service_configs" {
3737
backends = list(object({
3838
# group renamed to backend
3939
backend = string
40+
preference = optional(string, "DEFAULT")
4041
balancing_mode = optional(string, "UTILIZATION")
4142
capacity_scaler = optional(number, 1)
4243
description = optional(string, "Terraform managed.")
@@ -163,6 +164,15 @@ variable "backend_service_configs" {
163164
]))
164165
error_message = "When specified, balancing mode needs to be 'RATE' or 'UTILIZATION'."
165166
}
167+
validation {
168+
condition = alltrue(flatten([
169+
for backend_service in values(var.backend_service_configs) : [
170+
for backend in backend_service.backends : contains(
171+
["DEFAULT", "PREFERRED"], coalesce(backend.preference, "DEFAULT")
172+
)]
173+
]))
174+
error_message = "When specified, balancing mode needs to be 'DEFAULT' or 'PREFERRED'."
175+
}
166176
validation {
167177
condition = alltrue([
168178
for backend_service in values(var.backend_service_configs) :

0 commit comments

Comments
 (0)