Skip to content

Commit 8554cd0

Browse files
authored
feat: Added support for google_compute_backend_service outlier_detection (#365)
1 parent 09e9a4b commit 8554cd0

File tree

11 files changed

+203
-3
lines changed

11 files changed

+203
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ module "gce-lb-http" {
120120
| Name | Description | Type | Default | Required |
121121
|------|-------------|------|---------|:--------:|
122122
| address | Existing IPv4 address to use (the actual IP address value) | `string` | `null` | no |
123-
| backends | Map backend indices to list of backend maps. | <pre>map(object({<br> port = optional(number)<br> project = optional(string)<br> protocol = optional(string)<br> port_name = optional(string)<br> description = optional(string)<br> enable_cdn = optional(bool)<br> compression_mode = optional(string)<br> security_policy = optional(string, null)<br> edge_security_policy = optional(string, null)<br> custom_request_headers = optional(list(string))<br> custom_response_headers = optional(list(string))<br><br> timeout_sec = optional(number)<br> connection_draining_timeout_sec = optional(number)<br> session_affinity = optional(string)<br> affinity_cookie_ttl_sec = optional(number)<br><br> health_check = object({<br> host = optional(string)<br> request_path = optional(string)<br> request = optional(string)<br> response = optional(string)<br> port = optional(number)<br> port_name = optional(string)<br> proxy_header = optional(string)<br> port_specification = optional(string)<br> protocol = optional(string)<br> check_interval_sec = optional(number)<br> timeout_sec = optional(number)<br> healthy_threshold = optional(number)<br> unhealthy_threshold = optional(number)<br> logging = optional(bool)<br> })<br><br> log_config = object({<br> enable = optional(bool)<br> sample_rate = optional(number)<br> })<br><br> groups = list(object({<br> group = string<br><br> balancing_mode = optional(string)<br> capacity_scaler = optional(number)<br> description = optional(string)<br> max_connections = optional(number)<br> max_connections_per_instance = optional(number)<br> max_connections_per_endpoint = optional(number)<br> max_rate = optional(number)<br> max_rate_per_instance = optional(number)<br> max_rate_per_endpoint = optional(number)<br> max_utilization = optional(number)<br> }))<br> iap_config = object({<br> enable = bool<br> oauth2_client_id = optional(string)<br> oauth2_client_secret = optional(string)<br> })<br> cdn_policy = optional(object({<br> cache_mode = optional(string)<br> signed_url_cache_max_age_sec = optional(string)<br> default_ttl = optional(number)<br> max_ttl = optional(number)<br> client_ttl = optional(number)<br> negative_caching = optional(bool)<br> negative_caching_policy = optional(object({<br> code = optional(number)<br> ttl = optional(number)<br> }))<br> serve_while_stale = optional(number)<br> cache_key_policy = optional(object({<br> include_host = optional(bool)<br> include_protocol = optional(bool)<br> include_query_string = optional(bool)<br> query_string_blacklist = optional(list(string))<br> query_string_whitelist = optional(list(string))<br> include_http_headers = optional(list(string))<br> include_named_cookies = optional(list(string))<br> }))<br> }))<br> }))</pre> | n/a | yes |
123+
| backends | Map backend indices to list of backend maps. | <pre>map(object({<br> port = optional(number)<br> project = optional(string)<br> protocol = optional(string)<br> port_name = optional(string)<br> description = optional(string)<br> enable_cdn = optional(bool)<br> compression_mode = optional(string)<br> security_policy = optional(string, null)<br> edge_security_policy = optional(string, null)<br> custom_request_headers = optional(list(string))<br> custom_response_headers = optional(list(string))<br><br> timeout_sec = optional(number)<br> connection_draining_timeout_sec = optional(number)<br> session_affinity = optional(string)<br> affinity_cookie_ttl_sec = optional(number)<br><br> health_check = object({<br> host = optional(string)<br> request_path = optional(string)<br> request = optional(string)<br> response = optional(string)<br> port = optional(number)<br> port_name = optional(string)<br> proxy_header = optional(string)<br> port_specification = optional(string)<br> protocol = optional(string)<br> check_interval_sec = optional(number)<br> timeout_sec = optional(number)<br> healthy_threshold = optional(number)<br> unhealthy_threshold = optional(number)<br> logging = optional(bool)<br> })<br><br> log_config = object({<br> enable = optional(bool)<br> sample_rate = optional(number)<br> })<br><br> groups = list(object({<br> group = string<br><br> balancing_mode = optional(string)<br> capacity_scaler = optional(number)<br> description = optional(string)<br> max_connections = optional(number)<br> max_connections_per_instance = optional(number)<br> max_connections_per_endpoint = optional(number)<br> max_rate = optional(number)<br> max_rate_per_instance = optional(number)<br> max_rate_per_endpoint = optional(number)<br> max_utilization = optional(number)<br> }))<br> iap_config = object({<br> enable = bool<br> oauth2_client_id = optional(string)<br> oauth2_client_secret = optional(string)<br> })<br> cdn_policy = optional(object({<br> cache_mode = optional(string)<br> signed_url_cache_max_age_sec = optional(string)<br> default_ttl = optional(number)<br> max_ttl = optional(number)<br> client_ttl = optional(number)<br> negative_caching = optional(bool)<br> negative_caching_policy = optional(object({<br> code = optional(number)<br> ttl = optional(number)<br> }))<br> serve_while_stale = optional(number)<br> cache_key_policy = optional(object({<br> include_host = optional(bool)<br> include_protocol = optional(bool)<br> include_query_string = optional(bool)<br> query_string_blacklist = optional(list(string))<br> query_string_whitelist = optional(list(string))<br> include_http_headers = optional(list(string))<br> include_named_cookies = optional(list(string))<br> }))<br> }))<br> outlier_detection = optional(object({<br> base_ejection_time = optional(object({<br> seconds = number<br> nanos = optional(number)<br> }))<br> consecutive_errors = optional(number)<br> consecutive_gateway_failure = optional(number)<br> enforcing_consecutive_errors = optional(number)<br> enforcing_consecutive_gateway_failure = optional(number)<br> enforcing_success_rate = optional(number)<br> interval = optional(object({<br> seconds = number<br> nanos = optional(number)<br> }))<br> max_ejection_percent = optional(number)<br> success_rate_minimum_hosts = optional(number)<br> success_rate_request_volume = optional(number)<br> success_rate_stdev_factor = optional(number)<br> }))<br> }))</pre> | n/a | yes |
124124
| certificate | Content of the SSL certificate. Required if `ssl` is `true` and `ssl_certificates` is empty. | `string` | `null` | no |
125125
| certificate\_map | Certificate Map ID in format projects/{project}/locations/global/certificateMaps/{name}. Identifies a certificate map associated with the given target proxy | `string` | `null` | no |
126126
| create\_address | Create a new global IPv4 address | `bool` | `true` | no |

autogen/main.tf.tmpl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,37 @@ resource "google_compute_backend_service" "default" {
286286
}
287287
}
288288

289+
dynamic "outlier_detection" {
290+
for_each = each.value.outlier_detection != null && ( var.load_balancing_scheme == "INTERNAL_SELF_MANAGED" || var.load_balancing_scheme == "EXTERNAL_MANAGED" ) ? [1] : []
291+
content {
292+
consecutive_errors = each.value.outlier_detection.consecutive_errors
293+
consecutive_gateway_failure = each.value.outlier_detection.consecutive_gateway_failure
294+
enforcing_consecutive_errors = each.value.outlier_detection.enforcing_consecutive_errors
295+
enforcing_consecutive_gateway_failure = each.value.outlier_detection.enforcing_consecutive_gateway_failure
296+
enforcing_success_rate = each.value.outlier_detection.enforcing_success_rate
297+
max_ejection_percent = each.value.outlier_detection.max_ejection_percent
298+
success_rate_minimum_hosts = each.value.outlier_detection.success_rate_minimum_hosts
299+
success_rate_request_volume = each.value.outlier_detection.success_rate_request_volume
300+
success_rate_stdev_factor = each.value.outlier_detection.success_rate_stdev_factor
301+
302+
dynamic "base_ejection_time" {
303+
for_each = each.value.outlier_detection.base_ejection_time != null ? [1] : []
304+
content {
305+
seconds = each.value.outlier_detection.base_ejection_time.seconds
306+
nanos = each.value.outlier_detection.base_ejection_time.nanos
307+
}
308+
}
309+
310+
dynamic "interval" {
311+
for_each = each.value.outlier_detection.cache_key_policy != null ? [1] : []
312+
content {
313+
seconds = each.value.outlier_detection.cache_key_policy.seconds
314+
nanos = each.value.outlier_detection.cache_key_policy.nanos
315+
}
316+
}
317+
}
318+
}
319+
289320
{% if not serverless %}
290321
depends_on = [
291322
google_compute_health_check.default

autogen/variables.tf.tmpl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,25 @@ variable "backends" {
174174
include_named_cookies = optional(list(string))
175175
}))
176176
}))
177+
outlier_detection = optional(object({
178+
base_ejection_time = optional(object({
179+
seconds = number
180+
nanos = optional(number)
181+
}))
182+
consecutive_errors = optional(number)
183+
consecutive_gateway_failure = optional(number)
184+
enforcing_consecutive_errors = optional(number)
185+
enforcing_consecutive_gateway_failure = optional(number)
186+
enforcing_success_rate = optional(number)
187+
interval = optional(object({
188+
seconds = number
189+
nanos = optional(number)
190+
}))
191+
max_ejection_percent = optional(number)
192+
success_rate_minimum_hosts = optional(number)
193+
success_rate_request_volume = optional(number)
194+
success_rate_stdev_factor = optional(number)
195+
}))
177196
}))
178197
}
179198

main.tf

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,37 @@ resource "google_compute_backend_service" "default" {
277277
}
278278
}
279279

280+
dynamic "outlier_detection" {
281+
for_each = each.value.outlier_detection != null && (var.load_balancing_scheme == "INTERNAL_SELF_MANAGED" || var.load_balancing_scheme == "EXTERNAL_MANAGED") ? [1] : []
282+
content {
283+
consecutive_errors = each.value.outlier_detection.consecutive_errors
284+
consecutive_gateway_failure = each.value.outlier_detection.consecutive_gateway_failure
285+
enforcing_consecutive_errors = each.value.outlier_detection.enforcing_consecutive_errors
286+
enforcing_consecutive_gateway_failure = each.value.outlier_detection.enforcing_consecutive_gateway_failure
287+
enforcing_success_rate = each.value.outlier_detection.enforcing_success_rate
288+
max_ejection_percent = each.value.outlier_detection.max_ejection_percent
289+
success_rate_minimum_hosts = each.value.outlier_detection.success_rate_minimum_hosts
290+
success_rate_request_volume = each.value.outlier_detection.success_rate_request_volume
291+
success_rate_stdev_factor = each.value.outlier_detection.success_rate_stdev_factor
292+
293+
dynamic "base_ejection_time" {
294+
for_each = each.value.outlier_detection.base_ejection_time != null ? [1] : []
295+
content {
296+
seconds = each.value.outlier_detection.base_ejection_time.seconds
297+
nanos = each.value.outlier_detection.base_ejection_time.nanos
298+
}
299+
}
300+
301+
dynamic "interval" {
302+
for_each = each.value.outlier_detection.cache_key_policy != null ? [1] : []
303+
content {
304+
seconds = each.value.outlier_detection.cache_key_policy.seconds
305+
nanos = each.value.outlier_detection.cache_key_policy.nanos
306+
}
307+
}
308+
}
309+
}
310+
280311
depends_on = [
281312
google_compute_health_check.default
282313
]

0 commit comments

Comments
 (0)