diff --git a/pkg/kinflate/util/labelsandannotations.go b/pkg/kinflate/util/labelsandannotations.go index 3f8768565..c15457315 100644 --- a/pkg/kinflate/util/labelsandannotations.go +++ b/pkg/kinflate/util/labelsandannotations.go @@ -17,41 +17,45 @@ limitations under the License. package util import ( + "errors" "fmt" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ) -// MapTransformationOptions contains a map string->string and path configs +// MapTransformer contains a map string->string and path configs // The map will be applied to the fields specified in path configs. -type MapTransformationOptions struct { +type MapTransformer struct { m map[string]string pathConfigs []PathConfig } -var _ Transformer = &MapTransformationOptions{} +var _ Transformer = &MapTransformer{} -// CompleteForLabels fills up the MapTransformationOptions for labels transformation. -func (o *MapTransformationOptions) CompleteForLabels(m map[string]string, pathConfigs []PathConfig) { - o.m = m - if pathConfigs == nil { - pathConfigs = DefaultLabelsPathConfigs - } - o.pathConfigs = pathConfigs +// NewDefaultingLabelsMapTransformer construct a MapTransformer with defaultLabelsPathConfigs. +func NewDefaultingLabelsMapTransformer(m map[string]string) (Transformer, error) { + return NewMapTransformer(defaultLabelsPathConfigs, m) } -// CompleteForAnnotations fills up the MapTransformationOptions for annotations transformation. -func (o *MapTransformationOptions) CompleteForAnnotations(m map[string]string, pathConfigs []PathConfig) { - o.m = m - if pathConfigs == nil { - pathConfigs = DefaultAnnotationsPathConfigs - } - o.pathConfigs = pathConfigs +// NewDefaultingAnnotationsMapTransformer construct a MapTransformer with defaultAnnotationsPathConfigs. +func NewDefaultingAnnotationsMapTransformer(m map[string]string) (Transformer, error) { + return NewMapTransformer(defaultAnnotationsPathConfigs, m) } -// Transform apply each pair in the MapTransformationOptions to the -// fields specified in MapTransformationOptions. -func (o *MapTransformationOptions) Transform(m map[GroupVersionKindName]*unstructured.Unstructured) error { +// NewMapTransformer construct a MapTransformer. +func NewMapTransformer(pc []PathConfig, m map[string]string) (Transformer, error) { + if m == nil { + return nil, errors.New("map is not expected to be nil") + } + if pc == nil { + return nil, errors.New("pathConfigs is not expected to be nil") + } + return &MapTransformer{pathConfigs: pc, m: m}, nil +} + +// Transform apply each pair in the MapTransformer to the +// fields specified in MapTransformer. +func (o *MapTransformer) Transform(m map[GroupVersionKindName]*unstructured.Unstructured) error { for gvkn := range m { obj := m[gvkn] objMap := obj.UnstructuredContent() @@ -68,7 +72,7 @@ func (o *MapTransformationOptions) Transform(m map[GroupVersionKindName]*unstruc return nil } -func (o *MapTransformationOptions) addMap(in interface{}) (interface{}, error) { +func (o *MapTransformer) addMap(in interface{}) (interface{}, error) { m, ok := in.(map[string]interface{}) if !ok { return nil, fmt.Errorf("%#v is expectd to be %T", in, m) diff --git a/pkg/kinflate/util/labelsandannotations_test.go b/pkg/kinflate/util/labelsandannotations_test.go index 13bb71fd5..a3de8cf0e 100644 --- a/pkg/kinflate/util/labelsandannotations_test.go +++ b/pkg/kinflate/util/labelsandannotations_test.go @@ -24,16 +24,6 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) -var labelsOps = MapTransformationOptions{ - m: map[string]string{"label-key1": "label-value1", "label-key2": "label-value2"}, - pathConfigs: DefaultLabelsPathConfigs, -} - -var annotationsOps = MapTransformationOptions{ - m: map[string]string{"anno-key1": "anno-value1", "anno-key2": "anno-value2"}, - pathConfigs: DefaultAnnotationsPathConfigs, -} - func makeConfigmap() *unstructured.Unstructured { return &unstructured.Unstructured{ Object: map[string]interface{}{ @@ -218,7 +208,8 @@ func makeLabeledMap() map[GroupVersionKindName]*unstructured.Unstructured { func TestLabelsRun(t *testing.T) { m := makeTestMap() - err := labelsOps.Transform(m) + lt, err := NewDefaultingLabelsMapTransformer(map[string]string{"label-key1": "label-value1", "label-key2": "label-value2"}) + err = lt.Transform(m) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -326,7 +317,8 @@ func makeAnnotatedMap() map[GroupVersionKindName]*unstructured.Unstructured { func TestAnnotationsRun(t *testing.T) { m := makeTestMap() - err := annotationsOps.Transform(m) + at, err := NewDefaultingAnnotationsMapTransformer(map[string]string{"anno-key1": "anno-value1", "anno-key2": "anno-value2"}) + err = at.Transform(m) if err != nil { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/kinflate/util/labelsandannotationsconfig.go b/pkg/kinflate/util/labelsandannotationsconfig.go index 79aa621f3..0a0b97566 100644 --- a/pkg/kinflate/util/labelsandannotationsconfig.go +++ b/pkg/kinflate/util/labelsandannotationsconfig.go @@ -20,9 +20,9 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) -// DefaultLabelsPathConfigs is the default configuration for mutating labels and +// defaultLabelsPathConfigs is the default configuration for mutating labels and // selector fields for native k8s APIs. -var DefaultLabelsPathConfigs = []PathConfig{ +var defaultLabelsPathConfigs = []PathConfig{ { Path: []string{"metadata", "labels"}, CreateIfNotPresent: true, @@ -109,9 +109,9 @@ var DefaultLabelsPathConfigs = []PathConfig{ }, } -// DefaultLabelsPathConfigs is the default configuration for mutating annotations +// defaultLabelsPathConfigs is the default configuration for mutating annotations // fields for native k8s APIs. -var DefaultAnnotationsPathConfigs = []PathConfig{ +var defaultAnnotationsPathConfigs = []PathConfig{ { Path: []string{"metadata", "annotations"}, CreateIfNotPresent: true,