diff --git a/.changelog/5047.txt b/.changelog/5047.txt new file mode 100644 index 00000000000..19166079ce4 --- /dev/null +++ b/.changelog/5047.txt @@ -0,0 +1,3 @@ +```release-note:bug +apigee: fixed update behavior on `google_apigee_envgroup` +``` diff --git a/google/resource_apigee_envgroup.go b/google/resource_apigee_envgroup.go index 8489aa11651..b2dca67827e 100644 --- a/google/resource_apigee_envgroup.go +++ b/google/resource_apigee_envgroup.go @@ -186,12 +186,6 @@ func resourceApigeeEnvgroupUpdate(d *schema.ResourceData, meta interface{}) erro billingProject := "" obj := make(map[string]interface{}) - nameProp, err := expandApigeeEnvgroupName(d.Get("name"), d, config) - if err != nil { - return err - } else if v, ok := d.GetOkExists("name"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, nameProp)) { - obj["name"] = nameProp - } hostnamesProp, err := expandApigeeEnvgroupHostnames(d.Get("hostnames"), d, config) if err != nil { return err @@ -205,13 +199,24 @@ func resourceApigeeEnvgroupUpdate(d *schema.ResourceData, meta interface{}) erro } log.Printf("[DEBUG] Updating Envgroup %q: %#v", d.Id(), obj) + updateMask := []string{} + + if d.HasChange("hostnames") { + updateMask = append(updateMask, "hostnames") + } + // updateMask is a URL parameter but not present in the schema, so replaceVars + // won't set it + url, err = addQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")}) + if err != nil { + return err + } // err == nil indicates that the billing_project value was found if bp, err := getBillingProject(d, config); err == nil { billingProject = bp } - res, err := sendRequestWithTimeout(config, "PUT", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutUpdate)) + res, err := sendRequestWithTimeout(config, "PATCH", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("Error updating Envgroup %q: %s", d.Id(), err)