Skip to content

Commit 1b7ec1b

Browse files
Fixed TestAccNetworkServicesGateway_update (#12749) (#9056)
[upstream:c5cd53864b3d5f8dbf18a03bc7066993e3276aa8] Signed-off-by: Modular Magician <[email protected]>
1 parent 3492116 commit 1b7ec1b

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

Diff for: .changelog/12749.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
```release-note:enhancement
2+
networkservices: added in-place update support for `ports` field on `google_network_services_gateway` resource
3+
```
4+
```release-note:bug
5+
networkservices: fixed bug where `google_network_services_gateway` could not be updated in place
6+
```

Diff for: google-beta/services/networkservices/resource_network_services_gateway.go

+26-6
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ func ResourceNetworkServicesGateway() *schema.Resource {
185185
"ports": {
186186
Type: schema.TypeList,
187187
Required: true,
188-
ForceNew: true,
189188
Description: `One or more port numbers (1-65535), on which the Gateway will receive traffic.
190189
The proxy binds to the specified ports. Gateways of type 'SECURE_WEB_GATEWAY' are
191190
limited to 1 port. Gateways of type 'OPEN_MESH' listen on 0.0.0.0 and support multiple ports.`,
@@ -594,6 +593,12 @@ func resourceNetworkServicesGatewayUpdate(d *schema.ResourceData, meta interface
594593
} else if v, ok := d.GetOkExists("description"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, descriptionProp)) {
595594
obj["description"] = descriptionProp
596595
}
596+
portsProp, err := expandNetworkServicesGatewayPorts(d.Get("ports"), d, config)
597+
if err != nil {
598+
return err
599+
} else if v, ok := d.GetOkExists("ports"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, portsProp)) {
600+
obj["ports"] = portsProp
601+
}
597602
serverTlsPolicyProp, err := expandNetworkServicesGatewayServerTlsPolicy(d.Get("server_tls_policy"), d, config)
598603
if err != nil {
599604
return err
@@ -625,6 +630,11 @@ func resourceNetworkServicesGatewayUpdate(d *schema.ResourceData, meta interface
625630
obj["labels"] = labelsProp
626631
}
627632

633+
obj, err = resourceNetworkServicesGatewayUpdateEncoder(d, meta, obj)
634+
if err != nil {
635+
return err
636+
}
637+
628638
url, err := tpgresource.ReplaceVars(d, config, "{{NetworkServicesBasePath}}projects/{{project}}/locations/{{location}}/gateways/{{name}}")
629639
if err != nil {
630640
return err
@@ -638,6 +648,10 @@ func resourceNetworkServicesGatewayUpdate(d *schema.ResourceData, meta interface
638648
updateMask = append(updateMask, "description")
639649
}
640650

651+
if d.HasChange("ports") {
652+
updateMask = append(updateMask, "ports")
653+
}
654+
641655
if d.HasChange("server_tls_policy") {
642656
updateMask = append(updateMask, "serverTlsPolicy")
643657
}
@@ -663,11 +677,6 @@ func resourceNetworkServicesGatewayUpdate(d *schema.ResourceData, meta interface
663677
if err != nil {
664678
return err
665679
}
666-
if d.Get("type") == "SECURE_WEB_GATEWAY" {
667-
obj["name"] = d.Get("name")
668-
obj["type"] = d.Get("type")
669-
obj["routingMode"] = d.Get("routingMode")
670-
}
671680

672681
// err == nil indicates that the billing_project value was found
673682
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
@@ -945,3 +954,14 @@ func expandNetworkServicesGatewayEffectiveLabels(v interface{}, d tpgresource.Te
945954
}
946955
return m, nil
947956
}
957+
958+
func resourceNetworkServicesGatewayUpdateEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
959+
// Always force-send some attributes even if they were not modified. This works around extra API-side requirements.
960+
obj["scope"] = d.Get("scope")
961+
if d.Get("type") == "SECURE_WEB_GATEWAY" {
962+
obj["name"] = d.Get("name")
963+
obj["type"] = d.Get("type")
964+
obj["routingMode"] = d.Get("routingMode")
965+
}
966+
return obj, nil
967+
}

Diff for: google-beta/services/networkservices/resource_network_services_gateway_test.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
1010

1111
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
1213
)
1314

1415
func TestAccNetworkServicesGateway_update(t *testing.T) {
@@ -32,6 +33,11 @@ func TestAccNetworkServicesGateway_update(t *testing.T) {
3233
},
3334
{
3435
Config: testAccNetworkServicesGateway_update(gatewayName),
36+
ConfigPlanChecks: resource.ConfigPlanChecks{
37+
PreApply: []plancheck.PlanCheck{
38+
plancheck.ExpectResourceAction("google_network_services_gateway.foobar", plancheck.ResourceActionUpdate),
39+
},
40+
},
3541
},
3642
{
3743
ResourceName: "google_network_services_gateway.foobar",
@@ -61,7 +67,7 @@ resource "google_network_services_gateway" "foobar" {
6167
name = "%s"
6268
scope = "default-scope-update"
6369
type = "OPEN_MESH"
64-
ports = [443]
70+
ports = [1000]
6571
description = "update description"
6672
labels = {
6773
foo = "bar"

0 commit comments

Comments
 (0)