From aafc23a6150826880d492ca4f62b0b73e2683514 Mon Sep 17 00:00:00 2001 From: jregan Date: Sun, 19 May 2019 18:36:57 -0700 Subject: [PATCH] Add annotation transformer. --- pkg/target/kusttarget.go | 10 +--- pkg/target/kusttarget_configplugin.go | 20 ++++++- plugin/builtin/AnnotationsTransformer.go | 38 +++++++++++++ .../AnnotationsTransformer.go | 39 +++++++++++++ .../AnnotationsTransformer_test.go | 55 +++++++++++++++++++ 5 files changed, 153 insertions(+), 9 deletions(-) create mode 100644 plugin/builtin/AnnotationsTransformer.go create mode 100644 plugin/builtin/annotationstransformer/AnnotationsTransformer.go create mode 100644 plugin/builtin/annotationstransformer/AnnotationsTransformer_test.go diff --git a/pkg/target/kusttarget.go b/pkg/target/kusttarget.go index bea4db95a..ad339b4ed 100644 --- a/pkg/target/kusttarget.go +++ b/pkg/target/kusttarget.go @@ -343,23 +343,17 @@ func (kt *KustTarget) newTransformer( r = append(r, t) r = append(r, transformers.NewNamespaceTransformer( string(kt.kustomization.Namespace), tConfig.NameSpace)) - t, err = transformers.NewAnnotationsMapTransformer( - kt.kustomization.CommonAnnotations, tConfig.CommonAnnotations) + lts, err := kt.configureBuiltinTransformers(tConfig) if err != nil { return nil, err } - r = append(r, t) + r = append(r, lts...) t, err = patchtransformer.NewPatchJson6902Factory(kt.ldr). MakePatchJson6902Transformer(kt.kustomization.PatchesJson6902) if err != nil { return nil, err } r = append(r, t) - lts, err := kt.configureBuiltinTransformers(tConfig) - if err != nil { - return nil, err - } - r = append(r, lts...) tp, err := kt.loadTransformerPlugins() if err != nil { return nil, err diff --git a/pkg/target/kusttarget_configplugin.go b/pkg/target/kusttarget_configplugin.go index ced311d2d..ff0a19584 100644 --- a/pkg/target/kusttarget_configplugin.go +++ b/pkg/target/kusttarget_configplugin.go @@ -63,11 +63,11 @@ func (kt *KustTarget) configureBuiltinTransformers( // with tests: // patch SMP // patch JSON - // annos configurators := []transformerConfigurator{ kt.configureBuiltinNameTransformer, kt.configureBuiltinImageTagTransformer, kt.configureBuiltinLabelTransformer, + kt.configureBuiltinAnnotationsTransformer, } var result []transformers.Transformer for _, f := range configurators { @@ -140,6 +140,24 @@ func (kt *KustTarget) configureBuiltinLabelTransformer( return } +func (kt *KustTarget) configureBuiltinAnnotationsTransformer( + tConfig *config.TransformerConfig) ( + result []transformers.Transformer, err error) { + var c struct { + Annotations map[string]string + FieldSpecs []config.FieldSpec + } + c.Annotations = kt.kustomization.CommonAnnotations + c.FieldSpecs = tConfig.CommonAnnotations + p := builtin.NewAnnotationsTransformerPlugin() + err = kt.configureBuiltinPlugin(p, c, "annotations") + if err != nil { + return nil, err + } + result = append(result, p) + return +} + func (kt *KustTarget) configureBuiltinNameTransformer( tConfig *config.TransformerConfig) ( result []transformers.Transformer, err error) { diff --git a/plugin/builtin/AnnotationsTransformer.go b/plugin/builtin/AnnotationsTransformer.go new file mode 100644 index 000000000..f0b0c4185 --- /dev/null +++ b/plugin/builtin/AnnotationsTransformer.go @@ -0,0 +1,38 @@ +// Code generated by pluginator on AnnotationsTransformer; DO NOT EDIT. +package builtin + +import ( + "sigs.k8s.io/kustomize/pkg/ifc" + "sigs.k8s.io/kustomize/pkg/resmap" + "sigs.k8s.io/kustomize/pkg/transformers" + "sigs.k8s.io/kustomize/pkg/transformers/config" + "sigs.k8s.io/yaml" +) + +// Add the given annotations to the given field specifications. +type AnnotationsTransformerPlugin struct { + Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"` + FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` +} + +func NewAnnotationsTransformerPlugin() *AnnotationsTransformerPlugin { + return &AnnotationsTransformerPlugin{} +} + +func (p *AnnotationsTransformerPlugin) Config( + ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { + p.Annotations = nil + p.FieldSpecs = nil + return yaml.Unmarshal(c, p) +} + +func (p *AnnotationsTransformerPlugin) Transform(m resmap.ResMap) error { + t, err := transformers.NewMapTransformer( + p.FieldSpecs, + p.Annotations, + ) + if err != nil { + return err + } + return t.Transform(m) +} diff --git a/plugin/builtin/annotationstransformer/AnnotationsTransformer.go b/plugin/builtin/annotationstransformer/AnnotationsTransformer.go new file mode 100644 index 000000000..03f28acda --- /dev/null +++ b/plugin/builtin/annotationstransformer/AnnotationsTransformer.go @@ -0,0 +1,39 @@ +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +//go:generate go run sigs.k8s.io/kustomize/plugin/pluginator +package main + +import ( + "sigs.k8s.io/kustomize/pkg/ifc" + "sigs.k8s.io/kustomize/pkg/resmap" + "sigs.k8s.io/kustomize/pkg/transformers" + "sigs.k8s.io/kustomize/pkg/transformers/config" + "sigs.k8s.io/yaml" +) + +// Add the given annotations to the given field specifications. +type plugin struct { + Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"` + FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` +} + +var KustomizePlugin plugin + +func (p *plugin) Config( + ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { + p.Annotations = nil + p.FieldSpecs = nil + return yaml.Unmarshal(c, p) +} + +func (p *plugin) Transform(m resmap.ResMap) error { + t, err := transformers.NewMapTransformer( + p.FieldSpecs, + p.Annotations, + ) + if err != nil { + return err + } + return t.Transform(m) +} diff --git a/plugin/builtin/annotationstransformer/AnnotationsTransformer_test.go b/plugin/builtin/annotationstransformer/AnnotationsTransformer_test.go new file mode 100644 index 000000000..156ff7fcf --- /dev/null +++ b/plugin/builtin/annotationstransformer/AnnotationsTransformer_test.go @@ -0,0 +1,55 @@ +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package main_test + +import ( + "testing" + + "sigs.k8s.io/kustomize/pkg/kusttest" + "sigs.k8s.io/kustomize/plugin" +) + +func TestAnnotationsTransformer(t *testing.T) { + tc := plugin.NewEnvForTest(t).Set() + defer tc.Reset() + + tc.BuildGoPlugin( + "builtin", "", "AnnotationsTransformer") + + th := kusttest_test.NewKustTestPluginHarness(t, "/app") + + rm := th.LoadAndRunTransformer(` +apiVersion: builtin +kind: AnnotationsTransformer +metadata: + name: notImportantHere +annotations: + app: myApp + greeting/morning: a string with blanks +fieldSpecs: + - path: metadata/annotations + create: true +`, ` +apiVersion: v1 +kind: Service +metadata: + name: myService +spec: + ports: + - port: 7002 +`) + + th.AssertActualEqualsExpected(rm, ` +apiVersion: v1 +kind: Service +metadata: + annotations: + app: myApp + greeting/morning: a string with blanks + name: myService +spec: + ports: + - port: 7002 +`) +}