diff --git a/pkg/target/extendedpatch_test.go b/pkg/target/extendedpatch_test.go index dc647ad7d..f24f209c9 100644 --- a/pkg/target/extendedpatch_test.go +++ b/pkg/target/extendedpatch_test.go @@ -922,3 +922,226 @@ spec: app: busybox `) } + +func TestExtendedPatchNoMatchMultiplePatch(t *testing.T) { + th := kusttest_test.NewKustTestHarness(t, "/app/base") + makeCommonFileForExtendedPatchTest(th) + th.WriteK("/app/base", ` +resources: +- deployment.yaml +- service.yaml +patches: +- path: patch.yaml + target: + name: no-match +- path: patch.yaml + target: + name: busybox + kind: Job +`) + th.WriteF("/app/base/patch.yaml", ` +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: busybox + annotations: + new-key: new-value +`) + m, err := th.MakeKustTarget().MakeCustomizedResMap() + if err != nil { + t.Fatalf("Err: %v", err) + } + th.AssertActualEqualsExpected(m, ` +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + labels: + app: nginx + name: nginx +spec: + template: + metadata: + labels: + app: nginx + spec: + containers: + - image: nginx + name: nginx + volumeMounts: + - mountPath: /tmp/ps + name: nginx-persistent-storage + volumes: + - emptyDir: {} + name: nginx-persistent-storage + - configMap: + name: configmap-in-base + name: configmap-in-base +--- +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + labels: + app: busybox + name: busybox +spec: + template: + metadata: + labels: + app: busybox + spec: + containers: + - image: busybox + name: busybox + volumeMounts: + - mountPath: /tmp/ps + name: busybox-persistent-storage + volumes: + - emptyDir: {} + name: busybox-persistent-storage + - configMap: + name: configmap-in-base + name: configmap-in-base +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: nginx + name: nginx +spec: + ports: + - port: 80 + selector: + app: nginx +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: busybox + name: busybox +spec: + ports: + - port: 8080 + selector: + app: busybox +`) +} + +func TestExtendedPatchMultiplePatchOverlapping(t *testing.T) { + th := kusttest_test.NewKustTestHarness(t, "/app/base") + makeCommonFileForExtendedPatchTest(th) + th.WriteK("/app/base", ` +resources: +- deployment.yaml +- service.yaml +patches: +- path: patch1.yaml + target: + labelSelector: app=busybox +- path: patch2.yaml + target: + name: busybox + kind: Deployment +`) + th.WriteF("/app/base/patch1.yaml", ` +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: busybox + annotations: + new-key-from-patch1: new-value +`) + th.WriteF("/app/base/patch2.yaml", ` +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: busybox + annotations: + new-key-from-patch2: new-value +`) + m, err := th.MakeKustTarget().MakeCustomizedResMap() + if err != nil { + t.Fatalf("Err: %v", err) + } + th.AssertActualEqualsExpected(m, ` +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + labels: + app: nginx + name: nginx +spec: + template: + metadata: + labels: + app: nginx + spec: + containers: + - image: nginx + name: nginx + volumeMounts: + - mountPath: /tmp/ps + name: nginx-persistent-storage + volumes: + - emptyDir: {} + name: nginx-persistent-storage + - configMap: + name: configmap-in-base + name: configmap-in-base +--- +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + annotations: + new-key-from-patch1: new-value + new-key-from-patch2: new-value + labels: + app: busybox + name: busybox +spec: + template: + metadata: + labels: + app: busybox + spec: + containers: + - image: busybox + name: busybox + volumeMounts: + - mountPath: /tmp/ps + name: busybox-persistent-storage + volumes: + - emptyDir: {} + name: busybox-persistent-storage + - configMap: + name: configmap-in-base + name: configmap-in-base +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: nginx + name: nginx +spec: + ports: + - port: 80 + selector: + app: nginx +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + new-key-from-patch1: new-value + labels: + app: busybox + name: busybox +spec: + ports: + - port: 8080 + selector: + app: busybox +`) +} diff --git a/plugin/builtin/PatchTransformer.go b/plugin/builtin/PatchTransformer.go index 7eefd39c1..f243a1560 100644 --- a/plugin/builtin/PatchTransformer.go +++ b/plugin/builtin/PatchTransformer.go @@ -114,10 +114,11 @@ func (p *PatchTransformerPlugin) Transform(m resmap.ResMap) error { } } if p.loadedPatch != nil { - p.loadedPatch.SetName(resource.GetName()) - p.loadedPatch.SetNamespace(resource.GetNamespace()) - p.loadedPatch.SetGvk(resource.GetGvk()) - err = resource.Patch(p.loadedPatch.Kunstructured) + patchCopy := p.loadedPatch.DeepCopy() + patchCopy.SetName(resource.GetName()) + patchCopy.SetNamespace(resource.GetNamespace()) + patchCopy.SetGvk(resource.GetGvk()) + err = resource.Patch(patchCopy.Kunstructured) if err != nil { return err } diff --git a/plugin/builtin/patchtransformer/PatchTransformer.go b/plugin/builtin/patchtransformer/PatchTransformer.go index 1b02717ba..16f82198c 100644 --- a/plugin/builtin/patchtransformer/PatchTransformer.go +++ b/plugin/builtin/patchtransformer/PatchTransformer.go @@ -115,10 +115,11 @@ func (p *plugin) Transform(m resmap.ResMap) error { } } if p.loadedPatch != nil { - p.loadedPatch.SetName(resource.GetName()) - p.loadedPatch.SetNamespace(resource.GetNamespace()) - p.loadedPatch.SetGvk(resource.GetGvk()) - err = resource.Patch(p.loadedPatch.Kunstructured) + patchCopy := p.loadedPatch.DeepCopy() + patchCopy.SetName(resource.GetName()) + patchCopy.SetNamespace(resource.GetNamespace()) + patchCopy.SetGvk(resource.GetGvk()) + err = resource.Patch(patchCopy.Kunstructured) if err != nil { return err }