Convert image transformer to kyaml.

This commit is contained in:
jregan
2020-07-18 06:53:12 -07:00
parent 46a6bf0bb4
commit ef924a5c9c
8 changed files with 107 additions and 49 deletions

View File

@@ -9,10 +9,10 @@ import (
"regexp"
"strings"
"sigs.k8s.io/kustomize/api/transform"
"sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/api/filters/imagetag"
"sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/kyaml/filtersutil"
"sigs.k8s.io/yaml"
)
@@ -35,18 +35,18 @@ func (p *plugin) Config(
func (p *plugin) Transform(m resmap.ResMap) error {
for _, r := range m.Resources() {
for _, path := range p.FieldSpecs {
if !r.OrgId().IsSelected(&path.Gvk) {
continue
}
err := transform.MutateField(
r.Map(), path.PathSlice(), false, p.mutateImage)
if err != nil {
return err
}
}
// Kept for backward compatibility
if err := p.findAndReplaceImage(r.Map()); err != nil && r.OrgId().Kind != `CustomResourceDefinition` {
// 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{
ImageTag: p.ImageTag,
FsSlice: p.FieldSpecs,
}, r)
if err != nil {
return err
}
}

View File

@@ -22,6 +22,9 @@ metadata:
imageTag:
name: nginx
newTag: v2
fieldSpecs:
- path: spec/template/spec/containers[]/image
- path: spec/template/spec/initContainers[]/image
`, `
group: apps
apiVersion: v1
@@ -89,6 +92,9 @@ metadata:
imageTag:
name: nginx
newName: busybox
fieldSpecs:
- path: spec/template/spec/containers[]/image
- path: spec/template/spec/initContainers[]/image
`, `
group: apps
apiVersion: v1
@@ -158,6 +164,9 @@ imageTag:
name: nginx
newName: busybox
newTag: v2
fieldSpecs:
- path: spec/template/spec/containers[]/image
- path: spec/template/spec/initContainers[]/image
`, `
group: apps
apiVersion: v1
@@ -226,6 +235,9 @@ metadata:
imageTag:
name: nginx
Digest: sha256:222222222222222222
fieldSpecs:
- path: spec/template/spec/containers[]/image
- path: spec/template/spec/initContainers[]/image
`, `
group: apps
apiVersion: v1
@@ -295,6 +307,9 @@ imageTag:
name: nginx
newName: busybox
Digest: sha256:222222222222222222
fieldSpecs:
- path: spec/template/spec/containers[]/image
- path: spec/template/spec/initContainers[]/image
`, `
group: apps
apiVersion: v1
@@ -363,6 +378,11 @@ metadata:
imageTag:
name: nginx
newTag: v2
fieldSpecs:
- path: spec/template/spec/containers[]/image
create: true
- path: spec/template/spec/initContainers[]/image
create: true
`, `
group: apps
apiVersion: v1
@@ -384,8 +404,8 @@ metadata:
spec:
template:
spec:
containers: null
initContainers: null
containers: []
initContainers: []
`)
}
@@ -402,6 +422,8 @@ metadata:
imageTag:
name: some.registry.io/my-image
newTag: "my-fixed-tag"
fieldSpecs:
- path: spec/template/spec/containers[]/image
`, `
group: apps
apiVersion: v1
@@ -429,4 +451,4 @@ spec:
- image: some.registry.io/my-image:my-fixed-tag
name: my-image
`)
}
}

View File

@@ -4,6 +4,7 @@ go 1.14
require (
sigs.k8s.io/kustomize/api v0.5.1
sigs.k8s.io/kustomize/kyaml v0.4.1
sigs.k8s.io/yaml v1.2.0
)