Merge pull request #188 from Liujingfang1/cr

Enable imageTagTransformer in application
This commit is contained in:
k8s-ci-robot
2018-07-20 11:54:56 -07:00
committed by GitHub
6 changed files with 43 additions and 17 deletions

View File

@@ -169,11 +169,20 @@ func (a *Application) loadCustomizedResMap() (resmap.ResMap, error) {
if len(errs.Get()) > 0 { if len(errs.Get()) > 0 {
return nil, errs return nil, errs
} }
var r []transformers.Transformer
t, err := a.newTransformer(patches) t, err := a.newTransformer(patches)
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = t.Transform(result) r = append(r, t)
t, err = transformers.NewImageTagTransformer(a.kustomization.ImageTags)
if err != nil {
return nil, err
}
r = append(r, t)
err = transformers.NewMultiTransformer(r).Transform(result)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -48,7 +48,7 @@ diff -u -N /tmp/noop/extensions_v1beta1_Deployment_mungebot.yaml /tmp/transforme
- name: foo - name: foo
value: bar value: bar
- image: nginx - image: nginx
+ image: nginx:1.7.9 + image: nginx:1.8.0
name: nginx name: nginx
ports: ports:
- containerPort: 80 - containerPort: 80

View File

@@ -111,7 +111,7 @@ spec:
name: test-infra-app-tls-6hkmhf2224 name: test-infra-app-tls-6hkmhf2224
- name: foo - name: foo
value: bar value: bar
image: nginx:1.7.9 image: nginx:1.8.0
name: nginx name: nginx
ports: ports:
- containerPort: 80 - containerPort: 80

View File

@@ -21,3 +21,6 @@ secretGenerator:
tls.crt: "cat secret/tls.cert" tls.crt: "cat secret/tls.cert"
tls.key: "cat secret/tls.key" tls.key: "cat secret/tls.key"
type: "kubernetes.io/tls" type: "kubernetes.io/tls"
imageTags:
- name: nginx
newTag: 1.8.0

View File

@@ -55,15 +55,25 @@ func (pt *imageTagTransformer) Transform(resources resmap.ResMap) error {
then loops though all images inside containers session, finds matched ones and update the tag name then loops though all images inside containers session, finds matched ones and update the tag name
*/ */
func (pt *imageTagTransformer) findAndReplaceTag(obj map[string]interface{}) error { func (pt *imageTagTransformer) findAndReplaceTag(obj map[string]interface{}) error {
_, found := obj["containers"] paths := []string{"containers", "initContainers"}
if found { found := false
return pt.updateContainers(obj) for _, path := range paths {
_, found = obj[path]
if found {
err := pt.updateContainers(obj, path)
if err != nil {
return err
}
}
} }
return pt.findContainers(obj) if !found {
return pt.findContainers(obj)
}
return nil
} }
func (pt *imageTagTransformer) updateContainers(obj map[string]interface{}) error { func (pt *imageTagTransformer) updateContainers(obj map[string]interface{}, path string) error {
containers := obj["containers"].([]interface{}) containers := obj[path].([]interface{})
for i := range containers { for i := range containers {
container := containers[i].(map[string]interface{}) container := containers[i].(map[string]interface{})
image, found := container["image"] image, found := container["image"]

View File

@@ -39,15 +39,17 @@ func TestImageTagTransformer(t *testing.T) {
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"template": map[string]interface{}{ "template": map[string]interface{}{
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"initContainers": []interface{}{
map[string]interface{}{
"name": "nginx2",
"image": "my-nginx:1.8.0",
},
},
"containers": []interface{}{ "containers": []interface{}{
map[string]interface{}{ map[string]interface{}{
"name": "nginx", "name": "nginx",
"image": "nginx:1.7.9", "image": "nginx:1.7.9",
}, },
map[string]interface{}{
"name": "nginx2",
"image": "my-nginx:1.8.0",
},
}, },
}, },
}, },
@@ -101,15 +103,17 @@ func TestImageTagTransformer(t *testing.T) {
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"template": map[string]interface{}{ "template": map[string]interface{}{
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"initContainers": []interface{}{
map[string]interface{}{
"name": "nginx2",
"image": "my-nginx:previous",
},
},
"containers": []interface{}{ "containers": []interface{}{
map[string]interface{}{ map[string]interface{}{
"name": "nginx", "name": "nginx",
"image": "nginx:v2", "image": "nginx:v2",
}, },
map[string]interface{}{
"name": "nginx2",
"image": "my-nginx:previous",
},
}, },
}, },
}, },