Skip to content

Commit 911ddcd

Browse files
authored
Merge pull request kubernetes-sigs#5263 from bugoverdose/fix/reject-on-id-change
Fix `reject` needing both current and previous ids
2 parents d32d193 + 9f1d5ac commit 911ddcd

File tree

2 files changed

+78
-5
lines changed

2 files changed

+78
-5
lines changed

api/filters/replacement/replacement.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ func applyReplacement(nodes []*yaml.RNode, value *yaml.RNode, targetSelectors []
126126
}
127127

128128
// filter targets by matching resource IDs
129-
for i, id := range ids {
130-
if id.IsSelectedBy(selector.Select.ResId) && !rejectId(selector.Reject, &ids[i]) {
129+
for _, id := range ids {
130+
if id.IsSelectedBy(selector.Select.ResId) && !containsRejectId(selector.Reject, ids) {
131131
err := copyValueToTarget(possibleTarget, value, selector)
132132
if err != nil {
133133
return nil, err
@@ -168,10 +168,15 @@ func matchesAnnoAndLabelSelector(n *yaml.RNode, selector *types.Selector) (bool,
168168
return annoMatch && labelMatch, nil
169169
}
170170

171-
func rejectId(rejects []*types.Selector, id *resid.ResId) bool {
171+
func containsRejectId(rejects []*types.Selector, ids []resid.ResId) bool {
172172
for _, r := range rejects {
173-
if !r.ResId.IsEmpty() && id.IsSelectedBy(r.ResId) {
174-
return true
173+
if r.ResId.IsEmpty() {
174+
continue
175+
}
176+
for _, id := range ids {
177+
if id.IsSelectedBy(r.ResId) {
178+
return true
179+
}
175180
}
176181
}
177182
return false

api/krusty/replacementtransformer_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,3 +546,71 @@ metadata:
546546
name: red-dc6gc5btkc
547547
`)
548548
}
549+
550+
func TestReplacementTransformerWithSuffixTransformerAndReject(t *testing.T) {
551+
th := kusttest_test.MakeEnhancedHarness(t)
552+
defer th.Reset()
553+
554+
th.WriteF("base/app.yaml", `
555+
apiVersion: apps/v1
556+
kind: Deployment
557+
metadata:
558+
name: original-name
559+
spec:
560+
template:
561+
spec:
562+
containers:
563+
- image: app1:1.0
564+
name: app
565+
`)
566+
th.WriteK("base", `
567+
resources:
568+
- app.yaml
569+
`)
570+
th.WriteK("overlay", `
571+
apiVersion: kustomize.config.k8s.io/v1beta1
572+
kind: Kustomization
573+
574+
nameSuffix: -dev
575+
resources:
576+
- ../base
577+
578+
configMapGenerator:
579+
- name: app-config
580+
literals:
581+
- name=something-else
582+
583+
replacements:
584+
- source:
585+
kind: ConfigMap
586+
name: app-config
587+
fieldPath: data.name
588+
targets:
589+
- fieldPaths:
590+
- spec.template.spec.containers.0.name
591+
select:
592+
kind: Deployment
593+
reject:
594+
- name: original-name
595+
`)
596+
m := th.Run("overlay", th.MakeDefaultOptions())
597+
th.AssertActualEqualsExpected(m, `
598+
apiVersion: apps/v1
599+
kind: Deployment
600+
metadata:
601+
name: original-name-dev
602+
spec:
603+
template:
604+
spec:
605+
containers:
606+
- image: app1:1.0
607+
name: app
608+
---
609+
apiVersion: v1
610+
data:
611+
name: something-else
612+
kind: ConfigMap
613+
metadata:
614+
name: app-config-dev-97544dk6t8
615+
`)
616+
}

0 commit comments

Comments
 (0)