From 0291ef90e3a02c7aa2418ee2744912cdc7eee707 Mon Sep 17 00:00:00 2001 From: The Magician Date: Wed, 19 Jun 2024 03:01:21 -0700 Subject: [PATCH] Enabling empty value send for fleet default member config in google_gke_hub_feature (#10963) (#18487) [upstream:89adfa77d478f937fce6c3121fd7e1414f6e0856] Signed-off-by: Modular Magician --- .changelog/10963.txt | 3 ++ .../gkehub2/resource_gke_hub_feature.go | 4 +- .../gkehub2/resource_gke_hub_feature_test.go | 43 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 .changelog/10963.txt diff --git a/.changelog/10963.txt b/.changelog/10963.txt new file mode 100644 index 00000000000..bf7c2b367be --- /dev/null +++ b/.changelog/10963.txt @@ -0,0 +1,3 @@ +```release-note:bug +gkehub: allowed `google_gke_hub_feature` field to send empty values for its field `fleet_default_member_config` +``` \ No newline at end of file diff --git a/google/services/gkehub2/resource_gke_hub_feature.go b/google/services/gkehub2/resource_gke_hub_feature.go index 17a328df4b1..626b5e1c1ca 100644 --- a/google/services/gkehub2/resource_gke_hub_feature.go +++ b/google/services/gkehub2/resource_gke_hub_feature.go @@ -733,7 +733,7 @@ func resourceGKEHub2FeatureCreate(d *schema.ResourceData, meta interface{}) erro fleetDefaultMemberConfigProp, err := expandGKEHub2FeatureFleetDefaultMemberConfig(d.Get("fleet_default_member_config"), d, config) if err != nil { return err - } else if v, ok := d.GetOkExists("fleet_default_member_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(fleetDefaultMemberConfigProp)) && (ok || !reflect.DeepEqual(v, fleetDefaultMemberConfigProp)) { + } else if v, ok := d.GetOkExists("fleet_default_member_config"); ok || !reflect.DeepEqual(v, fleetDefaultMemberConfigProp) { obj["fleetDefaultMemberConfig"] = fleetDefaultMemberConfigProp } labelsProp, err := expandGKEHub2FeatureEffectiveLabels(d.Get("effective_labels"), d, config) @@ -910,7 +910,7 @@ func resourceGKEHub2FeatureUpdate(d *schema.ResourceData, meta interface{}) erro fleetDefaultMemberConfigProp, err := expandGKEHub2FeatureFleetDefaultMemberConfig(d.Get("fleet_default_member_config"), d, config) if err != nil { return err - } else if v, ok := d.GetOkExists("fleet_default_member_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, fleetDefaultMemberConfigProp)) { + } else if v, ok := d.GetOkExists("fleet_default_member_config"); ok || !reflect.DeepEqual(v, fleetDefaultMemberConfigProp) { obj["fleetDefaultMemberConfig"] = fleetDefaultMemberConfigProp } labelsProp, err := expandGKEHub2FeatureEffectiveLabels(d.Get("effective_labels"), d, config) diff --git a/google/services/gkehub2/resource_gke_hub_feature_test.go b/google/services/gkehub2/resource_gke_hub_feature_test.go index 800a2f52225..108dc990011 100644 --- a/google/services/gkehub2/resource_gke_hub_feature_test.go +++ b/google/services/gkehub2/resource_gke_hub_feature_test.go @@ -322,6 +322,22 @@ func TestAccGKEHubFeature_FleetDefaultMemberConfigServiceMesh(t *testing.T) { ImportState: true, ImportStateVerify: true, }, + { + Config: testAccGKEHubFeature_FleetDefaultMemberConfigServiceMeshRemovalUpdate(context), + }, + { + ResourceName: "google_gke_hub_feature.feature", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccGKEHubFeature_FleetDefaultMemberConfigServiceMeshReAddUpdate(context), + }, + { + ResourceName: "google_gke_hub_feature.feature", + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -358,6 +374,33 @@ resource "google_gke_hub_feature" "feature" { `, context) } +func testAccGKEHubFeature_FleetDefaultMemberConfigServiceMeshRemovalUpdate(context map[string]interface{}) string { + return gkeHubFeatureProjectSetupForGA(context) + acctest.Nprintf(` +resource "google_gke_hub_feature" "feature" { + name = "servicemesh" + location = "global" + depends_on = [google_project_service.anthos, google_project_service.gkehub, google_project_service.mesh] + project = google_project.project.project_id +} +`, context) +} + +func testAccGKEHubFeature_FleetDefaultMemberConfigServiceMeshReAddUpdate(context map[string]interface{}) string { + return gkeHubFeatureProjectSetupForGA(context) + acctest.Nprintf(` +resource "google_gke_hub_feature" "feature" { + name = "servicemesh" + location = "global" + fleet_default_member_config { + mesh { + management = "MANAGEMENT_MANUAL" + } + } + depends_on = [google_project_service.anthos, google_project_service.gkehub, google_project_service.mesh] + project = google_project.project.project_id +} +`, context) +} + func TestAccGKEHubFeature_FleetDefaultMemberConfigConfigManagement(t *testing.T) { // VCR fails to handle batched project services acctest.SkipIfVcr(t)