Skip to content

Commit 77b6058

Browse files
Bug fix for edgecontaienr update method and remove machine filter in test (#9412) (#16490)
* 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 <[email protected]>
1 parent 4f15a97 commit 77b6058

File tree

4 files changed

+119
-58
lines changed

4 files changed

+119
-58
lines changed

.changelog/9412.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
Bug fix for edgecontaienr update method and remove machine filter in test
3+
```

google/services/edgecontainer/resource_edgecontainer_cluster.go

+66-31
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"log"
2323
"reflect"
24+
"strings"
2425
"time"
2526

2627
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
@@ -850,24 +851,12 @@ func resourceEdgecontainerClusterUpdate(d *schema.ResourceData, meta interface{}
850851
billingProject = project
851852

852853
obj := make(map[string]interface{})
853-
fleetProp, err := expandEdgecontainerClusterFleet(d.Get("fleet"), d, config)
854-
if err != nil {
855-
return err
856-
} else if v, ok := d.GetOkExists("fleet"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, fleetProp)) {
857-
obj["fleet"] = fleetProp
858-
}
859854
networkingProp, err := expandEdgecontainerClusterNetworking(d.Get("networking"), d, config)
860855
if err != nil {
861856
return err
862857
} else if v, ok := d.GetOkExists("networking"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, networkingProp)) {
863858
obj["networking"] = networkingProp
864859
}
865-
authorizationProp, err := expandEdgecontainerClusterAuthorization(d.Get("authorization"), d, config)
866-
if err != nil {
867-
return err
868-
} else if v, ok := d.GetOkExists("authorization"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, authorizationProp)) {
869-
obj["authorization"] = authorizationProp
870-
}
871860
defaultMaxPodsPerNodeProp, err := expandEdgecontainerClusterDefaultMaxPodsPerNode(d.Get("default_max_pods_per_node"), d, config)
872861
if err != nil {
873862
return err
@@ -923,35 +912,81 @@ func resourceEdgecontainerClusterUpdate(d *schema.ResourceData, meta interface{}
923912
}
924913

925914
log.Printf("[DEBUG] Updating Cluster %q: %#v", d.Id(), obj)
915+
updateMask := []string{}
926916

927-
// err == nil indicates that the billing_project value was found
928-
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
929-
billingProject = bp
917+
if d.HasChange("networking") {
918+
updateMask = append(updateMask, "networking")
930919
}
931920

932-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
933-
Config: config,
934-
Method: "PUT",
935-
Project: billingProject,
936-
RawURL: url,
937-
UserAgent: userAgent,
938-
Body: obj,
939-
Timeout: d.Timeout(schema.TimeoutUpdate),
940-
})
921+
if d.HasChange("default_max_pods_per_node") {
922+
updateMask = append(updateMask, "defaultMaxPodsPerNode")
923+
}
941924

942-
if err != nil {
943-
return fmt.Errorf("Error updating Cluster %q: %s", d.Id(), err)
944-
} else {
945-
log.Printf("[DEBUG] Finished updating Cluster %q: %#v", d.Id(), res)
925+
if d.HasChange("maintenance_policy") {
926+
updateMask = append(updateMask, "maintenancePolicy")
946927
}
947928

948-
err = EdgecontainerOperationWaitTime(
949-
config, res, project, "Updating Cluster", userAgent,
950-
d.Timeout(schema.TimeoutUpdate))
929+
if d.HasChange("control_plane") {
930+
updateMask = append(updateMask, "controlPlane")
931+
}
932+
933+
if d.HasChange("system_addons_config") {
934+
updateMask = append(updateMask, "systemAddonsConfig")
935+
}
936+
937+
if d.HasChange("external_load_balancer_ipv4_address_pools") {
938+
updateMask = append(updateMask, "externalLoadBalancerIpv4AddressPools")
939+
}
940+
941+
if d.HasChange("control_plane_encryption") {
942+
updateMask = append(updateMask, "controlPlaneEncryption")
943+
}
944+
945+
if d.HasChange("release_channel") {
946+
updateMask = append(updateMask, "releaseChannel")
947+
}
951948

949+
if d.HasChange("effective_labels") {
950+
updateMask = append(updateMask, "labels")
951+
}
952+
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
953+
// won't set it
954+
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
952955
if err != nil {
953956
return err
954957
}
958+
959+
// err == nil indicates that the billing_project value was found
960+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
961+
billingProject = bp
962+
}
963+
964+
// if updateMask is empty we are not updating anything so skip the post
965+
if len(updateMask) > 0 {
966+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
967+
Config: config,
968+
Method: "PATCH",
969+
Project: billingProject,
970+
RawURL: url,
971+
UserAgent: userAgent,
972+
Body: obj,
973+
Timeout: d.Timeout(schema.TimeoutUpdate),
974+
})
975+
976+
if err != nil {
977+
return fmt.Errorf("Error updating Cluster %q: %s", d.Id(), err)
978+
} else {
979+
log.Printf("[DEBUG] Finished updating Cluster %q: %#v", d.Id(), res)
980+
}
981+
982+
err = EdgecontainerOperationWaitTime(
983+
config, res, project, "Updating Cluster", userAgent,
984+
d.Timeout(schema.TimeoutUpdate))
985+
986+
if err != nil {
987+
return err
988+
}
989+
}
955990
d.Partial(true)
956991

957992
if d.HasChange("target_version") {

google/services/edgecontainer/resource_edgecontainer_node_pool.go

+50-25
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"log"
2323
"reflect"
24+
"strings"
2425
"time"
2526

2627
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
@@ -376,12 +377,6 @@ func resourceEdgecontainerNodePoolUpdate(d *schema.ResourceData, meta interface{
376377
billingProject = project
377378

378379
obj := make(map[string]interface{})
379-
nodeLocationProp, err := expandEdgecontainerNodePoolNodeLocation(d.Get("node_location"), d, config)
380-
if err != nil {
381-
return err
382-
} else if v, ok := d.GetOkExists("node_location"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, nodeLocationProp)) {
383-
obj["nodeLocation"] = nodeLocationProp
384-
}
385380
nodeCountProp, err := expandEdgecontainerNodePoolNodeCount(d.Get("node_count"), d, config)
386381
if err != nil {
387382
return err
@@ -419,36 +414,66 @@ func resourceEdgecontainerNodePoolUpdate(d *schema.ResourceData, meta interface{
419414
}
420415

421416
log.Printf("[DEBUG] Updating NodePool %q: %#v", d.Id(), obj)
417+
updateMask := []string{}
422418

423-
// err == nil indicates that the billing_project value was found
424-
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
425-
billingProject = bp
419+
if d.HasChange("node_count") {
420+
updateMask = append(updateMask, "nodeCount")
426421
}
427422

428-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
429-
Config: config,
430-
Method: "PUT",
431-
Project: billingProject,
432-
RawURL: url,
433-
UserAgent: userAgent,
434-
Body: obj,
435-
Timeout: d.Timeout(schema.TimeoutUpdate),
436-
})
423+
if d.HasChange("machine_filter") {
424+
updateMask = append(updateMask, "machineFilter")
425+
}
437426

438-
if err != nil {
439-
return fmt.Errorf("Error updating NodePool %q: %s", d.Id(), err)
440-
} else {
441-
log.Printf("[DEBUG] Finished updating NodePool %q: %#v", d.Id(), res)
427+
if d.HasChange("local_disk_encryption") {
428+
updateMask = append(updateMask, "localDiskEncryption")
442429
}
443430

444-
err = EdgecontainerOperationWaitTime(
445-
config, res, project, "Updating NodePool", userAgent,
446-
d.Timeout(schema.TimeoutUpdate))
431+
if d.HasChange("node_config") {
432+
updateMask = append(updateMask, "nodeConfig")
433+
}
447434

435+
if d.HasChange("effective_labels") {
436+
updateMask = append(updateMask, "labels")
437+
}
438+
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
439+
// won't set it
440+
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
448441
if err != nil {
449442
return err
450443
}
451444

445+
// err == nil indicates that the billing_project value was found
446+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
447+
billingProject = bp
448+
}
449+
450+
// if updateMask is empty we are not updating anything so skip the post
451+
if len(updateMask) > 0 {
452+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
453+
Config: config,
454+
Method: "PATCH",
455+
Project: billingProject,
456+
RawURL: url,
457+
UserAgent: userAgent,
458+
Body: obj,
459+
Timeout: d.Timeout(schema.TimeoutUpdate),
460+
})
461+
462+
if err != nil {
463+
return fmt.Errorf("Error updating NodePool %q: %s", d.Id(), err)
464+
} else {
465+
log.Printf("[DEBUG] Finished updating NodePool %q: %#v", d.Id(), res)
466+
}
467+
468+
err = EdgecontainerOperationWaitTime(
469+
config, res, project, "Updating NodePool", userAgent,
470+
d.Timeout(schema.TimeoutUpdate))
471+
472+
if err != nil {
473+
return err
474+
}
475+
}
476+
452477
return resourceEdgecontainerNodePoolRead(d, meta)
453478
}
454479

google/services/edgecontainer/resource_edgecontainer_node_pool_generated_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ resource "google_edgecontainer_cluster" "cluster" {
8383
local {
8484
node_location = "us-central1-edge-den25349"
8585
node_count = 1
86-
machine_filter = "den25349-01"
8786
shared_deployment_policy = "ALLOWED"
8887
}
8988
}
@@ -94,7 +93,6 @@ resource "google_edgecontainer_node_pool" "default" {
9493
cluster = google_edgecontainer_cluster.cluster.name
9594
location = "us-central1"
9695
node_location = "us-central1-edge-den25349"
97-
machine_filter = "den25349-02"
9896
node_count = 1
9997
}
10098

0 commit comments

Comments
 (0)