Fix update when changing health check type (#944)

This commit is contained in:
Vincent Roseberry 2018-01-12 10:04:37 -08:00 committed by GitHub
parent a3e2c3ea05
commit 3d178f5633
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 0 deletions

View File

@ -322,6 +322,9 @@ func resourceComputeHealthCheckUpdate(d *schema.ResourceData, meta interface{})
hchk := &compute.HealthCheck{ hchk := &compute.HealthCheck{
Name: d.Get("name").(string), Name: d.Get("name").(string),
} }
nullFields := make([]string, 0, 3)
// Optional things // Optional things
if v, ok := d.GetOk("description"); ok { if v, ok := d.GetOk("description"); ok {
hchk.Description = v.(string) hchk.Description = v.(string)
@ -355,6 +358,8 @@ func resourceComputeHealthCheckUpdate(d *schema.ResourceData, meta interface{})
tcpHealthCheck.Response = val.(string) tcpHealthCheck.Response = val.(string)
} }
hchk.TcpHealthCheck = tcpHealthCheck hchk.TcpHealthCheck = tcpHealthCheck
} else {
nullFields = append(nullFields, "TcpHealthCheck")
} }
if v, ok := d.GetOk("ssl_health_check"); ok { if v, ok := d.GetOk("ssl_health_check"); ok {
hchk.Type = "SSL" hchk.Type = "SSL"
@ -373,6 +378,8 @@ func resourceComputeHealthCheckUpdate(d *schema.ResourceData, meta interface{})
sslHealthCheck.Response = val.(string) sslHealthCheck.Response = val.(string)
} }
hchk.SslHealthCheck = sslHealthCheck hchk.SslHealthCheck = sslHealthCheck
} else {
nullFields = append(nullFields, "SslHealthCheck")
} }
if v, ok := d.GetOk("http_health_check"); ok { if v, ok := d.GetOk("http_health_check"); ok {
hchk.Type = "HTTP" hchk.Type = "HTTP"
@ -391,6 +398,8 @@ func resourceComputeHealthCheckUpdate(d *schema.ResourceData, meta interface{})
httpHealthCheck.RequestPath = val.(string) httpHealthCheck.RequestPath = val.(string)
} }
hchk.HttpHealthCheck = httpHealthCheck hchk.HttpHealthCheck = httpHealthCheck
} else {
nullFields = append(nullFields, "HttpHealthCheck")
} }
if v, ok := d.GetOk("https_health_check"); ok { if v, ok := d.GetOk("https_health_check"); ok {
@ -410,8 +419,12 @@ func resourceComputeHealthCheckUpdate(d *schema.ResourceData, meta interface{})
httpsHealthCheck.RequestPath = val.(string) httpsHealthCheck.RequestPath = val.(string)
} }
hchk.HttpsHealthCheck = httpsHealthCheck hchk.HttpsHealthCheck = httpsHealthCheck
} else {
nullFields = append(nullFields, "HttpsHealthCheck")
} }
hchk.NullFields = nullFields
log.Printf("[DEBUG] HealthCheck patch request: %#v", hchk) log.Printf("[DEBUG] HealthCheck patch request: %#v", hchk)
op, err := config.clientCompute.HealthChecks.Patch( op, err := config.clientCompute.HealthChecks.Patch(
project, hchk.Name, hchk).Do() project, hchk.Name, hchk).Do()

View File

@ -168,6 +168,35 @@ func TestAccComputeHealthCheck_https(t *testing.T) {
}) })
} }
func TestAccComputeHealthCheck_typeTransition(t *testing.T) {
t.Parallel()
hckName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeHealthCheckDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeHealthCheck_https(hckName),
},
resource.TestStep{
Config: testAccComputeHealthCheck_http(hckName),
},
resource.TestStep{
Config: testAccComputeHealthCheck_ssl(hckName),
},
resource.TestStep{
Config: testAccComputeHealthCheck_tcp(hckName),
},
resource.TestStep{
Config: testAccComputeHealthCheck_https(hckName),
},
},
})
}
func TestAccComputeHealthCheck_tcpAndSsl_shouldFail(t *testing.T) { func TestAccComputeHealthCheck_tcpAndSsl_shouldFail(t *testing.T) {
t.Parallel() t.Parallel()