From 083ac06cfbf027ef9a8ad5495057d3c7a754fb30 Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Wed, 27 Oct 2021 15:32:02 +0000 Subject: [PATCH] fixed permadiff when subnet is optioanl (#5369) Signed-off-by: Modular Magician --- .changelog/5369.txt | 3 ++ google-beta/common_diff_suppress.go | 10 ++++ ...resource_compute_network_endpoint_group.go | 2 +- ...rce_compute_network_endpoint_group_test.go | 48 +++++++++++++++++++ ...esource_gke_hub_feature_membership_test.go | 2 +- 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 .changelog/5369.txt create mode 100644 google-beta/resource_compute_network_endpoint_group_test.go diff --git a/.changelog/5369.txt b/.changelog/5369.txt new file mode 100644 index 0000000000..da439baf3f --- /dev/null +++ b/.changelog/5369.txt @@ -0,0 +1,3 @@ +```release-note:bug +compute: fixed a permadiff on `subnetwork` when it is optional on `google_compute_network_endpoint_group` +``` diff --git a/google-beta/common_diff_suppress.go b/google-beta/common_diff_suppress.go index 67bbba9323..7a896ecb47 100644 --- a/google-beta/common_diff_suppress.go +++ b/google-beta/common_diff_suppress.go @@ -200,3 +200,13 @@ func compareIpAddressOrSelfLinkOrResourceName(_, old, new string, _ *schema.Reso func alwaysDiffSuppress(_, _, _ string, _ *schema.ResourceData) bool { return true } + +// Use this method when subnet is optioanl and auto_create_subnetworks = true +// API sometimes choose a subnet so the diff needs to be ignored +func compareOptionalSubnet(_, old, new string, _ *schema.ResourceData) bool { + if isEmptyValue(reflect.ValueOf(new)) { + return true + } + // otherwise compare as self links + return compareSelfLinkOrResourceName("", old, new, nil) +} diff --git a/google-beta/resource_compute_network_endpoint_group.go b/google-beta/resource_compute_network_endpoint_group.go index 4e77b89693..57648e8505 100644 --- a/google-beta/resource_compute_network_endpoint_group.go +++ b/google-beta/resource_compute_network_endpoint_group.go @@ -88,7 +88,7 @@ you create the resource.`, Type: schema.TypeString, Optional: true, ForceNew: true, - DiffSuppressFunc: compareSelfLinkOrResourceName, + DiffSuppressFunc: compareOptionalSubnet, Description: `Optional subnetwork to which all network endpoints in the NEG belong.`, }, "zone": { diff --git a/google-beta/resource_compute_network_endpoint_group_test.go b/google-beta/resource_compute_network_endpoint_group_test.go new file mode 100644 index 0000000000..6e1510bcdf --- /dev/null +++ b/google-beta/resource_compute_network_endpoint_group_test.go @@ -0,0 +1,48 @@ +package google + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccComputeNetworkEndpointGroup_networkEndpointGroup(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckComputeNetworkEndpointGroupDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccComputeNetworkEndpointGroup_networkEndpointGroup(context), + }, + { + ResourceName: "google_compute_network_endpoint_group.neg", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"network", "subnetwork", "zone"}, + }, + }, + }) +} + +func testAccComputeNetworkEndpointGroup_networkEndpointGroup(context map[string]interface{}) string { + return Nprintf(` +resource "google_compute_network_endpoint_group" "neg" { + name = "tf-test-my-lb-neg%{random_suffix}" + network = google_compute_network.default.id + default_port = "90" + zone = "us-central1-a" +} + +resource "google_compute_network" "default" { + name = "tf-test-neg-network%{random_suffix}" + auto_create_subnetworks = true +} +`, context) +} diff --git a/google-beta/resource_gke_hub_feature_membership_test.go b/google-beta/resource_gke_hub_feature_membership_test.go index 32fa84c196..9e1f2ea64d 100644 --- a/google-beta/resource_gke_hub_feature_membership_test.go +++ b/google-beta/resource_gke_hub_feature_membership_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - dcl "github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl" + "github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl" gkehub "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/gkehub/beta" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"