From 45901219b72fd992043b71b48cd09fcf6510e379 Mon Sep 17 00:00:00 2001 From: jregan Date: Sun, 19 May 2019 17:59:56 -0700 Subject: [PATCH] Add builtin label transformer. --- bin/pre-commit.sh | 2 +- examples/chart.md | 5 +- pkg/target/kusttarget.go | 26 ++------- pkg/target/kusttarget_configplugin.go | 20 ++++++- plugin/builtin/LabelTransformer.go | 38 +++++++++++++ .../labeltransformer/LabelTransformer.go | 39 +++++++++++++ .../labeltransformer/LabelTransformer_test.go | 55 +++++++++++++++++++ 7 files changed, 159 insertions(+), 26 deletions(-) create mode 100644 plugin/builtin/LabelTransformer.go create mode 100644 plugin/builtin/labeltransformer/LabelTransformer.go create mode 100644 plugin/builtin/labeltransformer/LabelTransformer_test.go diff --git a/bin/pre-commit.sh b/bin/pre-commit.sh index dd71d8f9e..67d1df014 100755 --- a/bin/pre-commit.sh +++ b/bin/pre-commit.sh @@ -37,7 +37,7 @@ function testGoTest { function testNoTravisGoTest { go test -v sigs.k8s.io/kustomize/pkg/target \ -run TestChartInflatorPlugin -tags=notravis - go test -v sigs.k8s.io/kustomize/plugin/... \ + go test -v sigs.k8s.io/kustomize/plugin/someteam.example.com/v1/chartinflator/... \ -run TestChartInflator -tags=notravis mdrip --mode test --label helmtest README.md ./examples/chart.md } diff --git a/examples/chart.md b/examples/chart.md index 97aa00f24..99dd25562 100644 --- a/examples/chart.md +++ b/examples/chart.md @@ -108,7 +108,7 @@ executable: ``` -plugin=plugin/someteam.example.com/v1/ChartInflator +plugin=plugin/someteam.example.com/v1/chartinflator/ChartInflator curl -s --create-dirs -o \ "$DEMO_HOME/kustomize/$plugin" \ "https://raw.githubusercontent.com/\ @@ -137,7 +137,8 @@ Expect something like: > │   └── plugin > │   └── someteam.example.com > │   └── v1 -> │   └── ChartInflator +> │   └── chartinflator +> │   └── ChartInflator > └── prod > └── kustomization.yaml > ``` diff --git a/pkg/target/kusttarget.go b/pkg/target/kusttarget.go index 13c8e0ea4..bea4db95a 100644 --- a/pkg/target/kusttarget.go +++ b/pkg/target/kusttarget.go @@ -1,20 +1,8 @@ -/* -Copyright 2018 The Kubernetes Authors. +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 -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 target implements state for the set of all resources to customize. +// Package target implements state for the set of all +// resources to customize. package target import ( @@ -355,12 +343,6 @@ func (kt *KustTarget) newTransformer( r = append(r, t) r = append(r, transformers.NewNamespaceTransformer( string(kt.kustomization.Namespace), tConfig.NameSpace)) - t, err = transformers.NewLabelsMapTransformer( - kt.kustomization.CommonLabels, tConfig.CommonLabels) - if err != nil { - return nil, err - } - r = append(r, t) t, err = transformers.NewAnnotationsMapTransformer( kt.kustomization.CommonAnnotations, tConfig.CommonAnnotations) if err != nil { diff --git a/pkg/target/kusttarget_configplugin.go b/pkg/target/kusttarget_configplugin.go index 874b57db4..ced311d2d 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 - // labels // annos configurators := []transformerConfigurator{ kt.configureBuiltinNameTransformer, kt.configureBuiltinImageTagTransformer, + kt.configureBuiltinLabelTransformer, } var result []transformers.Transformer for _, f := range configurators { @@ -122,6 +122,24 @@ func (kt *KustTarget) configureBuiltinConfigMapGenerator() ( return } +func (kt *KustTarget) configureBuiltinLabelTransformer( + tConfig *config.TransformerConfig) ( + result []transformers.Transformer, err error) { + var c struct { + Labels map[string]string + FieldSpecs []config.FieldSpec + } + c.Labels = kt.kustomization.CommonLabels + c.FieldSpecs = tConfig.CommonLabels + p := builtin.NewLabelTransformerPlugin() + err = kt.configureBuiltinPlugin(p, c, "label") + 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/LabelTransformer.go b/plugin/builtin/LabelTransformer.go new file mode 100644 index 000000000..7868e9fdd --- /dev/null +++ b/plugin/builtin/LabelTransformer.go @@ -0,0 +1,38 @@ +// Code generated by pluginator on LabelTransformer; 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 labels to the given field specifications. +type LabelTransformerPlugin struct { + Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"` + FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` +} + +func NewLabelTransformerPlugin() *LabelTransformerPlugin { + return &LabelTransformerPlugin{} +} + +func (p *LabelTransformerPlugin) Config( + ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { + p.Labels = nil + p.FieldSpecs = nil + return yaml.Unmarshal(c, p) +} + +func (p *LabelTransformerPlugin) Transform(m resmap.ResMap) error { + t, err := transformers.NewMapTransformer( + p.FieldSpecs, + p.Labels, + ) + if err != nil { + return err + } + return t.Transform(m) +} diff --git a/plugin/builtin/labeltransformer/LabelTransformer.go b/plugin/builtin/labeltransformer/LabelTransformer.go new file mode 100644 index 000000000..60e469842 --- /dev/null +++ b/plugin/builtin/labeltransformer/LabelTransformer.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 labels to the given field specifications. +type plugin struct { + Labels map[string]string `json:"labels,omitempty" yaml:"labels,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.Labels = nil + p.FieldSpecs = nil + return yaml.Unmarshal(c, p) +} + +func (p *plugin) Transform(m resmap.ResMap) error { + t, err := transformers.NewMapTransformer( + p.FieldSpecs, + p.Labels, + ) + if err != nil { + return err + } + return t.Transform(m) +} diff --git a/plugin/builtin/labeltransformer/LabelTransformer_test.go b/plugin/builtin/labeltransformer/LabelTransformer_test.go new file mode 100644 index 000000000..46339cf16 --- /dev/null +++ b/plugin/builtin/labeltransformer/LabelTransformer_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 TestLabelTransformer(t *testing.T) { + tc := plugin.NewEnvForTest(t).Set() + defer tc.Reset() + + tc.BuildGoPlugin( + "builtin", "", "LabelTransformer") + + th := kusttest_test.NewKustTestPluginHarness(t, "/app") + + rm := th.LoadAndRunTransformer(` +apiVersion: builtin +kind: LabelTransformer +metadata: + name: notImportantHere +labels: + app: myApp + env: production +fieldSpecs: + - path: metadata/labels + create: true +`, ` +apiVersion: v1 +kind: Service +metadata: + name: myService +spec: + ports: + - port: 7002 +`) + + th.AssertActualEqualsExpected(rm, ` +apiVersion: v1 +kind: Service +metadata: + labels: + app: myApp + env: production + name: myService +spec: + ports: + - port: 7002 +`) +}