Fix health checks in net-ilb and compute-mig modules (#69)
* fix health checks in ilb module * fix health check in compute-mig and add basic tests
This commit is contained in:
parent
a51c8be101
commit
fa29a8e26f
|
@ -257,9 +257,9 @@ resource "google_compute_region_instance_group_manager" "default" {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "google_compute_health_check" "default" {
|
resource "google_compute_health_check" "http" {
|
||||||
provider = google-beta
|
provider = google-beta
|
||||||
count = var.health_check_config == null ? 0 : 1
|
count = try(var.health_check_config.type, null) == "http" ? 1 : 0
|
||||||
project = var.project_id
|
project = var.project_id
|
||||||
name = var.name
|
name = var.name
|
||||||
description = "Terraform managed."
|
description = "Terraform managed."
|
||||||
|
@ -269,92 +269,132 @@ resource "google_compute_health_check" "default" {
|
||||||
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
dynamic http_health_check {
|
http_health_check {
|
||||||
for_each = (
|
host = try(var.health_check_config.check.host, null)
|
||||||
try(var.health_check_config.type, null) == "http"
|
port = try(var.health_check_config.check.port, null)
|
||||||
? [var.health_check_config.check]
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
: []
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
)
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
iterator = check
|
request_path = try(var.health_check_config.check.request_path, null)
|
||||||
content {
|
response = try(var.health_check_config.check.response, null)
|
||||||
host = try(check.value.host, null)
|
}
|
||||||
port = try(check.value.port, null)
|
|
||||||
port_name = try(check.value.port_name, null)
|
dynamic log_config {
|
||||||
port_specification = try(check.value.port_specification, null)
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
content {
|
||||||
request_path = try(check.value.request_path, null)
|
enable = true
|
||||||
response = try(check.value.response, null)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic https_health_check {
|
resource "google_compute_health_check" "https" {
|
||||||
for_each = (
|
provider = google-beta
|
||||||
try(var.health_check_config.type, null) == "https"
|
count = try(var.health_check_config.type, null) == "https" ? 1 : 0
|
||||||
? [var.health_check_config.check]
|
project = var.project_id
|
||||||
: []
|
name = var.name
|
||||||
)
|
description = "Terraform managed."
|
||||||
iterator = check
|
|
||||||
content {
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
host = try(check.value.host, null)
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
port = try(check.value.port, null)
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
port_name = try(check.value.port_name, null)
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
port_specification = try(check.value.port_specification, null)
|
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
https_health_check {
|
||||||
request_path = try(check.value.request_path, null)
|
host = try(var.health_check_config.check.host, null)
|
||||||
response = try(check.value.response, null)
|
port = try(var.health_check_config.check.port, null)
|
||||||
}
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
}
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
dynamic tcp_health_check {
|
request_path = try(var.health_check_config.check.request_path, null)
|
||||||
for_each = (
|
response = try(var.health_check_config.check.response, null)
|
||||||
try(var.health_check_config.type, null) == "tcp"
|
}
|
||||||
? [var.health_check_config.check]
|
|
||||||
: []
|
dynamic log_config {
|
||||||
)
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
iterator = check
|
content {
|
||||||
content {
|
enable = true
|
||||||
port = try(check.value.port, null)
|
}
|
||||||
port_name = try(check.value.port_name, null)
|
}
|
||||||
port_specification = try(check.value.port_specification, null)
|
}
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
|
||||||
request = try(check.value.request, null)
|
resource "google_compute_health_check" "tcp" {
|
||||||
response = try(check.value.response, null)
|
provider = google-beta
|
||||||
}
|
count = try(var.health_check_config.type, null) == "tcp" ? 1 : 0
|
||||||
}
|
project = var.project_id
|
||||||
|
name = var.name
|
||||||
dynamic ssl_health_check {
|
description = "Terraform managed."
|
||||||
for_each = (
|
|
||||||
try(var.health_check_config.type, null) == "ssl"
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
? [var.health_check_config.check]
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
: []
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
)
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
iterator = check
|
|
||||||
content {
|
tcp_health_check {
|
||||||
port = try(check.value.port, null)
|
port = try(var.health_check_config.check.port, null)
|
||||||
port_name = try(check.value.port_name, null)
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
port_specification = try(check.value.port_specification, null)
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
request = try(check.value.request, null)
|
request = try(var.health_check_config.check.request, null)
|
||||||
response = try(check.value.response, null)
|
response = try(var.health_check_config.check.response, null)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
dynamic log_config {
|
||||||
dynamic http2_health_check {
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
for_each = (
|
content {
|
||||||
try(var.health_check_config.type, null) == "http2"
|
enable = true
|
||||||
? [var.health_check_config.check]
|
}
|
||||||
: []
|
}
|
||||||
)
|
}
|
||||||
iterator = check
|
|
||||||
content {
|
resource "google_compute_health_check" "ssl" {
|
||||||
host = try(check.value.host, null)
|
provider = google-beta
|
||||||
port = try(check.value.port, null)
|
count = try(var.health_check_config.type, null) == "ssl" ? 1 : 0
|
||||||
port_name = try(check.value.port_name, null)
|
project = var.project_id
|
||||||
port_specification = try(check.value.port_specification, null)
|
name = var.name
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
description = "Terraform managed."
|
||||||
request_path = try(check.value.request_path, null)
|
|
||||||
response = try(check.value.response, null)
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
}
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
|
ssl_health_check {
|
||||||
|
port = try(var.health_check_config.check.port, null)
|
||||||
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
|
request = try(var.health_check_config.check.request, null)
|
||||||
|
response = try(var.health_check_config.check.response, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic log_config {
|
||||||
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
|
content {
|
||||||
|
enable = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_compute_health_check" "http2" {
|
||||||
|
provider = google-beta
|
||||||
|
count = try(var.health_check_config.type, null) == "http2" ? 1 : 0
|
||||||
|
project = var.project_id
|
||||||
|
name = var.name
|
||||||
|
description = "Terraform managed."
|
||||||
|
|
||||||
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
|
http2_health_check {
|
||||||
|
host = try(var.health_check_config.check.host, null)
|
||||||
|
port = try(var.health_check_config.check.port, null)
|
||||||
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
|
request_path = try(var.health_check_config.check.request_path, null)
|
||||||
|
response = try(var.health_check_config.check.response, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic log_config {
|
dynamic log_config {
|
||||||
|
@ -363,5 +403,4 @@ resource "google_compute_health_check" "default" {
|
||||||
enable = true
|
enable = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,16 @@ output "group_manager" {
|
||||||
|
|
||||||
output "health_check" {
|
output "health_check" {
|
||||||
description = "Auto-created health-check resource."
|
description = "Auto-created health-check resource."
|
||||||
value = var.health_check_config == null ? null : try(
|
value = (
|
||||||
google_compute_health_check.default.0, {}
|
var.health_check_config == null
|
||||||
|
? null
|
||||||
|
: try(
|
||||||
|
google_compute_health_check.http.0,
|
||||||
|
google_compute_health_check.https.0,
|
||||||
|
google_compute_health_check.tcp.0,
|
||||||
|
google_compute_health_check.ssl.0,
|
||||||
|
google_compute_health_check.http2.0,
|
||||||
|
{}
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ variable "default_version" {
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "health_check_config" {
|
variable "health_check_config" {
|
||||||
description = "Optional auto-created helth check configuration, use the output self-link to set it in the auto healing policy. Refer to examples for usage."
|
description = "Optional auto-created health check configuration, use the output self-link to set it in the auto healing policy. Refer to examples for usage."
|
||||||
type = object({
|
type = object({
|
||||||
type = string # http https tcp ssl http2
|
type = string # http https tcp ssl http2
|
||||||
check = map(any) # actual health check block attributes
|
check = map(any) # actual health check block attributes
|
||||||
|
|
|
@ -17,9 +17,17 @@
|
||||||
|
|
||||||
locals {
|
locals {
|
||||||
health_check = (
|
health_check = (
|
||||||
var.health_check == null
|
var.health_check != null
|
||||||
? try(google_compute_health_check.default.0.self_link, null)
|
? var.health_check
|
||||||
: var.health_check
|
: try(local.health_check_resource.self_link, null)
|
||||||
|
)
|
||||||
|
health_check_resource = try(
|
||||||
|
google_compute_health_check.http.0,
|
||||||
|
google_compute_health_check.https.0,
|
||||||
|
google_compute_health_check.tcp.0,
|
||||||
|
google_compute_health_check.ssl.0,
|
||||||
|
google_compute_health_check.http2.0,
|
||||||
|
{}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,9 +89,9 @@ resource "google_compute_region_backend_service" "default" {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "google_compute_health_check" "default" {
|
resource "google_compute_health_check" "http" {
|
||||||
provider = google-beta
|
provider = google-beta
|
||||||
count = var.health_check == null ? 1 : 0
|
count = try(var.health_check_config.type, null) == "http" ? 1 : 0
|
||||||
project = var.project_id
|
project = var.project_id
|
||||||
name = var.name
|
name = var.name
|
||||||
description = "Terraform managed."
|
description = "Terraform managed."
|
||||||
|
@ -93,92 +101,14 @@ resource "google_compute_health_check" "default" {
|
||||||
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
dynamic http_health_check {
|
http_health_check {
|
||||||
for_each = (
|
host = try(var.health_check_config.check.host, null)
|
||||||
try(var.health_check_config.type, null) == "http"
|
port = try(var.health_check_config.check.port, null)
|
||||||
? [var.health_check_config.check]
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
: []
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
)
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
iterator = check
|
request_path = try(var.health_check_config.check.request_path, null)
|
||||||
content {
|
response = try(var.health_check_config.check.response, null)
|
||||||
host = try(check.value.host, null)
|
|
||||||
port = try(check.value.port, null)
|
|
||||||
port_name = try(check.value.port_name, null)
|
|
||||||
port_specification = try(check.value.port_specification, null)
|
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
|
||||||
request_path = try(check.value.request_path, null)
|
|
||||||
response = try(check.value.response, null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamic https_health_check {
|
|
||||||
for_each = (
|
|
||||||
try(var.health_check_config.type, null) == "https"
|
|
||||||
? [var.health_check_config.check]
|
|
||||||
: []
|
|
||||||
)
|
|
||||||
iterator = check
|
|
||||||
content {
|
|
||||||
host = try(check.value.host, null)
|
|
||||||
port = try(check.value.port, null)
|
|
||||||
port_name = try(check.value.port_name, null)
|
|
||||||
port_specification = try(check.value.port_specification, null)
|
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
|
||||||
request_path = try(check.value.request_path, null)
|
|
||||||
response = try(check.value.response, null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamic tcp_health_check {
|
|
||||||
for_each = (
|
|
||||||
try(var.health_check_config.type, null) == "tcp"
|
|
||||||
? [var.health_check_config.check]
|
|
||||||
: []
|
|
||||||
)
|
|
||||||
iterator = check
|
|
||||||
content {
|
|
||||||
port = try(check.value.port, null)
|
|
||||||
port_name = try(check.value.port_name, null)
|
|
||||||
port_specification = try(check.value.port_specification, null)
|
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
|
||||||
request = try(check.value.request, null)
|
|
||||||
response = try(check.value.response, null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamic ssl_health_check {
|
|
||||||
for_each = (
|
|
||||||
try(var.health_check_config.type, null) == "ssl"
|
|
||||||
? [var.health_check_config.check]
|
|
||||||
: []
|
|
||||||
)
|
|
||||||
iterator = check
|
|
||||||
content {
|
|
||||||
port = try(check.value.port, null)
|
|
||||||
port_name = try(check.value.port_name, null)
|
|
||||||
port_specification = try(check.value.port_specification, null)
|
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
|
||||||
request = try(check.value.request, null)
|
|
||||||
response = try(check.value.response, null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamic http2_health_check {
|
|
||||||
for_each = (
|
|
||||||
try(var.health_check_config.type, null) == "http2"
|
|
||||||
? [var.health_check_config.check]
|
|
||||||
: []
|
|
||||||
)
|
|
||||||
iterator = check
|
|
||||||
content {
|
|
||||||
host = try(check.value.host, null)
|
|
||||||
port = try(check.value.port, null)
|
|
||||||
port_name = try(check.value.port_name, null)
|
|
||||||
port_specification = try(check.value.port_specification, null)
|
|
||||||
proxy_header = try(check.value.proxy_header, null)
|
|
||||||
request_path = try(check.value.request_path, null)
|
|
||||||
response = try(check.value.response, null)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic log_config {
|
dynamic log_config {
|
||||||
|
@ -187,5 +117,123 @@ resource "google_compute_health_check" "default" {
|
||||||
enable = true
|
enable = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "google_compute_health_check" "https" {
|
||||||
|
provider = google-beta
|
||||||
|
count = try(var.health_check_config.type, null) == "https" ? 1 : 0
|
||||||
|
project = var.project_id
|
||||||
|
name = var.name
|
||||||
|
description = "Terraform managed."
|
||||||
|
|
||||||
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
|
https_health_check {
|
||||||
|
host = try(var.health_check_config.check.host, null)
|
||||||
|
port = try(var.health_check_config.check.port, null)
|
||||||
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
|
request_path = try(var.health_check_config.check.request_path, null)
|
||||||
|
response = try(var.health_check_config.check.response, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic log_config {
|
||||||
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
|
content {
|
||||||
|
enable = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_compute_health_check" "tcp" {
|
||||||
|
provider = google-beta
|
||||||
|
count = try(var.health_check_config.type, null) == "tcp" ? 1 : 0
|
||||||
|
project = var.project_id
|
||||||
|
name = var.name
|
||||||
|
description = "Terraform managed."
|
||||||
|
|
||||||
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
|
tcp_health_check {
|
||||||
|
port = try(var.health_check_config.check.port, null)
|
||||||
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
|
request = try(var.health_check_config.check.request, null)
|
||||||
|
response = try(var.health_check_config.check.response, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic log_config {
|
||||||
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
|
content {
|
||||||
|
enable = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_compute_health_check" "ssl" {
|
||||||
|
provider = google-beta
|
||||||
|
count = try(var.health_check_config.type, null) == "ssl" ? 1 : 0
|
||||||
|
project = var.project_id
|
||||||
|
name = var.name
|
||||||
|
description = "Terraform managed."
|
||||||
|
|
||||||
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
|
ssl_health_check {
|
||||||
|
port = try(var.health_check_config.check.port, null)
|
||||||
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
|
request = try(var.health_check_config.check.request, null)
|
||||||
|
response = try(var.health_check_config.check.response, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic log_config {
|
||||||
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
|
content {
|
||||||
|
enable = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_compute_health_check" "http2" {
|
||||||
|
provider = google-beta
|
||||||
|
count = try(var.health_check_config.type, null) == "http2" ? 1 : 0
|
||||||
|
project = var.project_id
|
||||||
|
name = var.name
|
||||||
|
description = "Terraform managed."
|
||||||
|
|
||||||
|
check_interval_sec = try(var.health_check_config.config.check_interval_sec, null)
|
||||||
|
healthy_threshold = try(var.health_check_config.config.healthy_threshold, null)
|
||||||
|
timeout_sec = try(var.health_check_config.config.timeout_sec, null)
|
||||||
|
unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null)
|
||||||
|
|
||||||
|
http2_health_check {
|
||||||
|
host = try(var.health_check_config.check.host, null)
|
||||||
|
port = try(var.health_check_config.check.port, null)
|
||||||
|
port_name = try(var.health_check_config.check.port_name, null)
|
||||||
|
port_specification = try(var.health_check_config.check.port_specification, null)
|
||||||
|
proxy_header = try(var.health_check_config.check.proxy_header, null)
|
||||||
|
request_path = try(var.health_check_config.check.request_path, null)
|
||||||
|
response = try(var.health_check_config.check.response, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic log_config {
|
||||||
|
for_each = try(var.health_check_config.logging, false) ? [""] : []
|
||||||
|
content {
|
||||||
|
enable = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,15 +51,15 @@ output "forwarding_rule_self_link" {
|
||||||
|
|
||||||
output "health_check" {
|
output "health_check" {
|
||||||
description = "Auto-created health-check resource."
|
description = "Auto-created health-check resource."
|
||||||
value = try(google_compute_health_check.default.0, {})
|
value = local.health_check_resource
|
||||||
}
|
}
|
||||||
|
|
||||||
output "health_check_self_id" {
|
output "health_check_self_id" {
|
||||||
description = "Auto-created health-check self id."
|
description = "Auto-created health-check self id."
|
||||||
value = try(google_compute_health_check.default.0.id, null)
|
value = try(local.health_check_resource.id, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
output "health_check_self_link" {
|
output "health_check_self_link" {
|
||||||
description = "Auto-created health-check self link."
|
description = "Auto-created health-check self link."
|
||||||
value = try(google_compute_health_check.default.0.self_link, null)
|
value = try(local.health_check_resource.self_link, null)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Copyright 2020 Google LLC
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
|
@ -0,0 +1,33 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2020 Google LLC
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module "test" {
|
||||||
|
source = "../../../../modules/compute-mig"
|
||||||
|
project_id = "my-project"
|
||||||
|
location = "europe-west1"
|
||||||
|
name = "test-mig"
|
||||||
|
target_size = 2
|
||||||
|
default_version = {
|
||||||
|
instance_template = "foo-template"
|
||||||
|
name = "foo"
|
||||||
|
}
|
||||||
|
autoscaler_config = var.autoscaler_config
|
||||||
|
health_check_config = var.health_check_config
|
||||||
|
named_ports = var.named_ports
|
||||||
|
regional = var.regional
|
||||||
|
update_policy = var.update_policy
|
||||||
|
versions = var.versions
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2020 Google LLC
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
variable "autoscaler_config" {
|
||||||
|
type = object({
|
||||||
|
max_replicas = number
|
||||||
|
min_replicas = number
|
||||||
|
cooldown_period = number
|
||||||
|
cpu_utilization_target = number
|
||||||
|
load_balancing_utilization_target = number
|
||||||
|
metric = object({
|
||||||
|
name = string
|
||||||
|
single_instance_assignment = number
|
||||||
|
target = number
|
||||||
|
type = string # GAUGE, DELTA_PER_SECOND, DELTA_PER_MINUTE
|
||||||
|
filter = string
|
||||||
|
})
|
||||||
|
})
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "auto_healing_policies" {
|
||||||
|
type = object({
|
||||||
|
health_check = string
|
||||||
|
initial_delay_sec = number
|
||||||
|
})
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "health_check_config" {
|
||||||
|
type = object({
|
||||||
|
type = string # http https tcp ssl http2
|
||||||
|
check = map(any) # actual health check block attributes
|
||||||
|
config = map(number) # interval, thresholds, timeout
|
||||||
|
logging = bool
|
||||||
|
})
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "named_ports" {
|
||||||
|
type = map(number)
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "regional" {
|
||||||
|
type = bool
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "update_policy" {
|
||||||
|
type = object({
|
||||||
|
type = string # OPPORTUNISTIC | PROACTIVE
|
||||||
|
minimal_action = string # REPLACE | RESTART
|
||||||
|
min_ready_sec = number
|
||||||
|
max_surge_type = string # fixed | percent
|
||||||
|
max_surge = number
|
||||||
|
max_unavailable_type = string
|
||||||
|
max_unavailable = number
|
||||||
|
})
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "versions" {
|
||||||
|
type = map(object({
|
||||||
|
instance_template = string
|
||||||
|
target_type = string # fixed | percent
|
||||||
|
target_size = number
|
||||||
|
}))
|
||||||
|
default = null
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
# Copyright 2020 Google LLC
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture')
|
||||||
|
|
||||||
|
|
||||||
|
def test_defaults(plan_runner):
|
||||||
|
"Test variable defaults."
|
||||||
|
_, resources = plan_runner(FIXTURES_DIR)
|
||||||
|
assert len(resources) == 1
|
||||||
|
mig = resources[0]
|
||||||
|
assert mig['type'] == 'google_compute_instance_group_manager'
|
||||||
|
assert mig['values']['target_size'] == 2
|
||||||
|
assert mig['values']['zone']
|
||||||
|
_, resources = plan_runner(FIXTURES_DIR, regional='true')
|
||||||
|
assert len(resources) == 1
|
||||||
|
mig = resources[0]
|
||||||
|
assert mig['type'] == 'google_compute_region_instance_group_manager'
|
||||||
|
assert mig['values']['target_size'] == 2
|
||||||
|
assert mig['values']['region']
|
||||||
|
|
||||||
|
|
||||||
|
def test_health_check(plan_runner):
|
||||||
|
"Test health check resource."
|
||||||
|
health_check_config = '{type="tcp", check={port=80}, config=null, logging=false}'
|
||||||
|
_, resources = plan_runner(
|
||||||
|
FIXTURES_DIR, health_check_config=health_check_config)
|
||||||
|
assert len(resources) == 2
|
||||||
|
assert any(r['type'] == 'google_compute_health_check' for r in resources)
|
||||||
|
|
||||||
|
|
||||||
|
def test_autoscaler(plan_runner):
|
||||||
|
"Test autoscaler resource."
|
||||||
|
autoscaler_config = (
|
||||||
|
'{'
|
||||||
|
'max_replicas=3, min_replicas=1, cooldown_period=60,'
|
||||||
|
'cpu_utilization_target=65, load_balancing_utilization_target=null,'
|
||||||
|
'metric=null'
|
||||||
|
'}'
|
||||||
|
)
|
||||||
|
_, resources = plan_runner(FIXTURES_DIR, autoscaler_config=autoscaler_config)
|
||||||
|
assert len(resources) == 2
|
||||||
|
autoscaler = resources[0]
|
||||||
|
assert autoscaler['type'] == 'google_compute_autoscaler'
|
||||||
|
assert autoscaler['values']['autoscaling_policy'] == [{
|
||||||
|
'cooldown_period': 60,
|
||||||
|
'cpu_utilization': [{'target': 65}],
|
||||||
|
'load_balancing_utilization': [],
|
||||||
|
'max_replicas': 3,
|
||||||
|
'metric': [],
|
||||||
|
'min_replicas': 1
|
||||||
|
}]
|
||||||
|
_, resources = plan_runner(
|
||||||
|
FIXTURES_DIR, autoscaler_config=autoscaler_config, regional='true')
|
||||||
|
assert len(resources) == 2
|
||||||
|
autoscaler = resources[0]
|
||||||
|
assert autoscaler['type'] == 'google_compute_region_autoscaler'
|
Loading…
Reference in New Issue