diff --git a/.changelog/1534.txt b/.changelog/1534.txt new file mode 100644 index 0000000000..9b295638d5 --- /dev/null +++ b/.changelog/1534.txt @@ -0,0 +1,3 @@ +```release-note:bug +`resoure/helm_release`: fix an issue where `postrender.args` is not parsed correctly. +``` diff --git a/helm/resource_release.go b/helm/resource_release.go index cba9319105..6d19c62ccc 100644 --- a/helm/resource_release.go +++ b/helm/resource_release.go @@ -665,7 +665,16 @@ func resourceReleaseCreate(ctx context.Context, d *schema.ResourceData, meta int upgradeClient.Description = d.Get("description").(string) if cmd := d.Get("postrender.0.binary_path").(string); cmd != "" { - pr, err := postrender.NewExec(cmd) + av := d.Get("postrender.0.args") + var args []string + for _, arg := range av.([]interface{}) { + if arg == nil { + continue + } + args = append(args, arg.(string)) + } + + pr, err := postrender.NewExec(cmd, args...) if err != nil { return diag.FromErr(err) } @@ -699,7 +708,16 @@ func resourceReleaseCreate(ctx context.Context, d *schema.ResourceData, meta int instClient.CreateNamespace = d.Get("create_namespace").(bool) if cmd := d.Get("postrender.0.binary_path").(string); cmd != "" { - pr, err := postrender.NewExec(cmd) + av := d.Get("postrender.0.args") + var args []string + for _, arg := range av.([]interface{}) { + if arg == nil { + continue + } + args = append(args, arg.(string)) + } + + pr, err := postrender.NewExec(cmd, args...) if err != nil { return diag.FromErr(err) } diff --git a/helm/resource_release_test.go b/helm/resource_release_test.go index 4187f3de0c..40db66c338 100644 --- a/helm/resource_release_test.go +++ b/helm/resource_release_test.go @@ -861,11 +861,11 @@ func TestAccResourceRelease_postrender(t *testing.T) { ), }, { - Config: testAccHelmReleaseConfigPostrender(testResourceName, namespace, testResourceName, "echo", "this will not work!", "Wrong", "Code"), + Config: testAccHelmReleaseConfigPostrender(testResourceName, namespace, testResourceName, "echo", "invalid arguments"), ExpectError: regexp.MustCompile("error validating data"), }, { - Config: testAccHelmReleaseConfigPostrender(testResourceName, namespace, testResourceName, "foobardoesnotexist"), + Config: testAccHelmReleaseConfigPostrender(testResourceName, namespace, testResourceName, "binNotFound", ""), ExpectError: regexp.MustCompile("unable to find binary"), }, { @@ -874,6 +874,12 @@ func TestAccResourceRelease_postrender(t *testing.T) { resource.TestCheckResourceAttr("helm_release.test", "status", release.StatusDeployed.String()), ), }, + { + Config: testAccHelmReleaseConfigPostrender(testResourceName, namespace, testResourceName, "testdata/postrender.sh", "this", "that"), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("helm_release.test", "status", release.StatusDeployed.String()), + ), + }, }, }) } @@ -1534,7 +1540,7 @@ func testAccHelmReleaseConfigPostrender(resource, ns, name, binaryPath string, a value = 1337 } } - `, resource, name, ns, testRepositoryURL, binaryPath, fmt.Sprintf(`["%s"]`, strings.Join(args, `","`))) + `, resource, name, ns, testRepositoryURL, binaryPath, fmt.Sprintf(`["%s"]`, strings.Join(args, `","`))) } func TestAccResourceRelease_LintFailValues(t *testing.T) { diff --git a/helm/testdata/postrender.sh b/helm/testdata/postrender.sh new file mode 100755 index 0000000000..f35d92f25a --- /dev/null +++ b/helm/testdata/postrender.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ $# -ne 2 ] +then + echo "Usage: $0 " >&2 + exit 1 +fi