From 20b71f4a7026aa9a0984ccdd5b5a315745a03238 Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Fri, 10 Nov 2023 00:07:46 +0000 Subject: [PATCH] Bug fix for edgecontaienr update method and remove machine filter in test (#9412) * Fix edgecontainer cluster upgrade endpoint the internal test * Bug fix for edgecontaienr update method and remove machine filter in test [upstream:5923d4cb878396a04bed9beaf22a8478e8b1e6a5] Signed-off-by: Modular Magician --- .changelog/9412.txt | 3 + .../resource_edgecontainer_cluster.go | 97 +++++++++++++------ .../resource_edgecontainer_node_pool.go | 75 +++++++++----- ..._edgecontainer_node_pool_generated_test.go | 2 - 4 files changed, 119 insertions(+), 58 deletions(-) create mode 100644 .changelog/9412.txt diff --git a/.changelog/9412.txt b/.changelog/9412.txt new file mode 100644 index 00000000000..2e003518124 --- /dev/null +++ b/.changelog/9412.txt @@ -0,0 +1,3 @@ +```release-note:bug +Bug fix for edgecontaienr update method and remove machine filter in test +``` diff --git a/google/services/edgecontainer/resource_edgecontainer_cluster.go b/google/services/edgecontainer/resource_edgecontainer_cluster.go index a5858bdcc7c..d758f35f60b 100644 --- a/google/services/edgecontainer/resource_edgecontainer_cluster.go +++ b/google/services/edgecontainer/resource_edgecontainer_cluster.go @@ -21,6 +21,7 @@ import ( "fmt" "log" "reflect" + "strings" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" @@ -850,24 +851,12 @@ func resourceEdgecontainerClusterUpdate(d *schema.ResourceData, meta interface{} billingProject = project obj := make(map[string]interface{}) - fleetProp, err := expandEdgecontainerClusterFleet(d.Get("fleet"), d, config) - if err != nil { - return err - } else if v, ok := d.GetOkExists("fleet"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, fleetProp)) { - obj["fleet"] = fleetProp - } networkingProp, err := expandEdgecontainerClusterNetworking(d.Get("networking"), d, config) if err != nil { return err } else if v, ok := d.GetOkExists("networking"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, networkingProp)) { obj["networking"] = networkingProp } - authorizationProp, err := expandEdgecontainerClusterAuthorization(d.Get("authorization"), d, config) - if err != nil { - return err - } else if v, ok := d.GetOkExists("authorization"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, authorizationProp)) { - obj["authorization"] = authorizationProp - } defaultMaxPodsPerNodeProp, err := expandEdgecontainerClusterDefaultMaxPodsPerNode(d.Get("default_max_pods_per_node"), d, config) if err != nil { return err @@ -923,35 +912,81 @@ func resourceEdgecontainerClusterUpdate(d *schema.ResourceData, meta interface{} } log.Printf("[DEBUG] Updating Cluster %q: %#v", d.Id(), obj) + updateMask := []string{} - // err == nil indicates that the billing_project value was found - if bp, err := tpgresource.GetBillingProject(d, config); err == nil { - billingProject = bp + if d.HasChange("networking") { + updateMask = append(updateMask, "networking") } - res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ - Config: config, - Method: "PUT", - Project: billingProject, - RawURL: url, - UserAgent: userAgent, - Body: obj, - Timeout: d.Timeout(schema.TimeoutUpdate), - }) + if d.HasChange("default_max_pods_per_node") { + updateMask = append(updateMask, "defaultMaxPodsPerNode") + } - if err != nil { - return fmt.Errorf("Error updating Cluster %q: %s", d.Id(), err) - } else { - log.Printf("[DEBUG] Finished updating Cluster %q: %#v", d.Id(), res) + if d.HasChange("maintenance_policy") { + updateMask = append(updateMask, "maintenancePolicy") } - err = EdgecontainerOperationWaitTime( - config, res, project, "Updating Cluster", userAgent, - d.Timeout(schema.TimeoutUpdate)) + if d.HasChange("control_plane") { + updateMask = append(updateMask, "controlPlane") + } + + if d.HasChange("system_addons_config") { + updateMask = append(updateMask, "systemAddonsConfig") + } + + if d.HasChange("external_load_balancer_ipv4_address_pools") { + updateMask = append(updateMask, "externalLoadBalancerIpv4AddressPools") + } + + if d.HasChange("control_plane_encryption") { + updateMask = append(updateMask, "controlPlaneEncryption") + } + + if d.HasChange("release_channel") { + updateMask = append(updateMask, "releaseChannel") + } + if d.HasChange("effective_labels") { + updateMask = append(updateMask, "labels") + } + // updateMask is a URL parameter but not present in the schema, so ReplaceVars + // won't set it + url, err = transport_tpg.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 := tpgresource.GetBillingProject(d, config); err == nil { + billingProject = bp + } + + // if updateMask is empty we are not updating anything so skip the post + if len(updateMask) > 0 { + res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "PATCH", + Project: billingProject, + RawURL: url, + UserAgent: userAgent, + Body: obj, + Timeout: d.Timeout(schema.TimeoutUpdate), + }) + + if err != nil { + return fmt.Errorf("Error updating Cluster %q: %s", d.Id(), err) + } else { + log.Printf("[DEBUG] Finished updating Cluster %q: %#v", d.Id(), res) + } + + err = EdgecontainerOperationWaitTime( + config, res, project, "Updating Cluster", userAgent, + d.Timeout(schema.TimeoutUpdate)) + + if err != nil { + return err + } + } d.Partial(true) if d.HasChange("target_version") { diff --git a/google/services/edgecontainer/resource_edgecontainer_node_pool.go b/google/services/edgecontainer/resource_edgecontainer_node_pool.go index 29a98a2ce52..2ab307ceeeb 100644 --- a/google/services/edgecontainer/resource_edgecontainer_node_pool.go +++ b/google/services/edgecontainer/resource_edgecontainer_node_pool.go @@ -21,6 +21,7 @@ import ( "fmt" "log" "reflect" + "strings" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" @@ -376,12 +377,6 @@ func resourceEdgecontainerNodePoolUpdate(d *schema.ResourceData, meta interface{ billingProject = project obj := make(map[string]interface{}) - nodeLocationProp, err := expandEdgecontainerNodePoolNodeLocation(d.Get("node_location"), d, config) - if err != nil { - return err - } else if v, ok := d.GetOkExists("node_location"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, nodeLocationProp)) { - obj["nodeLocation"] = nodeLocationProp - } nodeCountProp, err := expandEdgecontainerNodePoolNodeCount(d.Get("node_count"), d, config) if err != nil { return err @@ -419,36 +414,66 @@ func resourceEdgecontainerNodePoolUpdate(d *schema.ResourceData, meta interface{ } log.Printf("[DEBUG] Updating NodePool %q: %#v", d.Id(), obj) + updateMask := []string{} - // err == nil indicates that the billing_project value was found - if bp, err := tpgresource.GetBillingProject(d, config); err == nil { - billingProject = bp + if d.HasChange("node_count") { + updateMask = append(updateMask, "nodeCount") } - res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ - Config: config, - Method: "PUT", - Project: billingProject, - RawURL: url, - UserAgent: userAgent, - Body: obj, - Timeout: d.Timeout(schema.TimeoutUpdate), - }) + if d.HasChange("machine_filter") { + updateMask = append(updateMask, "machineFilter") + } - if err != nil { - return fmt.Errorf("Error updating NodePool %q: %s", d.Id(), err) - } else { - log.Printf("[DEBUG] Finished updating NodePool %q: %#v", d.Id(), res) + if d.HasChange("local_disk_encryption") { + updateMask = append(updateMask, "localDiskEncryption") } - err = EdgecontainerOperationWaitTime( - config, res, project, "Updating NodePool", userAgent, - d.Timeout(schema.TimeoutUpdate)) + if d.HasChange("node_config") { + updateMask = append(updateMask, "nodeConfig") + } + if d.HasChange("effective_labels") { + updateMask = append(updateMask, "labels") + } + // updateMask is a URL parameter but not present in the schema, so ReplaceVars + // won't set it + url, err = transport_tpg.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 := tpgresource.GetBillingProject(d, config); err == nil { + billingProject = bp + } + + // if updateMask is empty we are not updating anything so skip the post + if len(updateMask) > 0 { + res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "PATCH", + Project: billingProject, + RawURL: url, + UserAgent: userAgent, + Body: obj, + Timeout: d.Timeout(schema.TimeoutUpdate), + }) + + if err != nil { + return fmt.Errorf("Error updating NodePool %q: %s", d.Id(), err) + } else { + log.Printf("[DEBUG] Finished updating NodePool %q: %#v", d.Id(), res) + } + + err = EdgecontainerOperationWaitTime( + config, res, project, "Updating NodePool", userAgent, + d.Timeout(schema.TimeoutUpdate)) + + if err != nil { + return err + } + } + return resourceEdgecontainerNodePoolRead(d, meta) } diff --git a/google/services/edgecontainer/resource_edgecontainer_node_pool_generated_test.go b/google/services/edgecontainer/resource_edgecontainer_node_pool_generated_test.go index 2cee578cc4b..979343edbc7 100644 --- a/google/services/edgecontainer/resource_edgecontainer_node_pool_generated_test.go +++ b/google/services/edgecontainer/resource_edgecontainer_node_pool_generated_test.go @@ -83,7 +83,6 @@ resource "google_edgecontainer_cluster" "cluster" { local { node_location = "us-central1-edge-den25349" node_count = 1 - machine_filter = "den25349-01" shared_deployment_policy = "ALLOWED" } } @@ -94,7 +93,6 @@ resource "google_edgecontainer_node_pool" "default" { cluster = google_edgecontainer_cluster.cluster.name location = "us-central1" node_location = "us-central1-edge-den25349" - machine_filter = "den25349-02" node_count = 1 }