mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-14 10:30:59 +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:
|
case yaml.ScalarNode:
|
||||||
return yn, nil
|
return yn, nil
|
||||||
case yaml.AliasNode:
|
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:
|
case yaml.MappingNode:
|
||||||
toMerge, err := removeMergeTags(yn)
|
toMerge, err := removeMergeTags(yn)
|
||||||
if err != nil {
|
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) {
|
func TestImageTagTransformerTagWithBraces(t *testing.T) {
|
||||||
th := kusttest_test.MakeEnhancedHarness(t).
|
th := kusttest_test.MakeEnhancedHarness(t).
|
||||||
PrepBuiltin("ImageTagTransformer")
|
PrepBuiltin("ImageTagTransformer")
|
||||||
|
|||||||
@@ -828,3 +828,65 @@ spec:
|
|||||||
protocol: TCP
|
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) {
|
func TestReplacementTransformerComplexType(t *testing.T) {
|
||||||
th := kusttest_test.MakeEnhancedHarness(t).
|
th := kusttest_test.MakeEnhancedHarness(t).
|
||||||
PrepBuiltin("ReplacementTransformer")
|
PrepBuiltin("ReplacementTransformer")
|
||||||
|
|||||||
Reference in New Issue
Block a user