From 16d7a50c9c426e2609899437b4cc331bf106bc85 Mon Sep 17 00:00:00 2001 From: The Magician Date: Wed, 19 Aug 2020 10:14:37 -0700 Subject: [PATCH] Fix grpc healthcheck behaviour. (#3883) (#7061) Signed-off-by: Modular Magician --- .changelog/3883.txt | 3 +++ google/resource_compute_health_check.go | 15 +++++++++++++++ google/resource_compute_health_check_test.go | 2 +- google/resource_compute_region_health_check.go | 15 +++++++++++++++ .../resource_compute_region_health_check_test.go | 2 +- 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 .changelog/3883.txt diff --git a/.changelog/3883.txt b/.changelog/3883.txt new file mode 100644 index 00000000000..0bbec1f1904 --- /dev/null +++ b/.changelog/3883.txt @@ -0,0 +1,3 @@ +```release-note:none +bug fix for an unreleased field +``` diff --git a/google/resource_compute_health_check.go b/google/resource_compute_health_check.go index 1ae337e05fc..600d408468d 100644 --- a/google/resource_compute_health_check.go +++ b/google/resource_compute_health_check.go @@ -2018,5 +2018,20 @@ func resourceComputeHealthCheckEncoder(d *schema.ResourceData, meta interface{}, return obj, nil } + if _, ok := d.GetOk("grpc_health_check"); ok { + hc := d.Get("grpc_health_check").([]interface{})[0] + ps := hc.(map[string]interface{})["port_specification"] + pn := hc.(map[string]interface{})["port_name"] + + if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { + m := obj["grpcHealthCheck"].(map[string]interface{}) + if m["port"] == nil { + return nil, fmt.Errorf("error in HealthCheck %s: `port` must be set for GRPC health checks`.", d.Get("name").(string)) + } + } + obj["type"] = "GRPC" + return obj, nil + } + return nil, fmt.Errorf("error in HealthCheck %s: No health check block specified.", d.Get("name").(string)) } diff --git a/google/resource_compute_health_check_test.go b/google/resource_compute_health_check_test.go index 383b86e783f..84694f93eba 100644 --- a/google/resource_compute_health_check_test.go +++ b/google/resource_compute_health_check_test.go @@ -149,7 +149,7 @@ func TestAccComputeHealthCheck_tcpAndSsl_shouldFail(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccComputeHealthCheck_tcpAndSsl_shouldFail(hckName), - ExpectError: regexp.MustCompile("only one of `http2_health_check,http_health_check,https_health_check,ssl_health_check,tcp_health_check` can be specified"), + ExpectError: regexp.MustCompile("only one of `grpc_health_check,http2_health_check,http_health_check,https_health_check,ssl_health_check,tcp_health_check` can be specified"), }, }, }) diff --git a/google/resource_compute_region_health_check.go b/google/resource_compute_region_health_check.go index 66cecffcae0..b4e673b2f5f 100644 --- a/google/resource_compute_region_health_check.go +++ b/google/resource_compute_region_health_check.go @@ -1974,5 +1974,20 @@ func resourceComputeRegionHealthCheckEncoder(d *schema.ResourceData, meta interf return obj, nil } + if _, ok := d.GetOk("grpc_health_check"); ok { + hc := d.Get("grpc_health_check").([]interface{})[0] + ps := hc.(map[string]interface{})["port_specification"] + pn := hc.(map[string]interface{})["port_name"] + + if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { + m := obj["grpcHealthCheck"].(map[string]interface{}) + if m["port"] == nil { + return nil, fmt.Errorf("error in HealthCheck %s: `port` must be set for GRPC health checks`.", d.Get("name").(string)) + } + } + obj["type"] = "GRPC" + return obj, nil + } + return nil, fmt.Errorf("error in HealthCheck %s: No health check block specified.", d.Get("name").(string)) } diff --git a/google/resource_compute_region_health_check_test.go b/google/resource_compute_region_health_check_test.go index 2a56a69dcc9..53192016111 100644 --- a/google/resource_compute_region_health_check_test.go +++ b/google/resource_compute_region_health_check_test.go @@ -154,7 +154,7 @@ func TestAccComputeRegionHealthCheck_tcpAndSsl_shouldFail(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccComputeRegionHealthCheck_tcpAndSsl_shouldFail(hckName), - ExpectError: regexp.MustCompile("only one of `http2_health_check,http_health_check,https_health_check,ssl_health_check,tcp_health_check` can be specified"), + ExpectError: regexp.MustCompile("only one of `grpc_health_check,http2_health_check,http_health_check,https_health_check,ssl_health_check,tcp_health_check` can be specified"), }, }, })