mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
add legacy filter to image tag transformer
This commit is contained in:
@@ -31,14 +31,15 @@ func (p *ImageTagTransformerPlugin) Config(
|
||||
|
||||
func (p *ImageTagTransformerPlugin) Transform(m resmap.ResMap) error {
|
||||
for _, r := range m.Resources() {
|
||||
// If you're here because someone expected any field containing
|
||||
// the string "containers" or "initContainers" to get an image
|
||||
// update (not just spec/template/spec/containers[], etc.) then
|
||||
// a code change is needed. See api/filters/imagetag/legacy
|
||||
// for the start of an implementation that won't use an
|
||||
// allowlist like FsSlice, and instead walks the object looking
|
||||
// for fields named containers or initContainers.
|
||||
err := filtersutil.ApplyToJSON(imagetag.Filter{
|
||||
// traverse all fields at first
|
||||
err := filtersutil.ApplyToJSON(imagetag.LegacyFilter{
|
||||
ImageTag: p.ImageTag,
|
||||
}, r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// then use user specified field specs
|
||||
err = filtersutil.ApplyToJSON(imagetag.Filter{
|
||||
ImageTag: p.ImageTag,
|
||||
FsSlice: p.FieldSpecs,
|
||||
}, r)
|
||||
|
||||
@@ -215,25 +215,25 @@ spec2:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: nginx:v1
|
||||
- image: nginx:v2
|
||||
name: nginx3
|
||||
- image: my-nginx:latest
|
||||
- image: my-nginx:previous
|
||||
name: nginx4
|
||||
spec3:
|
||||
template:
|
||||
spec:
|
||||
initContainers:
|
||||
- image: postgres:alpine-9
|
||||
- image: my-postgres:v3
|
||||
name: postgresdb
|
||||
- image: docker:17-git
|
||||
- image: my-docker@sha256:25a0d4b4
|
||||
name: init-docker
|
||||
- image: myprivaterepohostname:1234/my/image:latest
|
||||
- image: myprivaterepohostname:1234/my/image:v1.0.1
|
||||
name: myImage
|
||||
- image: myprivaterepohostname:1234/my/image
|
||||
- image: myprivaterepohostname:1234/my/image:v1.0.1
|
||||
name: myImage2
|
||||
- image: my-app-image:v1
|
||||
name: my-app
|
||||
- image: gcr.io:8080/my-project/my-cool-app:latest
|
||||
- image: my-cool-app:latest
|
||||
name: my-cool-app
|
||||
`)
|
||||
}
|
||||
|
||||
@@ -35,14 +35,15 @@ func (p *plugin) Config(
|
||||
|
||||
func (p *plugin) Transform(m resmap.ResMap) error {
|
||||
for _, r := range m.Resources() {
|
||||
// If you're here because someone expected any field containing
|
||||
// the string "containers" or "initContainers" to get an image
|
||||
// update (not just spec/template/spec/containers[], etc.) then
|
||||
// a code change is needed. See api/filters/imagetag/legacy
|
||||
// for the start of an implementation that won't use an
|
||||
// allowlist like FsSlice, and instead walks the object looking
|
||||
// for fields named containers or initContainers.
|
||||
err := filtersutil.ApplyToJSON(imagetag.Filter{
|
||||
// traverse all fields at first
|
||||
err := filtersutil.ApplyToJSON(imagetag.LegacyFilter{
|
||||
ImageTag: p.ImageTag,
|
||||
}, r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// then use user specified field specs
|
||||
err = filtersutil.ApplyToJSON(imagetag.Filter{
|
||||
ImageTag: p.ImageTag,
|
||||
FsSlice: p.FieldSpecs,
|
||||
}, r)
|
||||
|
||||
@@ -452,3 +452,104 @@ spec:
|
||||
name: my-image
|
||||
`)
|
||||
}
|
||||
|
||||
func TestImageTagTransformerArbitraryPath(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: some.registry.io/my-image
|
||||
newTag: "my-fixed-tag"
|
||||
`, `
|
||||
group: apps
|
||||
apiVersion: v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: deploy1
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: some.registry.io/my-image:old-tag
|
||||
name: my-image
|
||||
`)
|
||||
|
||||
th.AssertActualEqualsExpected(rm, `
|
||||
apiVersion: v1
|
||||
group: apps
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: deploy1
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: some.registry.io/my-image:my-fixed-tag
|
||||
name: my-image
|
||||
`)
|
||||
}
|
||||
|
||||
func TestImageTagTransformerInKustomization(t *testing.T) {
|
||||
th := kusttest_test.MakeHarness(t)
|
||||
th.WriteK("/app", `
|
||||
resources:
|
||||
- resources.yaml
|
||||
images:
|
||||
- name: old-image-name
|
||||
newName: new-image-name
|
||||
newTag: new-tag
|
||||
`)
|
||||
|
||||
th.WriteF("/app/resources.yaml", `
|
||||
apiVersion: v1
|
||||
group: apps
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: deploy1
|
||||
spec:
|
||||
containers:
|
||||
- image: old-image-name
|
||||
name: my-image
|
||||
initContainers:
|
||||
- image: old-image-name
|
||||
name: my-image
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: old-image-name
|
||||
name: my-image
|
||||
initContainers:
|
||||
- image: old-image-name
|
||||
name: my-image
|
||||
`)
|
||||
|
||||
m := th.Run("/app", th.MakeDefaultOptions())
|
||||
th.AssertActualEqualsExpected(m, `
|
||||
apiVersion: v1
|
||||
group: apps
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: deploy1
|
||||
spec:
|
||||
containers:
|
||||
- image: new-image-name:new-tag
|
||||
name: my-image
|
||||
initContainers:
|
||||
- image: new-image-name:new-tag
|
||||
name: my-image
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: new-image-name:new-tag
|
||||
name: my-image
|
||||
initContainers:
|
||||
- image: new-image-name:new-tag
|
||||
name: my-image
|
||||
`)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user