Introduce stacked transformers.

This commit is contained in:
Jeffrey Regan
2019-06-07 15:58:18 -07:00
parent a79c888e0c
commit 6d309b52a5
4 changed files with 26 additions and 24 deletions

View File

@@ -100,6 +100,7 @@ func (l *Loader) absolutePluginPath(id resid.ResId) string {
return AbsolutePluginPath(l.pc, id) return AbsolutePluginPath(l.pc, id)
} }
// TODO: https://github.com/kubernetes-sigs/kustomize/issues/1164
func (l *Loader) loadAndConfigurePlugin( func (l *Loader) loadAndConfigurePlugin(
ldr ifc.Loader, res *resource.Resource) (c Configurable, err error) { ldr ifc.Loader, res *resource.Resource) (c Configurable, err error) {
if !l.pc.Enabled { if !l.pc.Enabled {

View File

@@ -29,21 +29,23 @@ spec:
`) `)
} }
func writeStringPrefixer(th *kusttest_test.KustTestHarness, path string) { func writeStringPrefixer(
th *kusttest_test.KustTestHarness, path, name string) {
th.WriteF(path, ` th.WriteF(path, `
apiVersion: someteam.example.com/v1 apiVersion: someteam.example.com/v1
kind: StringPrefixer kind: StringPrefixer
metadata: metadata:
name: apple name: `+name+`
`) `)
} }
func writeDatePrefixer(th *kusttest_test.KustTestHarness, path string) { func writeDatePrefixer(
th *kusttest_test.KustTestHarness, path, name string) {
th.WriteF(path, ` th.WriteF(path, `
apiVersion: someteam.example.com/v1 apiVersion: someteam.example.com/v1
kind: DatePrefixer kind: DatePrefixer
metadata: metadata:
name: irrelevant name: `+name+`
`) `)
} }
@@ -62,24 +64,27 @@ func TestOrderedTransformers(t *testing.T) {
resources: resources:
- deployment.yaml - deployment.yaml
transformers: transformers:
- stringPrefixer.yaml - peachPrefixer.yaml
# - datePrefixer.yaml - date1Prefixer.yaml
- applePrefixer.yaml
- date2Prefixer.yaml
`) `)
// TODO(monopole): assure ordering of loaded
// transformers and this will work - the trouble
// is we load into a map (ResMap), not a list.
writeDeployment(th, "/app/deployment.yaml") writeDeployment(th, "/app/deployment.yaml")
writeStringPrefixer(th, "/app/stringPrefixer.yaml") writeStringPrefixer(th, "/app/applePrefixer.yaml", "apple")
writeDatePrefixer(th, "/app/datePrefixer.yaml") writeStringPrefixer(th, "/app/peachPrefixer.yaml", "peach")
writeDatePrefixer(th, "/app/date1Prefixer.yaml", "date1")
writeDatePrefixer(th, "/app/date2Prefixer.yaml", "date2")
m, err := th.MakeKustTarget().MakeCustomizedResMap() m, err := th.MakeKustTarget().MakeCustomizedResMap()
if err != nil { if err != nil {
t.Fatalf("Err: %v", err) t.Fatalf("Err: %v", err)
} }
// TODO: Fix #1164; the value of the name: field below
// should be: 2018-05-11-peach-2018-05-11-apple-myDeployment
th.AssertActualEqualsExpected(m, ` th.AssertActualEqualsExpected(m, `
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: apple-myDeployment name: 2018-05-11-apple-2018-05-11-apple-myDeployment
spec: spec:
template: template:
metadata: metadata:
@@ -104,7 +109,7 @@ func TestPluginsNotEnabled(t *testing.T) {
transformers: transformers:
- stringPrefixer.yaml - stringPrefixer.yaml
`) `)
writeStringPrefixer(th, "/app/stringPrefixer.yaml") writeStringPrefixer(th, "/app/stringPrefixer.yaml", "apple")
_, err := th.MakeKustTarget().MakeCustomizedResMap() _, err := th.MakeKustTarget().MakeCustomizedResMap()
if err == nil { if err == nil {
@@ -202,8 +207,8 @@ resources:
transformers: transformers:
- datePrefixer.yaml - datePrefixer.yaml
`) `)
writeStringPrefixer(th, "/app/base/stringPrefixer.yaml") writeStringPrefixer(th, "/app/base/stringPrefixer.yaml", "apple")
writeDatePrefixer(th, "/app/base/datePrefixer.yaml") writeDatePrefixer(th, "/app/base/datePrefixer.yaml", "date")
th.WriteK("/app/overlay", ` th.WriteK("/app/overlay", `
resources: resources:

View File

@@ -2,9 +2,9 @@
package builtin package builtin
import ( import (
"sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/resmap" "sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/resource" "sigs.k8s.io/kustomize/pkg/resource"
"sigs.k8s.io/kustomize/pkg/transformers/config"
"sort" "sort"
) )
@@ -13,22 +13,18 @@ import (
// dependencies (like Namespace, StorageClass, etc.) // dependencies (like Namespace, StorageClass, etc.)
// first, and resources with a high number of dependencies // first, and resources with a high number of dependencies
// (like ValidatingWebhookConfiguration) last. // (like ValidatingWebhookConfiguration) last.
type PreferredOrderTransformerPlugin struct { type PreferredOrderTransformerPlugin struct{}
Prefix string `json:"prefix,omitempty" yaml:"prefix,omitempty"`
Suffix string `json:"suffix,omitempty" yaml:"suffix,omitempty"`
FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"`
}
func NewPreferredOrderTransformerPlugin() *PreferredOrderTransformerPlugin { func NewPreferredOrderTransformerPlugin() *PreferredOrderTransformerPlugin {
return &PreferredOrderTransformerPlugin{} return &PreferredOrderTransformerPlugin{}
} }
/* // Nothing needed for configuration.
func (p *PreferredOrderTransformerPlugin) Config( func (p *PreferredOrderTransformerPlugin) Config(
ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) {
return nil return nil
} }
*/
func (p *PreferredOrderTransformerPlugin) Transform(m resmap.ResMap) error { func (p *PreferredOrderTransformerPlugin) Transform(m resmap.ResMap) error {
resources := make([]*resource.Resource, m.Size()) resources := make([]*resource.Resource, m.Size())
ids := m.AllIds() ids := m.AllIds()