Skip to content

Commit ebf0063

Browse files
committed
feat(namespace-transformer): preserve and set namespaces for Helm-generated resources
Track namespace propagation for Helm-generated resources.
1 parent 4ef1cf8 commit ebf0063

3 files changed

Lines changed: 45 additions & 7 deletions

File tree

api/internal/builtins/NamespaceTransformer.go

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/builtin/namespacetransformer/NamespaceTransformer.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,17 @@ func (p *plugin) Transform(m resmap.ResMap) error {
5757
// Don't mutate empty objects?
5858
continue
5959
}
60+
helmGenerated := false
6061
if annotations := r.GetAnnotations(konfig.HelmGeneratedAnnotation); annotations[konfig.HelmGeneratedAnnotation] == "true" {
61-
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
62-
continue
62+
// Preserve namespaces emitted by Helm, but still fill any missing namespace fields.
63+
helmGenerated = true
6364
}
6465
r.StorePreviousId()
6566
if err := r.ApplyFilter(namespace.Filter{
6667
Namespace: p.Namespace,
6768
FsSlice: p.FieldSpecs,
6869
SetRoleBindingSubjects: p.SetRoleBindingSubjects,
69-
UnsetOnly: p.UnsetOnly,
70+
UnsetOnly: p.UnsetOnly || helmGenerated,
7071
}); err != nil {
7172
return err
7273
}

plugin/builtin/namespacetransformer/NamespaceTransformer_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ subjects:
768768
})
769769
}
770770

771-
func TestNamespaceTransformer_SkipHelmOrigin(t *testing.T) {
771+
func TestNamespaceTransformer_HelmOriginPreservesExistingNamespace(t *testing.T) {
772772
th := kusttest_test.MakeEnhancedHarness(t).
773773
PrepBuiltin("NamespaceTransformer")
774774
defer th.Reset()
@@ -804,3 +804,39 @@ metadata:
804804
namespace: helm-ns
805805
`)
806806
}
807+
808+
func TestNamespaceTransformer_HelmOriginSetsMissingNamespace(t *testing.T) {
809+
th := kusttest_test.MakeEnhancedHarness(t).
810+
PrepBuiltin("NamespaceTransformer")
811+
defer th.Reset()
812+
813+
rmF := resmap.NewFactory(provider.NewDefaultDepProvider().GetResourceFactory())
814+
rm, err := rmF.NewResMapFromBytes([]byte(`apiVersion: v1
815+
kind: Service
816+
metadata:
817+
name: svc
818+
annotations:
819+
this-should-be-keept: "true"
820+
`))
821+
require.NoError(t, err)
822+
r := rm.Resources()[0]
823+
require.NoError(t, r.RNode.PipeE(kyaml.SetAnnotation(konfig.HelmGeneratedAnnotation, "true")))
824+
825+
rm, err = th.RunTransformerFromResMap(`
826+
apiVersion: builtin
827+
kind: NamespaceTransformer
828+
metadata:
829+
name: notImportantHere
830+
namespace: test
831+
`+defaultFieldSpecs, rm)
832+
require.NoError(t, err)
833+
require.NoError(t, rm.RemoveOriginAnnotations())
834+
th.AssertActualEqualsExpectedNoIdAnnotations(rm, `apiVersion: v1
835+
kind: Service
836+
metadata:
837+
annotations:
838+
this-should-be-keept: "true"
839+
name: svc
840+
namespace: test
841+
`)
842+
}

0 commit comments

Comments
 (0)