From 6d309b52a5d541a80cfcce914ffa8fbdf57853f9 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Fri, 7 Jun 2019 15:58:18 -0700 Subject: [PATCH] Introduce stacked transformers. --- pkg/plugins/loader.go | 1 + pkg/target/transformerplugin_test.go | 35 +++++++++++-------- plugin/builtin/PreferredOrderTransformer.go | 12 +++---- .../PreferredOrderTransformer.go | 2 +- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/pkg/plugins/loader.go b/pkg/plugins/loader.go index cb835d4c2..89a02e247 100644 --- a/pkg/plugins/loader.go +++ b/pkg/plugins/loader.go @@ -100,6 +100,7 @@ func (l *Loader) absolutePluginPath(id resid.ResId) string { return AbsolutePluginPath(l.pc, id) } +// TODO: https://github.com/kubernetes-sigs/kustomize/issues/1164 func (l *Loader) loadAndConfigurePlugin( ldr ifc.Loader, res *resource.Resource) (c Configurable, err error) { if !l.pc.Enabled { diff --git a/pkg/target/transformerplugin_test.go b/pkg/target/transformerplugin_test.go index 520f846b6..87ffb88fd 100644 --- a/pkg/target/transformerplugin_test.go +++ b/pkg/target/transformerplugin_test.go @@ -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, ` apiVersion: someteam.example.com/v1 kind: StringPrefixer 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, ` apiVersion: someteam.example.com/v1 kind: DatePrefixer metadata: - name: irrelevant + name: `+name+` `) } @@ -62,24 +64,27 @@ func TestOrderedTransformers(t *testing.T) { resources: - deployment.yaml transformers: -- stringPrefixer.yaml -# - datePrefixer.yaml +- peachPrefixer.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") - writeStringPrefixer(th, "/app/stringPrefixer.yaml") - writeDatePrefixer(th, "/app/datePrefixer.yaml") + writeStringPrefixer(th, "/app/applePrefixer.yaml", "apple") + writeStringPrefixer(th, "/app/peachPrefixer.yaml", "peach") + writeDatePrefixer(th, "/app/date1Prefixer.yaml", "date1") + writeDatePrefixer(th, "/app/date2Prefixer.yaml", "date2") m, err := th.MakeKustTarget().MakeCustomizedResMap() if err != nil { 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, ` apiVersion: apps/v1 kind: Deployment metadata: - name: apple-myDeployment + name: 2018-05-11-apple-2018-05-11-apple-myDeployment spec: template: metadata: @@ -104,7 +109,7 @@ func TestPluginsNotEnabled(t *testing.T) { transformers: - stringPrefixer.yaml `) - writeStringPrefixer(th, "/app/stringPrefixer.yaml") + writeStringPrefixer(th, "/app/stringPrefixer.yaml", "apple") _, err := th.MakeKustTarget().MakeCustomizedResMap() if err == nil { @@ -202,8 +207,8 @@ resources: transformers: - datePrefixer.yaml `) - writeStringPrefixer(th, "/app/base/stringPrefixer.yaml") - writeDatePrefixer(th, "/app/base/datePrefixer.yaml") + writeStringPrefixer(th, "/app/base/stringPrefixer.yaml", "apple") + writeDatePrefixer(th, "/app/base/datePrefixer.yaml", "date") th.WriteK("/app/overlay", ` resources: diff --git a/plugin/builtin/PreferredOrderTransformer.go b/plugin/builtin/PreferredOrderTransformer.go index 670959d93..d6e783d6f 100644 --- a/plugin/builtin/PreferredOrderTransformer.go +++ b/plugin/builtin/PreferredOrderTransformer.go @@ -2,9 +2,9 @@ package builtin import ( + "sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/resmap" "sigs.k8s.io/kustomize/pkg/resource" - "sigs.k8s.io/kustomize/pkg/transformers/config" "sort" ) @@ -13,22 +13,18 @@ import ( // dependencies (like Namespace, StorageClass, etc.) // first, and resources with a high number of dependencies // (like ValidatingWebhookConfiguration) last. -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"` -} +type PreferredOrderTransformerPlugin struct{} func NewPreferredOrderTransformerPlugin() *PreferredOrderTransformerPlugin { return &PreferredOrderTransformerPlugin{} } -/* +// Nothing needed for configuration. func (p *PreferredOrderTransformerPlugin) Config( ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { return nil } -*/ + func (p *PreferredOrderTransformerPlugin) Transform(m resmap.ResMap) error { resources := make([]*resource.Resource, m.Size()) ids := m.AllIds() diff --git a/plugin/builtin/preferredordertransformer/PreferredOrderTransformer.go b/plugin/builtin/preferredordertransformer/PreferredOrderTransformer.go index 72eea3da2..4cb807ddc 100644 --- a/plugin/builtin/preferredordertransformer/PreferredOrderTransformer.go +++ b/plugin/builtin/preferredordertransformer/PreferredOrderTransformer.go @@ -16,7 +16,7 @@ import ( // dependencies (like Namespace, StorageClass, etc.) // first, and resources with a high number of dependencies // (like ValidatingWebhookConfiguration) last. -type plugin struct {} +type plugin struct{} var KustomizePlugin plugin