Simplify plugin loader code.

* use one place to build plugin file names,
 * use one loader instance,
 * test for plugin enabled flag in just one place to
   avoid errors and reduce if statements,
 * don't return private objects,
 * factor goplugin loading to a method,
 * fix a related test that was commented out.
This commit is contained in:
jregan
2019-04-21 16:12:55 -07:00
committed by Jeffrey Regan
parent c9bf70fd4b
commit 76a3179868
13 changed files with 169 additions and 154 deletions

View File

@@ -44,7 +44,7 @@ type KustTarget struct {
ldr ifc.Loader
rFactory *resmap.Factory
tFactory transformer.Factory
pluginConfig *types.PluginConfig
pLdr *plugins.Loader
}
// NewKustTarget returns a new instance of KustTarget primed with a Loader.
@@ -52,7 +52,7 @@ func NewKustTarget(
ldr ifc.Loader,
rFactory *resmap.Factory,
tFactory transformer.Factory,
pc *types.PluginConfig) (*KustTarget, error) {
pLdr *plugins.Loader) (*KustTarget, error) {
content, err := loadKustFile(ldr)
if err != nil {
return nil, err
@@ -74,7 +74,7 @@ func NewKustTarget(
ldr: ldr,
rFactory: rFactory,
tFactory: tFactory,
pluginConfig: pc,
pLdr: pLdr,
}, nil
}
@@ -240,11 +240,9 @@ func (kt *KustTarget) AccumulateTarget() (
return nil, errors.Wrap(
err, "merging legacy configMaps and secrets")
}
if kt.pluginConfig.GoEnabled {
err := kt.generateFromPlugins(ra)
if err != nil {
return nil, err
}
err = kt.generateFromPlugins(ra)
if err != nil {
return nil, err
}
patches, err := kt.rFactory.RF().SliceFromPatches(
kt.ldr, kt.kustomization.PatchesStrategicMerge)
@@ -328,7 +326,7 @@ func (kt *KustTarget) accumulateDirectory(
ra *accumulator.ResAccumulator, ldr ifc.Loader, path string) error {
defer ldr.Cleanup()
subKt, err := NewKustTarget(
ldr, kt.rFactory, kt.tFactory, kt.pluginConfig)
ldr, kt.rFactory, kt.tFactory, kt.pLdr)
if err != nil {
return errors.Wrapf(err, "couldn't make target for path '%s'", path)
}
@@ -403,14 +401,11 @@ func (kt *KustTarget) newTransformer(
return nil, err
}
r = append(r, t)
if kt.pluginConfig.GoEnabled {
tp, err := kt.loadTransformerPlugins()
if err != nil {
return nil, err
}
r = append(r, tp...)
tp, err := kt.loadTransformerPlugins()
if err != nil {
return nil, err
}
r = append(r, tp...)
return transformers.NewMultiTransformer(r), nil
}
@@ -420,8 +415,7 @@ func (kt *KustTarget) loadTransformerPlugins() ([]transformers.Transformer, erro
if err != nil {
return nil, err
}
return plugins.NewTransformerLoader(
kt.pluginConfig, kt.ldr, kt.rFactory).Load(ra.ResMap())
return kt.pLdr.LoadTransformers(kt.ldr, ra.ResMap())
}
func (kt *KustTarget) loadGeneratorPlugins() ([]transformers.Generator, error) {
@@ -430,6 +424,5 @@ func (kt *KustTarget) loadGeneratorPlugins() ([]transformers.Generator, error) {
if err != nil {
return nil, err
}
return plugins.NewGeneratorLoader(
kt.pluginConfig, kt.ldr, kt.rFactory).Load(ra.ResMap())
return kt.pLdr.LoadGenerators(kt.ldr, ra.ResMap())
}

View File

@@ -23,7 +23,6 @@ import (
"strings"
"testing"
"sigs.k8s.io/kustomize/k8sdeps/kv/plugin"
"sigs.k8s.io/kustomize/pkg/gvk"
"sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/internal/loadertest"
@@ -206,8 +205,7 @@ func TestResources(t *testing.T) {
func TestKustomizationNotFound(t *testing.T) {
_, err := NewKustTarget(
loadertest.NewFakeLoader("/foo"),
nil, nil, plugin.DefaultPluginConfig())
loadertest.NewFakeLoader("/foo"), nil, nil, nil)
if err == nil {
t.Fatalf("expected an error")
}

View File

@@ -30,6 +30,7 @@ import (
"sigs.k8s.io/kustomize/pkg/internal/loadertest"
"sigs.k8s.io/kustomize/pkg/loader"
"sigs.k8s.io/kustomize/pkg/pgmconfig"
"sigs.k8s.io/kustomize/pkg/plugins"
"sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/resource"
. "sigs.k8s.io/kustomize/pkg/target"
@@ -41,7 +42,7 @@ type KustTestHarness struct {
t *testing.T
rf *resmap.Factory
ldr loadertest.FakeLoader
pc *types.PluginConfig
pl *plugins.Loader
}
func NewKustTestHarness(t *testing.T, path string) *KustTestHarness {
@@ -58,18 +59,19 @@ func NewKustTestHarnessWithPluginConfig(
func NewKustTestHarnessFull(
t *testing.T, path string,
lr loader.LoadRestrictorFunc, pc *types.PluginConfig) *KustTestHarness {
rf := resmap.NewFactory(resource.NewFactory(
kunstruct.NewKunstructuredFactoryWithGeneratorArgs(
&types.GeneratorMetaArgs{PluginConfig: pc})))
return &KustTestHarness{
t: t,
rf: resmap.NewFactory(resource.NewFactory(
kunstruct.NewKunstructuredFactoryWithGeneratorArgs(
&types.GeneratorMetaArgs{PluginConfig: pc}))),
t: t,
rf: rf,
ldr: loadertest.NewFakeLoaderWithRestrictor(lr, path),
pc: pc}
pl: plugins.NewLoader(pc, rf)}
}
func (th *KustTestHarness) makeKustTarget() *KustTarget {
kt, err := NewKustTarget(
th.ldr, th.rf, transformer.NewFactoryImpl(), th.pc)
th.ldr, th.rf, transformer.NewFactoryImpl(), th.pl)
if err != nil {
th.t.Fatalf("Unexpected construction error %v", err)
}

View File

@@ -42,8 +42,7 @@ func writeStringPrefixer(th *KustTestHarness, path string) {
apiVersion: someteam.example.com/v1
kind: StringPrefixer
metadata:
name: myStringPrefixer
prefix: apple-
name: apple
`)
}
@@ -52,7 +51,7 @@ func writeDatePrefixer(th *KustTestHarness, path string) {
apiVersion: someteam.example.com/v1
kind: DatePrefixer
metadata:
name: myDatePrefixer
name: irrelevant
`)
}
@@ -73,7 +72,11 @@ resources:
- deployment.yaml
transformers:
- stringPrefixer.yaml
# - datePrefixer.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")
@@ -144,7 +147,16 @@ metadata:
`)
}
func xTestTransformedTransformers(t *testing.T) {
func TestTransformedTransformers(t *testing.T) {
tc := NewTestEnvController(t).Set()
defer tc.Reset()
tc.BuildGoPlugin(
"someteam.example.com", "v1", "StringPrefixer")
tc.BuildGoPlugin(
"someteam.example.com", "v1", "DatePrefixer")
th := NewKustTestHarnessWithPluginConfig(
t, "/app/overlay", plugin.ActivePluginConfig())
@@ -170,6 +182,18 @@ transformers:
t.Fatalf("Err: %v", err)
}
th.assertActualEqualsExpected(m, `
HEY
apiVersion: apps/v1
kind: Deployment
metadata:
name: 2018-05-11-apple-myDeployment
spec:
template:
metadata:
labels:
backend: awesome
spec:
containers:
- image: whatever
name: whatever
`)
}