From 61ae90dde072f138cfc9f89a5a6daa34cc7843c1 Mon Sep 17 00:00:00 2001 From: John Houston Date: Tue, 5 Sep 2023 15:36:06 -0400 Subject: [PATCH 1/3] fix perpetual diff when setting version to empty string --- helm/resource_release.go | 2 +- helm/resource_release_test.go | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/helm/resource_release.go b/helm/resource_release.go index 85db9a479..72c53aa43 100644 --- a/helm/resource_release.go +++ b/helm/resource_release.go @@ -850,7 +850,7 @@ func resourceDiff(ctx context.Context, d *schema.ResourceDiff, meta interface{}) old, new := d.GetChange("version") oldVersion := strings.TrimPrefix(old.(string), "v") newVersion := strings.TrimPrefix(new.(string), "v") - if oldVersion != newVersion { + if oldVersion != newVersion && newVersion != "" { d.SetNewComputed("metadata") } } diff --git a/helm/resource_release_test.go b/helm/resource_release_test.go index 322412cfe..5fedcb422 100644 --- a/helm/resource_release_test.go +++ b/helm/resource_release_test.go @@ -73,6 +73,37 @@ func TestAccResourceRelease_basic(t *testing.T) { }) } +// NOTE this is a regression test for: https://github.com/hashicorp/terraform-provider-helm/issues/1236 +func TestAccResourceRelease_emptyVersion(t *testing.T) { + name := randName("basic") + namespace := createRandomNamespace(t) + defer deleteNamespace(t, namespace) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ProviderFactories: map[string]func() (*schema.Provider, error){ + "helm": func() (*schema.Provider, error) { + return Provider(), nil + }, + }, + CheckDestroy: testAccCheckHelmReleaseDestroy(namespace), + Steps: []resource.TestStep{ + { + Config: testAccHelmReleaseConfigEmptyVersion(testResourceName, namespace, name), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("helm_release.test", "metadata.0.name", name), + resource.TestCheckResourceAttr("helm_release.test", "metadata.0.namespace", namespace), + resource.TestCheckResourceAttr("helm_release.test", "metadata.0.revision", "1"), + resource.TestCheckResourceAttr("helm_release.test", "status", release.StatusDeployed.String()), + resource.TestCheckResourceAttr("helm_release.test", "metadata.0.chart", "test-chart"), + resource.TestCheckResourceAttr("helm_release.test", "metadata.0.version", "2.0.0"), + resource.TestCheckResourceAttr("helm_release.test", "metadata.0.app_version", "1.19.5"), + ), + }, + }, + }) +} + func TestAccResourceRelease_import(t *testing.T) { name := randName("import") namespace := createRandomNamespace(t) @@ -875,6 +906,18 @@ func testAccHelmReleaseConfigBasic(resource, ns, name, version string) string { `, resource, name, ns, testRepositoryURL, version) } +func testAccHelmReleaseConfigEmptyVersion(resource, ns, name string) string { + return fmt.Sprintf(` + resource "helm_release" "%s" { + name = %q + namespace = %q + repository = %q + chart = "test-chart" + version = "" + } + `, resource, name, ns, testRepositoryURL) +} + func testAccHelmReleaseConfigValues(resource, ns, name, chart, version string, values []string) string { vals := make([]string, len(values)) for i, v := range values { From 696c8b68d23e3b07024fce811ac679d18383ed1d Mon Sep 17 00:00:00 2001 From: John Houston Date: Tue, 5 Sep 2023 15:47:38 -0400 Subject: [PATCH 2/3] add changelog entry --- .changelog/1246.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changelog/1246.txt diff --git a/.changelog/1246.txt b/.changelog/1246.txt new file mode 100644 index 000000000..b6dcc24eb --- /dev/null +++ b/.changelog/1246.txt @@ -0,0 +1,4 @@ +```release-note:bug +`helm_release`: Fix perpetual diff when version attribute is an empty string +``` + From e49631256a6b13ef09200cc56ad2b889bfd17174 Mon Sep 17 00:00:00 2001 From: John Houston Date: Wed, 6 Sep 2023 11:25:21 -0400 Subject: [PATCH 3/3] move resource name to variable --- helm/resource_release_test.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/helm/resource_release_test.go b/helm/resource_release_test.go index 5fedcb422..babad0c4b 100644 --- a/helm/resource_release_test.go +++ b/helm/resource_release_test.go @@ -79,6 +79,7 @@ func TestAccResourceRelease_emptyVersion(t *testing.T) { namespace := createRandomNamespace(t) defer deleteNamespace(t, namespace) + resourceName := "helm_release.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, ProviderFactories: map[string]func() (*schema.Provider, error){ @@ -91,13 +92,13 @@ func TestAccResourceRelease_emptyVersion(t *testing.T) { { Config: testAccHelmReleaseConfigEmptyVersion(testResourceName, namespace, name), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("helm_release.test", "metadata.0.name", name), - resource.TestCheckResourceAttr("helm_release.test", "metadata.0.namespace", namespace), - resource.TestCheckResourceAttr("helm_release.test", "metadata.0.revision", "1"), - resource.TestCheckResourceAttr("helm_release.test", "status", release.StatusDeployed.String()), - resource.TestCheckResourceAttr("helm_release.test", "metadata.0.chart", "test-chart"), - resource.TestCheckResourceAttr("helm_release.test", "metadata.0.version", "2.0.0"), - resource.TestCheckResourceAttr("helm_release.test", "metadata.0.app_version", "1.19.5"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), + resource.TestCheckResourceAttr(resourceName, "metadata.0.namespace", namespace), + resource.TestCheckResourceAttr(resourceName, "metadata.0.revision", "1"), + resource.TestCheckResourceAttr(resourceName, "status", release.StatusDeployed.String()), + resource.TestCheckResourceAttr(resourceName, "metadata.0.chart", "test-chart"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.version", "2.0.0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.app_version", "1.19.5"), ), }, },