diff --git a/api/krusty/multiplepatch_test.go b/api/krusty/multiplepatch_test.go index 860d53ad47..a2414e71f3 100644 --- a/api/krusty/multiplepatch_test.go +++ b/api/krusty/multiplepatch_test.go @@ -1282,6 +1282,58 @@ metadata: } } +func TestSinglePatchWithMultiplePatchDeleteDirectives(t *testing.T) { + th := kusttest_test.MakeHarness(t) + makeCommonFilesForMultiplePatchTests(th) + th.WriteF("overlay/staging/deployment-patch1.yaml", ` +$patch: delete +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx +--- +$patch: delete +apiVersion: v1 +kind: Service +metadata: + name: nginx +`) + th.WriteF("overlay/staging/deployment-patch2.yaml", ` +apiVersion: v1 +kind: ConfigMap +metadata: + name: configmap-in-base +data: + foo2: bar2 +`) + m := th.Run("overlay/staging", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, ` +apiVersion: v1 +data: + foo: bar + foo2: bar2 +kind: ConfigMap +metadata: + annotations: + note: This is a test annotation + labels: + app: mynginx + env: staging + org: example.com + team: foo + name: staging-team-foo-configmap-in-base-8cmgkm9f44 +--- +apiVersion: v1 +data: + hello: world +kind: ConfigMap +metadata: + labels: + env: staging + name: staging-configmap-in-overlay-dc6fm46dhm +`) +} + func TestMultiplePatchesBothWithPatchDeleteDirective(t *testing.T) { th := kusttest_test.MakeHarness(t) makeCommonFilesForMultiplePatchTests(th) diff --git a/api/resmap/reswrangler.go b/api/resmap/reswrangler.go index 2e34fae6a7..f6443539f1 100644 --- a/api/resmap/reswrangler.go +++ b/api/resmap/reswrangler.go @@ -181,6 +181,10 @@ func (m *resWrangler) GetMatchingResourcesByAnyId( matches IdMatcher) []*resource.Resource { var result []*resource.Resource for _, r := range m.rList { + if r.RNode.IsNilOrEmpty() { + continue + } + for _, id := range append(r.PrevIds(), r.CurId()) { if matches(id) { result = append(result, r)