diff --git a/api/filters/replacement/replacement.go b/api/filters/replacement/replacement.go index d4fea260be..bea5690c40 100644 --- a/api/filters/replacement/replacement.go +++ b/api/filters/replacement/replacement.go @@ -126,8 +126,8 @@ func applyReplacement(nodes []*yaml.RNode, value *yaml.RNode, targetSelectors [] } // filter targets by matching resource IDs - for i, id := range ids { - if id.IsSelectedBy(selector.Select.ResId) && !rejectId(selector.Reject, &ids[i]) { + for _, id := range ids { + if id.IsSelectedBy(selector.Select.ResId) && !containsRejectId(selector.Reject, ids) { err := copyValueToTarget(possibleTarget, value, selector) if err != nil { return nil, err @@ -168,10 +168,15 @@ func matchesAnnoAndLabelSelector(n *yaml.RNode, selector *types.Selector) (bool, return annoMatch && labelMatch, nil } -func rejectId(rejects []*types.Selector, id *resid.ResId) bool { +func containsRejectId(rejects []*types.Selector, ids []resid.ResId) bool { for _, r := range rejects { - if !r.ResId.IsEmpty() && id.IsSelectedBy(r.ResId) { - return true + if r.ResId.IsEmpty() { + continue + } + for _, id := range ids { + if id.IsSelectedBy(r.ResId) { + return true + } } } return false diff --git a/api/krusty/replacementtransformer_test.go b/api/krusty/replacementtransformer_test.go index 5f57082ec9..273246756b 100644 --- a/api/krusty/replacementtransformer_test.go +++ b/api/krusty/replacementtransformer_test.go @@ -546,3 +546,71 @@ metadata: name: red-dc6gc5btkc `) } + +func TestReplacementTransformerWithSuffixTransformerAndReject(t *testing.T) { + th := kusttest_test.MakeEnhancedHarness(t) + defer th.Reset() + + th.WriteF("base/app.yaml", ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: original-name +spec: + template: + spec: + containers: + - image: app1:1.0 + name: app +`) + th.WriteK("base", ` +resources: + - app.yaml +`) + th.WriteK("overlay", ` +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +nameSuffix: -dev +resources: + - ../base + +configMapGenerator: + - name: app-config + literals: + - name=something-else + +replacements: + - source: + kind: ConfigMap + name: app-config + fieldPath: data.name + targets: + - fieldPaths: + - spec.template.spec.containers.0.name + select: + kind: Deployment + reject: + - name: original-name +`) + m := th.Run("overlay", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: original-name-dev +spec: + template: + spec: + containers: + - image: app1:1.0 + name: app +--- +apiVersion: v1 +data: + name: something-else +kind: ConfigMap +metadata: + name: app-config-dev-97544dk6t8 +`) +}