mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
Merge pull request #2931 from Shell32-Natsu/image-tag-legacy
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 {
|
func (p *ImageTagTransformerPlugin) Transform(m resmap.ResMap) error {
|
||||||
for _, r := range m.Resources() {
|
for _, r := range m.Resources() {
|
||||||
// If you're here because someone expected any field containing
|
// traverse all fields at first
|
||||||
// the string "containers" or "initContainers" to get an image
|
err := filtersutil.ApplyToJSON(imagetag.LegacyFilter{
|
||||||
// update (not just spec/template/spec/containers[], etc.) then
|
ImageTag: p.ImageTag,
|
||||||
// a code change is needed. See api/filters/imagetag/legacy
|
}, r)
|
||||||
// for the start of an implementation that won't use an
|
if err != nil {
|
||||||
// allowlist like FsSlice, and instead walks the object looking
|
return err
|
||||||
// for fields named containers or initContainers.
|
}
|
||||||
err := filtersutil.ApplyToJSON(imagetag.Filter{
|
// then use user specified field specs
|
||||||
|
err = filtersutil.ApplyToJSON(imagetag.Filter{
|
||||||
ImageTag: p.ImageTag,
|
ImageTag: p.ImageTag,
|
||||||
FsSlice: p.FieldSpecs,
|
FsSlice: p.FieldSpecs,
|
||||||
}, r)
|
}, r)
|
||||||
|
|||||||
@@ -215,25 +215,25 @@ spec2:
|
|||||||
template:
|
template:
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- image: nginx:v1
|
- image: nginx:v2
|
||||||
name: nginx3
|
name: nginx3
|
||||||
- image: my-nginx:latest
|
- image: my-nginx:previous
|
||||||
name: nginx4
|
name: nginx4
|
||||||
spec3:
|
spec3:
|
||||||
template:
|
template:
|
||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- image: postgres:alpine-9
|
- image: my-postgres:v3
|
||||||
name: postgresdb
|
name: postgresdb
|
||||||
- image: docker:17-git
|
- image: my-docker@sha256:25a0d4b4
|
||||||
name: init-docker
|
name: init-docker
|
||||||
- image: myprivaterepohostname:1234/my/image:latest
|
- image: myprivaterepohostname:1234/my/image:v1.0.1
|
||||||
name: myImage
|
name: myImage
|
||||||
- image: myprivaterepohostname:1234/my/image
|
- image: myprivaterepohostname:1234/my/image:v1.0.1
|
||||||
name: myImage2
|
name: myImage2
|
||||||
- image: my-app-image:v1
|
- image: my-app-image:v1
|
||||||
name: my-app
|
name: my-app
|
||||||
- image: gcr.io:8080/my-project/my-cool-app:latest
|
- image: my-cool-app:latest
|
||||||
name: my-cool-app
|
name: my-cool-app
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,14 +35,15 @@ func (p *plugin) Config(
|
|||||||
|
|
||||||
func (p *plugin) Transform(m resmap.ResMap) error {
|
func (p *plugin) Transform(m resmap.ResMap) error {
|
||||||
for _, r := range m.Resources() {
|
for _, r := range m.Resources() {
|
||||||
// If you're here because someone expected any field containing
|
// traverse all fields at first
|
||||||
// the string "containers" or "initContainers" to get an image
|
err := filtersutil.ApplyToJSON(imagetag.LegacyFilter{
|
||||||
// update (not just spec/template/spec/containers[], etc.) then
|
ImageTag: p.ImageTag,
|
||||||
// a code change is needed. See api/filters/imagetag/legacy
|
}, r)
|
||||||
// for the start of an implementation that won't use an
|
if err != nil {
|
||||||
// allowlist like FsSlice, and instead walks the object looking
|
return err
|
||||||
// for fields named containers or initContainers.
|
}
|
||||||
err := filtersutil.ApplyToJSON(imagetag.Filter{
|
// then use user specified field specs
|
||||||
|
err = filtersutil.ApplyToJSON(imagetag.Filter{
|
||||||
ImageTag: p.ImageTag,
|
ImageTag: p.ImageTag,
|
||||||
FsSlice: p.FieldSpecs,
|
FsSlice: p.FieldSpecs,
|
||||||
}, r)
|
}, r)
|
||||||
|
|||||||
@@ -452,3 +452,104 @@ spec:
|
|||||||
name: my-image
|
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