diff --git a/pkg/resmap/legacygeneratorargs.go b/pkg/resmap/legacygeneratorargs.go index 272b3946d..2178c1e50 100644 --- a/pkg/resmap/legacygeneratorargs.go +++ b/pkg/resmap/legacygeneratorargs.go @@ -1,6 +1,8 @@ package resmap import ( + "strings" + "sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/types" ) @@ -10,17 +12,26 @@ func GeneratorArgsFromKunstruct(k ifc.Kunstructured) ( result.Name = k.GetName() // TODO: validate behavior values. result.Behavior, err = k.GetFieldValue("behavior") - if err != nil { + if !isAcceptableError(err) { return } result.EnvSources, err = k.GetStringSlice("envFiles") - if err != nil { + if !isAcceptableError(err) { return } result.FileSources, err = k.GetStringSlice("valueFiles") - if err != nil { + if !isAcceptableError(err) { return } result.LiteralSources, err = k.GetStringSlice("literals") + if !isAcceptableError(err) { + return + } + err = nil return } + +func isAcceptableError(err error) bool { + return err == nil || + strings.HasPrefix(err.Error(), "no field named") +} diff --git a/plugin/builtin/ConfigMapGenerator.go b/plugin/builtin/ConfigMapGenerator.go new file mode 100644 index 000000000..5cd6b1f44 --- /dev/null +++ b/plugin/builtin/ConfigMapGenerator.go @@ -0,0 +1,32 @@ +// +build plugin + +package main + +import ( + "sigs.k8s.io/kustomize/pkg/ifc" + "sigs.k8s.io/kustomize/pkg/resmap" + "sigs.k8s.io/kustomize/pkg/types" +) + +type plugin struct { + ldr ifc.Loader + rf *resmap.Factory + options types.GeneratorOptions + args types.ConfigMapArgs +} + +var KustomizePlugin plugin + +func (p *plugin) Config( + ldr ifc.Loader, rf *resmap.Factory, k ifc.Kunstructured) (err error) { + p.ldr = ldr + p.rf = rf + p.args.GeneratorArgs, err = resmap.GeneratorArgsFromKunstruct(k) + return +} + +func (p *plugin) Generate() (resmap.ResMap, error) { + argsList := make([]types.ConfigMapArgs, 1) + argsList[0] = p.args + return p.rf.NewResMapFromConfigMapArgs(p.ldr, &p.options, argsList) +} diff --git a/plugin/builtin/ConfigMapGenerator_test.go b/plugin/builtin/ConfigMapGenerator_test.go new file mode 100644 index 000000000..989b48db3 --- /dev/null +++ b/plugin/builtin/ConfigMapGenerator_test.go @@ -0,0 +1,53 @@ +package builtin + +import ( + "testing" + + "sigs.k8s.io/kustomize/internal/plugintest" + "sigs.k8s.io/kustomize/k8sdeps/kv/plugin" + "sigs.k8s.io/kustomize/pkg/kusttest" + "sigs.k8s.io/kustomize/pkg/loader" +) + +func TestConfigMapGenerator(t *testing.T) { + tc := plugintest_test.NewPluginTestEnv(t).Set() + defer tc.Reset() + + tc.BuildGoPlugin( + "builtin", "", "ConfigMapGenerator") + + th := kusttest_test.NewKustTestHarnessFull( + t, "/app", loader.RestrictionRootOnly, plugin.ActivePluginConfig()) + + th.WriteF("/app/devops.env", ` +SERVICE_PORT=32 +`) + th.WriteF("/app/uxteam.env", ` +COLOR=red +`) + + rm := th.LoadAndRunGenerator(` +apiVersion: builtin +kind: ConfigMapGenerator +metadata: + name: myMap +envFiles: +- devops.env +- uxteam.env +literals: +- FRUIT=apple +- VEGETABLE=carrot +`) + + th.AssertActualEqualsExpected(rm, ` +apiVersion: v1 +data: + COLOR: red + FRUIT: apple + SERVICE_PORT: "32" + VEGETABLE: carrot +kind: ConfigMap +metadata: + name: myMap +`) +}