Load default config for image transformer

This commit is contained in:
Yujun Zhang
2019-03-02 19:50:27 +08:00
parent d0cf047381
commit 3e85c4589b
5 changed files with 41 additions and 6 deletions

View File

@@ -312,7 +312,7 @@ func (kt *KustTarget) newTransformer(
return nil, err return nil, err
} }
r = append(r, t) r = append(r, t)
t, err = transformers.NewImageTransformer(kt.kustomization.Images) t, err = transformers.NewImageTransformer(kt.kustomization.Images, tConfig.Images)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -31,6 +31,7 @@ func GetDefaultFieldSpecs() []byte {
[]byte(namespaceFieldSpecs), []byte(namespaceFieldSpecs),
[]byte(varReferenceFieldSpecs), []byte(varReferenceFieldSpecs),
[]byte(nameReferenceFieldSpecs), []byte(nameReferenceFieldSpecs),
[]byte(imageFieldSpecs),
} }
return bytes.Join(configData, []byte("\n")) return bytes.Join(configData, []byte("\n"))
} }
@@ -45,5 +46,6 @@ func GetDefaultFieldSpecsAsMap() map[string]string {
result["namespace"] = namespaceFieldSpecs result["namespace"] = namespaceFieldSpecs
result["varreference"] = varReferenceFieldSpecs result["varreference"] = varReferenceFieldSpecs
result["namereference"] = nameReferenceFieldSpecs result["namereference"] = nameReferenceFieldSpecs
result["image"] = imageFieldSpecs
return result return result
} }

View File

@@ -0,0 +1,25 @@
/*
Copyright 2019 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package defaultconfig
const (
imageFieldSpecs = `
image:
- path: containers
- path: initContainers
`
)

View File

@@ -34,6 +34,7 @@ type TransformerConfig struct {
CommonAnnotations fsSlice `json:"commonAnnotations,omitempty" yaml:"commonAnnotations,omitempty"` CommonAnnotations fsSlice `json:"commonAnnotations,omitempty" yaml:"commonAnnotations,omitempty"`
NameReference nbrSlice `json:"nameReference,omitempty" yaml:"nameReference,omitempty"` NameReference nbrSlice `json:"nameReference,omitempty" yaml:"nameReference,omitempty"`
VarReference fsSlice `json:"varReference,omitempty" yaml:"varReference,omitempty"` VarReference fsSlice `json:"varReference,omitempty" yaml:"varReference,omitempty"`
Images fsSlice `json:"image,omitempty" yaml:"image,omitempty"`
} }
// MakeEmptyConfig returns an empty TransformerConfig object // MakeEmptyConfig returns an empty TransformerConfig object
@@ -59,6 +60,7 @@ func (t *TransformerConfig) sortFields() {
sort.Sort(t.CommonAnnotations) sort.Sort(t.CommonAnnotations)
sort.Sort(t.NameReference) sort.Sort(t.NameReference)
sort.Sort(t.VarReference) sort.Sort(t.VarReference)
sort.Sort(t.Images)
} }
// AddPrefixFieldSpec adds a FieldSpec to NamePrefix // AddPrefixFieldSpec adds a FieldSpec to NamePrefix
@@ -129,6 +131,10 @@ func (t *TransformerConfig) Merge(input *TransformerConfig) (
if err != nil { if err != nil {
return nil, err return nil, err
} }
merged.Images, err = t.Images.mergeAll(input.Images)
if err != nil {
return nil, err
}
merged.sortFields() merged.sortFields()
return merged, nil return merged, nil
} }

View File

@@ -23,18 +23,20 @@ import (
"sigs.k8s.io/kustomize/pkg/image" "sigs.k8s.io/kustomize/pkg/image"
"sigs.k8s.io/kustomize/pkg/resmap" "sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/transformers/config"
) )
// imageTransformer replace image names and tags // imageTransformer replace image names and tags
type imageTransformer struct { type imageTransformer struct {
images []image.Image images []image.Image
fieldSpecs []config.FieldSpec
} }
var _ Transformer = &imageTransformer{} var _ Transformer = &imageTransformer{}
// NewImageTransformer constructs an imageTransformer. // NewImageTransformer constructs an imageTransformer.
func NewImageTransformer(slice []image.Image) (Transformer, error) { func NewImageTransformer(slice []image.Image, fs []config.FieldSpec) (Transformer, error) {
return &imageTransformer{slice}, nil return &imageTransformer{slice, fs}, nil
} }
// Transform finds the matching images and replaces name, tag and/or digest // Transform finds the matching images and replaces name, tag and/or digest
@@ -58,9 +60,9 @@ func (pt *imageTransformer) Transform(resources resmap.ResMap) error {
finds matched ones and update the image name and tag name finds matched ones and update the image name and tag name
*/ */
func (pt *imageTransformer) findAndReplaceImage(obj map[string]interface{}) error { func (pt *imageTransformer) findAndReplaceImage(obj map[string]interface{}) error {
paths := []string{"containers", "initContainers"}
found := false found := false
for _, path := range paths { for _, fs := range pt.fieldSpecs {
path := fs.Path
_, found = obj[path] _, found = obj[path]
if found { if found {
err := pt.updateContainers(obj, path) err := pt.updateContainers(obj, path)