Skip to content

Commit

Permalink
Add builtin label transformer.
Browse files Browse the repository at this point in the history
  • Loading branch information
monopole committed May 20, 2019
1 parent 6ba6f30 commit 4590121
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 26 deletions.
2 changes: 1 addition & 1 deletion bin/pre-commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
5 changes: 3 additions & 2 deletions examples/chart.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ executable:

<!-- @installPlugin @helmtest -->
```
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/\
Expand Down Expand Up @@ -137,7 +137,8 @@ Expect something like:
> │   └── plugin
> │   └── someteam.example.com
> │   └── v1
> │   └── ChartInflator
> │   └── chartinflator
> │   └── ChartInflator
> └── prod
> └── kustomization.yaml
> ```
Expand Down
26 changes: 4 additions & 22 deletions pkg/target/kusttarget.go
Original file line number Diff line number Diff line change
@@ -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 (
Expand Down Expand Up @@ -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 {
Expand Down
20 changes: 19 additions & 1 deletion pkg/target/kusttarget_configplugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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) {
Expand Down
38 changes: 38 additions & 0 deletions plugin/builtin/LabelTransformer.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 39 additions & 0 deletions plugin/builtin/labeltransformer/LabelTransformer.go
Original file line number Diff line number Diff line change
@@ -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)
}
55 changes: 55 additions & 0 deletions plugin/builtin/labeltransformer/LabelTransformer_test.go
Original file line number Diff line number Diff line change
@@ -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
`)
}

0 comments on commit 4590121

Please sign in to comment.