mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
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:
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
`)
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user