diff --git a/api/types/helmchartargs.go b/api/types/helmchartargs.go index 86afc52cf2..2ec7d8efde 100644 --- a/api/types/helmchartargs.go +++ b/api/types/helmchartargs.go @@ -148,6 +148,11 @@ func makeHelmChartFromHca(old *HelmChartArgs) (c HelmChart) { c.ValuesInline = old.ValuesLocal c.ValuesMerge = old.ValuesMerge c.ReleaseName = old.ReleaseName + // ReleaseNamespace maps onto Namespace in the (non-deprecated) + // HelmChart type. Forgetting this mapping is why releaseNamespace + // set under the deprecated helmChartInflationGenerator field is + // silently ignored — see kubernetes-sigs/kustomize#4593. + c.Namespace = old.ReleaseNamespace return } diff --git a/api/types/helmchartargs_test.go b/api/types/helmchartargs_test.go index fd9a7a79a1..1c011d92e8 100644 --- a/api/types/helmchartargs_test.go +++ b/api/types/helmchartargs_test.go @@ -102,3 +102,23 @@ func TestAsHelmArgs(t *testing.T) { "--devel"}) }) } + +// Regression test for https://github.com/kubernetes-sigs/kustomize/issues/4593. +// HelmChartArgs.ReleaseNamespace was not copied into HelmChart.Namespace by +// makeHelmChartFromHca, so kustomizations that used the deprecated +// helmChartInflationGenerator with releaseNamespace silently rendered resources +// into the "default" namespace. +func TestSplitHelmParametersPropagatesReleaseNamespace(t *testing.T) { + args := []types.HelmChartArgs{{ + ChartName: "nats", + ChartVersion: "v0.13.1", + ReleaseName: "nats", + ReleaseNamespace: "custom-ns", + }} + + charts, _ := types.SplitHelmParameters(args) + + require.Len(t, charts, 1) + require.Equal(t, "custom-ns", charts[0].Namespace, + "ReleaseNamespace from the deprecated HelmChartArgs must map onto HelmChart.Namespace") +}