diff --git a/k8sdeps/kunstruct/kunstruct.go b/k8sdeps/kunstruct/kunstruct.go index 477c3fa50d..17395b3abb 100644 --- a/k8sdeps/kunstruct/kunstruct.go +++ b/k8sdeps/kunstruct/kunstruct.go @@ -338,7 +338,11 @@ func (fs *UnstructAdapter) Patch(patch ifc.Kunstructured) error { } } fs.SetMap(merged) - fs.SetName(saveName) + if len(fs.Map()) != 0 { + // if the patch deletes the object + // don't reset the name + fs.SetName(saveName) + } return nil } diff --git a/plugin/builtin/PatchStrategicMergeTransformer.go b/plugin/builtin/PatchStrategicMergeTransformer.go index 4f0c34d98a..ed4ef76c27 100644 --- a/plugin/builtin/PatchStrategicMergeTransformer.go +++ b/plugin/builtin/PatchStrategicMergeTransformer.go @@ -70,6 +70,14 @@ func (p *PatchStrategicMergeTransformerPlugin) Transform(m resmap.ResMap) error if err != nil { return err } + // remove the resource from resmap + // when the patch is to $patch: delete that target + if len(target.Map()) == 0 { + err = m.Remove(target.CurId()) + if err != nil { + return err + } + } } return nil } diff --git a/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer.go b/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer.go index d6c8d629d2..4486a5a629 100644 --- a/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer.go +++ b/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer.go @@ -71,6 +71,14 @@ func (p *plugin) Transform(m resmap.ResMap) error { if err != nil { return err } + // remove the resource from resmap + // when the patch is to $patch: delete that target + if len(target.Map()) == 0 { + err = m.Remove(target.CurId()) + if err != nil { + return err + } + } } return nil } diff --git a/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer_test.go b/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer_test.go index 3983fd936b..7d67996b9c 100644 --- a/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer_test.go +++ b/plugin/builtin/patchstrategicmergetransformer/PatchStrategicMergeTransformer_test.go @@ -1198,3 +1198,32 @@ func TestMultipleNamespaces(t *testing.T) { } } } + +func TestPatchStrategicMergeTransformerPatchDelete(t *testing.T) { + tc := plugins_test.NewEnvForTest(t).Set() + defer tc.Reset() + + tc.BuildGoPlugin( + "builtin", "", "PatchStrategicMergeTransformer") + + th := kusttest_test.NewKustTestPluginHarness(t, "/app") + + th.WriteF("/app/patch.yaml", ` +apiVersion: apps/v1 +metadata: + name: myDeploy +kind: Deployment +$patch: delete +`) + + rm := th.LoadAndRunTransformer(` +apiVersion: builtin +kind: PatchStrategicMergeTransformer +metadata: + name: notImportantHere +paths: +- patch.yaml +`, target) + + th.AssertActualEqualsExpected(rm, ``) +} \ No newline at end of file