prevent all uses of YAML aliases from being overwritten by a transformer (#5096)

* return copied Node

* add a test case about imageTagTransformer for anchor scenario

* add TestPatchTransformerAnchor

* TestReplacementTransformerAnchor
This commit is contained in:
Yutaro
2023-04-01 08:07:50 +09:00
committed by GitHub
parent 3b395a9da2
commit 42bf3c0e2b
4 changed files with 164 additions and 1 deletions

View File

@@ -1007,7 +1007,11 @@ func deAnchor(yn *yaml.Node) (res *yaml.Node, err error) {
case yaml.ScalarNode:
return yn, nil
case yaml.AliasNode:
return deAnchor(yn.Alias)
result, err := deAnchor(yn.Alias)
if err != nil {
return nil, err
}
return CopyYNode(result), nil
case yaml.MappingNode:
toMerge, err := removeMergeTags(yn)
if err != nil {

View File

@@ -409,6 +409,49 @@ spec:
`)
}
func TestImageTagTransformerAnchor(t *testing.T) {
th := kusttest_test.MakeEnhancedHarness(t).
PrepBuiltin("ImageTagTransformer")
defer th.Reset()
rm := th.LoadAndRunTransformer(`
apiVersion: builtin
kind: ImageTagTransformer
metadata:
name: notImportantHere
imageTag:
name: nginx
newName: my-nginx
fieldSpecs:
- path: spec/template/spec/containers[]/image
`, `
group: apps
apiVersion: v1
kind: Deployment
metadata:
name: &name nginx
spec:
template:
spec:
containers:
- image: *name
name: *name
`)
th.AssertActualEqualsExpectedNoIdAnnotations(rm, `
apiVersion: v1
group: apps
kind: Deployment
metadata:
name: nginx
spec:
template:
spec:
containers:
- image: my-nginx
name: nginx
`)
}
func TestImageTagTransformerTagWithBraces(t *testing.T) {
th := kusttest_test.MakeEnhancedHarness(t).
PrepBuiltin("ImageTagTransformer")

View File

@@ -828,3 +828,65 @@ spec:
protocol: TCP
`)
}
func TestPatchTransformerAnchor(t *testing.T) {
th := kusttest_test.MakeEnhancedHarness(t).
PrepBuiltin("PatchTransformer")
defer th.Reset()
th.RunTransformerAndCheckResult(`
apiVersion: builtin
kind: PatchTransformer
metadata:
name: test-transformer
patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
spec:
selector:
matchLabels:
app: &name test-label
template:
metadata:
labels:
app: *name
target:
kind: Deployment
name: test-deployment
`, `apiVersion: apps/v1
kind: Deployment
metadata:
name: &name test-deployment
spec:
selector:
matchLabels:
app: *name
template:
metadata:
labels:
app: *name
spec:
containers:
- image: test-image
name: *name
`, `
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
spec:
selector:
matchLabels:
app: test-label
template:
metadata:
labels:
app: test-label
spec:
containers:
- image: test-image
name: test-deployment
`)
}

View File

@@ -174,6 +174,60 @@ spec:
`)
}
func TestReplacementTransformerAnchor(t *testing.T) {
th := kusttest_test.MakeEnhancedHarness(t).
PrepBuiltin("ReplacementTransformer")
defer th.Reset()
rm := th.LoadAndRunTransformer(`
apiVersion: builtin
kind: ReplacementTransformer
metadata:
name: notImportantHere
replacements:
- source:
kind: Deployment
fieldPath: spec.template.spec.containers.0.name
targets:
- select:
kind: Deployment
fieldPaths:
- spec.template.spec.containers.1.name
`, `
apiVersion: apps/v1
kind: Deployment
metadata:
name: &name origin
spec:
template:
spec:
containers:
- image: foobar:1
name: replaced
- image: foobar:1
name: *name
- image: foobar:1
name: *name
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: apps/v1
kind: Deployment
metadata:
name: origin
spec:
template:
spec:
containers:
- image: foobar:1
name: replaced
- image: foobar:1
name: replaced
- image: foobar:1
name: origin
`)
}
func TestReplacementTransformerComplexType(t *testing.T) {
th := kusttest_test.MakeEnhancedHarness(t).
PrepBuiltin("ReplacementTransformer")