Add builtin label transformer.

This commit is contained in:
jregan
2019-05-19 17:59:56 -07:00
parent 6ba6f305cc
commit 45901219b7
7 changed files with 159 additions and 26 deletions

View File

@@ -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
}

View File

@@ -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/\
@@ -137,7 +137,8 @@ Expect something like:
> │   └── plugin
> │   └── someteam.example.com
> │   └── v1
> │   └── ChartInflator
> │   └── chartinflator
> │   └── ChartInflator
> └── prod
> └── kustomization.yaml
> ```

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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
`)
}