Merge pull request #879 from monopole/removeTheSet

Secret/configmap factory cleanup.
This commit is contained in:
Jeff Regan
2019-03-15 10:17:29 -07:00
committed by GitHub
14 changed files with 158 additions and 157 deletions

View File

@@ -22,10 +22,53 @@ import (
"strings" "strings"
"github.com/pkg/errors" "github.com/pkg/errors"
"k8s.io/apimachinery/pkg/util/validation"
"sigs.k8s.io/kustomize/k8sdeps/kv" "sigs.k8s.io/kustomize/k8sdeps/kv"
"sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/types"
) )
// baseFactory holds code shared by Factory and SecretFactory.
type baseFactory struct {
ldr ifc.Loader
options *types.GeneratorOptions
}
func (bf baseFactory) loadKvPairs(
args types.GeneratorArgs) (all []kv.Pair, err error) {
pairs, err := bf.keyValuesFromEnvFile(args.EnvSource)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"env source file: %s",
args.EnvSource))
}
all = append(all, pairs...)
pairs, err = keyValuesFromLiteralSources(args.LiteralSources)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"literal sources %v", args.LiteralSources))
}
all = append(all, pairs...)
pairs, err = bf.keyValuesFromFileSources(args.FileSources)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"file sources: %v", args.FileSources))
}
return append(all, pairs...), nil
}
const keyExistsErrorMsg = "cannot add key %s, another key by that name already exists: %v"
func errIfInvalidKey(keyName string) error {
if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 {
return fmt.Errorf("%q is not a valid key name: %s",
keyName, strings.Join(errs, ";"))
}
return nil
}
func keyValuesFromLiteralSources(sources []string) ([]kv.Pair, error) { func keyValuesFromLiteralSources(sources []string) ([]kv.Pair, error) {
var kvs []kv.Pair var kvs []kv.Pair
for _, s := range sources { for _, s := range sources {
@@ -38,14 +81,14 @@ func keyValuesFromLiteralSources(sources []string) ([]kv.Pair, error) {
return kvs, nil return kvs, nil
} }
func keyValuesFromFileSources(ldr ifc.Loader, sources []string) ([]kv.Pair, error) { func (bf baseFactory) keyValuesFromFileSources(sources []string) ([]kv.Pair, error) {
var kvs []kv.Pair var kvs []kv.Pair
for _, s := range sources { for _, s := range sources {
k, fPath, err := parseFileSource(s) k, fPath, err := parseFileSource(s)
if err != nil { if err != nil {
return nil, err return nil, err
} }
content, err := ldr.Load(fPath) content, err := bf.ldr.Load(fPath)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -54,11 +97,11 @@ func keyValuesFromFileSources(ldr ifc.Loader, sources []string) ([]kv.Pair, erro
return kvs, nil return kvs, nil
} }
func keyValuesFromEnvFile(l ifc.Loader, path string) ([]kv.Pair, error) { func (bf baseFactory) keyValuesFromEnvFile(path string) ([]kv.Pair, error) {
if path == "" { if path == "" {
return nil, nil return nil, nil
} }
content, err := l.Load(path) content, err := bf.ldr.Load(path)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -45,8 +45,9 @@ func TestKeyValuesFromFileSources(t *testing.T) {
fSys := fs.MakeFakeFS() fSys := fs.MakeFakeFS()
fSys.WriteFile("/files/app-init.ini", []byte("FOO=bar")) fSys.WriteFile("/files/app-init.ini", []byte("FOO=bar"))
bf := baseFactory{loader.NewFileLoaderAtRoot(fSys), nil}
for _, tc := range tests { for _, tc := range tests {
kvs, err := keyValuesFromFileSources(loader.NewFileLoaderAtRoot(fSys), tc.sources) kvs, err := bf.keyValuesFromFileSources(tc.sources)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }

View File

@@ -19,29 +19,26 @@ package configmapandsecret
import ( import (
"fmt" "fmt"
"strings"
"unicode/utf8" "unicode/utf8"
"github.com/pkg/errors"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/validation"
"sigs.k8s.io/kustomize/k8sdeps/kv"
"sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/types" "sigs.k8s.io/kustomize/pkg/types"
) )
// ConfigMapFactory makes ConfigMaps. // Factory makes ConfigMaps and Secrets.
type ConfigMapFactory struct { type Factory struct {
ldr ifc.Loader baseFactory
} }
// NewConfigMapFactory returns a new ConfigMapFactory. // NewFactory returns a new Factory.
func NewConfigMapFactory(l ifc.Loader) *ConfigMapFactory { func NewFactory(
return &ConfigMapFactory{ldr: l} l ifc.Loader, o *types.GeneratorOptions) *Factory {
return &Factory{baseFactory{ldr: l, options: o}}
} }
func (f *ConfigMapFactory) makeFreshConfigMap( func makeFreshConfigMap(
args *types.ConfigMapArgs) *corev1.ConfigMap { args *types.ConfigMapArgs) *corev1.ConfigMap {
cm := &corev1.ConfigMap{} cm := &corev1.ConfigMap{}
cm.APIVersion = "v1" cm.APIVersion = "v1"
@@ -53,43 +50,22 @@ func (f *ConfigMapFactory) makeFreshConfigMap(
} }
// MakeConfigMap returns a new ConfigMap, or nil and an error. // MakeConfigMap returns a new ConfigMap, or nil and an error.
func (f *ConfigMapFactory) MakeConfigMap( func (f *Factory) MakeConfigMap(
args *types.ConfigMapArgs, options *types.GeneratorOptions) (*corev1.ConfigMap, error) { args *types.ConfigMapArgs) (*corev1.ConfigMap, error) {
var all []kv.Pair all, err := f.loadKvPairs(args.GeneratorArgs)
var err error
cm := f.makeFreshConfigMap(args)
pairs, err := keyValuesFromEnvFile(f.ldr, args.EnvSource)
if err != nil { if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf( return nil, err
"env source file: %s",
args.EnvSource))
} }
all = append(all, pairs...) cm := makeFreshConfigMap(args)
pairs, err = keyValuesFromLiteralSources(args.LiteralSources)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"literal sources %v", args.LiteralSources))
}
all = append(all, pairs...)
pairs, err = keyValuesFromFileSources(f.ldr, args.FileSources)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"file sources: %v", args.FileSources))
}
all = append(all, pairs...)
for _, p := range all { for _, p := range all {
err = addKvToConfigMap(cm, p.Key, p.Value) err = addKvToConfigMap(cm, p.Key, p.Value)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
if options != nil { if f.options != nil {
cm.SetLabels(options.Labels) cm.SetLabels(f.options.Labels)
cm.SetAnnotations(options.Annotations) cm.SetAnnotations(f.options.Annotations)
} }
return cm, nil return cm, nil
} }
@@ -97,13 +73,9 @@ func (f *ConfigMapFactory) MakeConfigMap(
// addKvToConfigMap adds the given key and data to the given config map. // addKvToConfigMap adds the given key and data to the given config map.
// Error if key invalid, or already exists. // Error if key invalid, or already exists.
func addKvToConfigMap(configMap *v1.ConfigMap, keyName, data string) error { func addKvToConfigMap(configMap *v1.ConfigMap, keyName, data string) error {
// Note, the rules for ConfigMap keys are the exact same as the ones for SecretKeys. if err := errIfInvalidKey(keyName); err != nil {
if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 { return err
return fmt.Errorf("%q is not a valid key name for a ConfigMap: %s", keyName, strings.Join(errs, ";"))
} }
keyExistsErrorMsg := "cannot add key %s, another key by that name already exists: %v"
// If the configmap data contains byte sequences that are all in the UTF-8 // If the configmap data contains byte sequences that are all in the UTF-8
// range, we will write it to .Data // range, we will write it to .Data
if utf8.Valid([]byte(data)) { if utf8.Valid([]byte(data)) {
@@ -113,7 +85,6 @@ func addKvToConfigMap(configMap *v1.ConfigMap, keyName, data string) error {
configMap.Data[keyName] = data configMap.Data[keyName] = data
return nil return nil
} }
// otherwise, it's BinaryData // otherwise, it's BinaryData
if configMap.BinaryData == nil { if configMap.BinaryData == nil {
configMap.BinaryData = map[string][]byte{} configMap.BinaryData = map[string][]byte{}

View File

@@ -141,9 +141,9 @@ func TestConstructConfigMap(t *testing.T) {
fSys.WriteFile("/configmap/app.env", []byte("DB_USERNAME=admin\nDB_PASSWORD=somepw\n")) fSys.WriteFile("/configmap/app.env", []byte("DB_USERNAME=admin\nDB_PASSWORD=somepw\n"))
fSys.WriteFile("/configmap/app-init.ini", []byte("FOO=bar\nBAR=baz\n")) fSys.WriteFile("/configmap/app-init.ini", []byte("FOO=bar\nBAR=baz\n"))
fSys.WriteFile("/configmap/app.bin", []byte{0xff, 0xfd}) fSys.WriteFile("/configmap/app.bin", []byte{0xff, 0xfd})
f := NewConfigMapFactory(loader.NewFileLoaderAtRoot(fSys))
for _, tc := range testCases { for _, tc := range testCases {
cm, err := f.MakeConfigMap(&tc.input, tc.options) f := NewFactory(loader.NewFileLoaderAtRoot(fSys), tc.options)
cm, err := f.MakeConfigMap(&tc.input)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }

View File

@@ -18,27 +18,13 @@ package configmapandsecret
import ( import (
"fmt" "fmt"
"strings"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/validation"
"sigs.k8s.io/kustomize/k8sdeps/kv"
"sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/types" "sigs.k8s.io/kustomize/pkg/types"
) )
// SecretFactory makes Secrets. func makeFreshSecret(
type SecretFactory struct { args *types.SecretArgs) *corev1.Secret {
ldr ifc.Loader
}
// NewSecretFactory returns a new SecretFactory.
func NewSecretFactory(ldr ifc.Loader) *SecretFactory {
return &SecretFactory{ldr: ldr}
}
func (f *SecretFactory) makeFreshSecret(args *types.SecretArgs) *corev1.Secret {
s := &corev1.Secret{} s := &corev1.Secret{}
s.APIVersion = "v1" s.APIVersion = "v1"
s.Kind = "Secret" s.Kind = "Secret"
@@ -53,53 +39,32 @@ func (f *SecretFactory) makeFreshSecret(args *types.SecretArgs) *corev1.Secret {
} }
// MakeSecret returns a new secret. // MakeSecret returns a new secret.
func (f *SecretFactory) MakeSecret(args *types.SecretArgs, options *types.GeneratorOptions) (*corev1.Secret, error) { func (f *Factory) MakeSecret(
var all []kv.Pair args *types.SecretArgs) (*corev1.Secret, error) {
var err error all, err := f.loadKvPairs(args.GeneratorArgs)
s := f.makeFreshSecret(args)
pairs, err := keyValuesFromEnvFile(f.ldr, args.EnvSource)
if err != nil { if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf( return nil, err
"env source file: %s",
args.EnvSource))
} }
all = append(all, pairs...) s := makeFreshSecret(args)
pairs, err = keyValuesFromLiteralSources(args.LiteralSources)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"literal sources %v", args.LiteralSources))
}
all = append(all, pairs...)
pairs, err = keyValuesFromFileSources(f.ldr, args.FileSources)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf(
"file sources: %v", args.FileSources))
}
all = append(all, pairs...)
for _, p := range all { for _, p := range all {
err = addKvToSecret(s, p.Key, p.Value) err = addKvToSecret(s, p.Key, p.Value)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
if options != nil { if f.options != nil {
s.SetLabels(options.Labels) s.SetLabels(f.options.Labels)
s.SetAnnotations(options.Annotations) s.SetAnnotations(f.options.Annotations)
} }
return s, nil return s, nil
} }
func addKvToSecret(secret *corev1.Secret, keyName, data string) error { func addKvToSecret(secret *corev1.Secret, keyName, data string) error {
// Note, the rules for SecretKeys keys are the exact same as the ones for ConfigMap. if err := errIfInvalidKey(keyName); err != nil {
if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 { return err
return fmt.Errorf("%q is not a valid key name for a Secret: %s", keyName, strings.Join(errs, ";"))
} }
if _, entryExists := secret.Data[keyName]; entryExists { if _, entryExists := secret.Data[keyName]; entryExists {
return fmt.Errorf("cannot add key %s, another key by that name already exists", keyName) return fmt.Errorf(keyExistsErrorMsg, keyName, secret.Data)
} }
secret.Data[keyName] = []byte(data) secret.Data[keyName] = []byte(data)
return nil return nil

View File

@@ -138,9 +138,9 @@ func TestConstructSecret(t *testing.T) {
fSys := fs.MakeFakeFS() fSys := fs.MakeFakeFS()
fSys.WriteFile("/secret/app.env", []byte("DB_USERNAME=admin\nDB_PASSWORD=somepw\n")) fSys.WriteFile("/secret/app.env", []byte("DB_USERNAME=admin\nDB_PASSWORD=somepw\n"))
fSys.WriteFile("/secret/app-init.ini", []byte("FOO=bar\nBAR=baz\n")) fSys.WriteFile("/secret/app-init.ini", []byte("FOO=bar\nBAR=baz\n"))
f := NewSecretFactory(loader.NewFileLoaderAtRoot(fSys))
for _, tc := range testCases { for _, tc := range testCases {
cm, err := f.MakeSecret(&tc.input, tc.options) f := NewFactory(loader.NewFileLoaderAtRoot(fSys), tc.options)
cm, err := f.MakeSecret(&tc.input)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }

View File

@@ -31,8 +31,6 @@ import (
// KunstructuredFactoryImpl hides construction using apimachinery types. // KunstructuredFactoryImpl hides construction using apimachinery types.
type KunstructuredFactoryImpl struct { type KunstructuredFactoryImpl struct {
cmFactory *configmapandsecret.ConfigMapFactory
secretFactory *configmapandsecret.SecretFactory
} }
var _ ifc.KunstructuredFactory = &KunstructuredFactoryImpl{} var _ ifc.KunstructuredFactory = &KunstructuredFactoryImpl{}
@@ -79,27 +77,27 @@ func (kf *KunstructuredFactoryImpl) FromMap(
} }
// MakeConfigMap returns an instance of Kunstructured for ConfigMap // MakeConfigMap returns an instance of Kunstructured for ConfigMap
func (kf *KunstructuredFactoryImpl) MakeConfigMap(args *types.ConfigMapArgs, options *types.GeneratorOptions) (ifc.Kunstructured, error) { func (kf *KunstructuredFactoryImpl) MakeConfigMap(
cm, err := kf.cmFactory.MakeConfigMap(args, options) ldr ifc.Loader,
options *types.GeneratorOptions,
args *types.ConfigMapArgs) (ifc.Kunstructured, error) {
o, err := configmapandsecret.NewFactory(ldr, options).MakeConfigMap(args)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return NewKunstructuredFromObject(cm) return NewKunstructuredFromObject(o)
} }
// MakeSecret returns an instance of Kunstructured for Secret // MakeSecret returns an instance of Kunstructured for Secret
func (kf *KunstructuredFactoryImpl) MakeSecret(args *types.SecretArgs, options *types.GeneratorOptions) (ifc.Kunstructured, error) { func (kf *KunstructuredFactoryImpl) MakeSecret(
sec, err := kf.secretFactory.MakeSecret(args, options) ldr ifc.Loader,
options *types.GeneratorOptions,
args *types.SecretArgs) (ifc.Kunstructured, error) {
o, err := configmapandsecret.NewFactory(ldr, options).MakeSecret(args)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return NewKunstructuredFromObject(sec) return NewKunstructuredFromObject(o)
}
// Set sets loader
func (kf *KunstructuredFactoryImpl) Set(ldr ifc.Loader) {
kf.cmFactory = configmapandsecret.NewConfigMapFactory(ldr)
kf.secretFactory = configmapandsecret.NewSecretFactory(ldr)
} }
// validate validates that u has kind and name // validate validates that u has kind and name

View File

@@ -67,8 +67,8 @@ func newCmdAddConfigMap(fSys fs.FileSystem, kf ifc.KunstructuredFactory) *cobra.
} }
// Add the flagsAndArgs map to the kustomization file. // Add the flagsAndArgs map to the kustomization file.
kf.Set(loader.NewFileLoaderAtCwd(fSys)) err = addConfigMap(
err = addConfigMap(kustomization, flags, kf) loader.NewFileLoaderAtCwd(fSys), kustomization, flags, kf)
if err != nil { if err != nil {
return err return err
} }
@@ -103,6 +103,7 @@ func newCmdAddConfigMap(fSys fs.FileSystem, kf ifc.KunstructuredFactory) *cobra.
// Note: error may leave kustomization file in an undefined state. // Note: error may leave kustomization file in an undefined state.
// Suggest passing a copy of kustomization file. // Suggest passing a copy of kustomization file.
func addConfigMap( func addConfigMap(
ldr ifc.Loader,
k *types.Kustomization, k *types.Kustomization,
flags flagsAndArgs, kf ifc.KunstructuredFactory) error { flags flagsAndArgs, kf ifc.KunstructuredFactory) error {
cmArgs := makeConfigMapArgs(k, flags.Name) cmArgs := makeConfigMapArgs(k, flags.Name)
@@ -111,7 +112,7 @@ func addConfigMap(
return err return err
} }
// Validate by trying to create corev1.configmap. // Validate by trying to create corev1.configmap.
_, err = kf.MakeConfigMap(cmArgs, k.GeneratorOptions) _, err = kf.MakeConfigMap(ldr, k.GeneratorOptions, cmArgs)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -67,8 +67,8 @@ func newCmdAddSecret(fSys fs.FileSystem, kf ifc.KunstructuredFactory) *cobra.Com
} }
// Add the flagsAndArgs map to the kustomization file. // Add the flagsAndArgs map to the kustomization file.
kf.Set(loader.NewFileLoaderAtCwd(fSys)) err = addSecret(
err = addSecret(kustomization, flags, kf) loader.NewFileLoaderAtCwd(fSys), kustomization, flags, kf)
if err != nil { if err != nil {
return err return err
} }
@@ -108,6 +108,7 @@ func newCmdAddSecret(fSys fs.FileSystem, kf ifc.KunstructuredFactory) *cobra.Com
// Note: error may leave kustomization file in an undefined state. // Note: error may leave kustomization file in an undefined state.
// Suggest passing a copy of kustomization file. // Suggest passing a copy of kustomization file.
func addSecret( func addSecret(
ldr ifc.Loader,
k *types.Kustomization, k *types.Kustomization,
flags flagsAndArgs, kf ifc.KunstructuredFactory) error { flags flagsAndArgs, kf ifc.KunstructuredFactory) error {
secretArgs := makeSecretArgs(k, flags.Name, flags.Type) secretArgs := makeSecretArgs(k, flags.Name, flags.Type)
@@ -116,7 +117,7 @@ func addSecret(
return err return err
} }
// Validate by trying to create corev1.secret. // Validate by trying to create corev1.secret.
_, err = kf.MakeSecret(secretArgs, k.GeneratorOptions) _, err = kf.MakeSecret(ldr, k.GeneratorOptions, secretArgs)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -64,9 +64,14 @@ type Kunstructured interface {
type KunstructuredFactory interface { type KunstructuredFactory interface {
SliceFromBytes([]byte) ([]Kunstructured, error) SliceFromBytes([]byte) ([]Kunstructured, error)
FromMap(m map[string]interface{}) Kunstructured FromMap(m map[string]interface{}) Kunstructured
MakeConfigMap(args *types.ConfigMapArgs, options *types.GeneratorOptions) (Kunstructured, error) MakeConfigMap(
MakeSecret(args *types.SecretArgs, options *types.GeneratorOptions) (Kunstructured, error) ldr Loader,
Set(ldr Loader) options *types.GeneratorOptions,
args *types.ConfigMapArgs) (Kunstructured, error)
MakeSecret(
ldr Loader,
options *types.GeneratorOptions,
args *types.SecretArgs) (Kunstructured, error)
} }
// See core.v1.SecretTypeOpaque // See core.v1.SecretTypeOpaque

View File

@@ -79,10 +79,13 @@ func (rmF *Factory) NewResMapFromBytes(b []byte) (ResMap, error) {
// NewResMapFromConfigMapArgs returns a Resource slice given // NewResMapFromConfigMapArgs returns a Resource slice given
// a configmap metadata slice from kustomization file. // a configmap metadata slice from kustomization file.
func (rmF *Factory) NewResMapFromConfigMapArgs(argList []types.ConfigMapArgs, options *types.GeneratorOptions) (ResMap, error) { func (rmF *Factory) NewResMapFromConfigMapArgs(
ldr ifc.Loader,
options *types.GeneratorOptions,
argList []types.ConfigMapArgs) (ResMap, error) {
var resources []*resource.Resource var resources []*resource.Resource
for _, args := range argList { for _, args := range argList {
res, err := rmF.resF.MakeConfigMap(&args, options) res, err := rmF.resF.MakeConfigMap(ldr, options, &args)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "NewResMapFromConfigMapArgs") return nil, errors.Wrap(err, "NewResMapFromConfigMapArgs")
} }
@@ -93,10 +96,13 @@ func (rmF *Factory) NewResMapFromConfigMapArgs(argList []types.ConfigMapArgs, op
// NewResMapFromSecretArgs takes a SecretArgs slice, generates // NewResMapFromSecretArgs takes a SecretArgs slice, generates
// secrets from each entry, and accumulates them in a ResMap. // secrets from each entry, and accumulates them in a ResMap.
func (rmF *Factory) NewResMapFromSecretArgs(argsList []types.SecretArgs, options *types.GeneratorOptions) (ResMap, error) { func (rmF *Factory) NewResMapFromSecretArgs(
ldr ifc.Loader,
options *types.GeneratorOptions,
argsList []types.SecretArgs) (ResMap, error) {
var resources []*resource.Resource var resources []*resource.Resource
for _, args := range argsList { for _, args := range argsList {
res, err := rmF.resF.MakeSecret(&args, options) res, err := rmF.resF.MakeSecret(ldr, options, &args)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "NewResMapFromSecretArgs") return nil, errors.Wrap(err, "NewResMapFromSecretArgs")
} }
@@ -105,11 +111,6 @@ func (rmF *Factory) NewResMapFromSecretArgs(argsList []types.SecretArgs, options
return newResMapFromResourceSlice(resources) return newResMapFromResourceSlice(resources)
} }
// Set sets the loader for the underlying factory
func (rmF *Factory) Set(ldr ifc.Loader) {
rmF.resF.Set(ldr)
}
func newResMapFromResourceSlice(resources []*resource.Resource) (ResMap, error) { func newResMapFromResourceSlice(resources []*resource.Resource) (ResMap, error) {
result := ResMap{} result := ResMap{}
for _, res := range resources { for _, res := range resources {

View File

@@ -238,12 +238,11 @@ BAR=baz
// TODO: add testcase for data coming from multiple sources like // TODO: add testcase for data coming from multiple sources like
// files/literal/env etc. // files/literal/env etc.
} }
rmF.Set(l)
for _, tc := range testCases { for _, tc := range testCases {
if ferr := l.AddFile(tc.filepath, []byte(tc.content)); ferr != nil { if ferr := l.AddFile(tc.filepath, []byte(tc.content)); ferr != nil {
t.Fatalf("Error adding fake file: %v\n", ferr) t.Fatalf("Error adding fake file: %v\n", ferr)
} }
r, err := rmF.NewResMapFromConfigMapArgs(tc.input, nil) r, err := rmF.NewResMapFromConfigMapArgs(l, nil, tc.input)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }
@@ -272,9 +271,8 @@ func TestNewResMapFromSecretArgs(t *testing.T) {
} }
fakeFs := fs.MakeFakeFS() fakeFs := fs.MakeFakeFS()
fakeFs.Mkdir(".") fakeFs.Mkdir(".")
rmF.Set(loader.NewFileLoaderAtRoot(fakeFs)) actual, err := rmF.NewResMapFromSecretArgs(
actual, err := rmF.NewResMapFromSecretArgs(secrets, nil) loader.NewFileLoaderAtRoot(fakeFs), nil, secrets)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }

View File

@@ -124,25 +124,36 @@ func (rf *Factory) SliceFromBytes(in []byte) ([]*Resource, error) {
return result, nil return result, nil
} }
// Set sets the loader for the underlying factory
func (rf *Factory) Set(ldr ifc.Loader) {
rf.kf.Set(ldr)
}
// MakeConfigMap makes an instance of Resource for ConfigMap // MakeConfigMap makes an instance of Resource for ConfigMap
func (rf *Factory) MakeConfigMap(args *types.ConfigMapArgs, options *types.GeneratorOptions) (*Resource, error) { func (rf *Factory) MakeConfigMap(
u, err := rf.kf.MakeConfigMap(args, options) ldr ifc.Loader,
options *types.GeneratorOptions,
args *types.ConfigMapArgs) (*Resource, error) {
u, err := rf.kf.MakeConfigMap(ldr, options, args)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &Resource{Kunstructured: u, options: types.NewGenArgs(&types.GeneratorArgs{Behavior: args.Behavior}, options)}, nil return &Resource{
Kunstructured: u,
options: types.NewGenArgs(
&types.GeneratorArgs{Behavior: args.Behavior},
options),
}, nil
} }
// MakeSecret makes an instance of Resource for Secret // MakeSecret makes an instance of Resource for Secret
func (rf *Factory) MakeSecret(args *types.SecretArgs, options *types.GeneratorOptions) (*Resource, error) { func (rf *Factory) MakeSecret(
u, err := rf.kf.MakeSecret(args, options) ldr ifc.Loader,
options *types.GeneratorOptions,
args *types.SecretArgs) (*Resource, error) {
u, err := rf.kf.MakeSecret(ldr, options, args)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &Resource{Kunstructured: u, options: types.NewGenArgs(&types.GeneratorArgs{Behavior: args.Behavior}, options)}, nil return &Resource{
Kunstructured: u,
options: types.NewGenArgs(
&types.GeneratorArgs{Behavior: args.Behavior},
options),
}, nil
} }

View File

@@ -62,7 +62,9 @@ func NewKustTarget(
} }
errs := k.EnforceFields() errs := k.EnforceFields()
if len(errs) > 0 { if len(errs) > 0 {
return nil, fmt.Errorf("Failed to read kustomization file under %s:\n"+strings.Join(errs, "\n"), ldr.Root()) return nil, fmt.Errorf(
"Failed to read kustomization file under %s:\n"+
strings.Join(errs, "\n"), ldr.Root())
} }
return &KustTarget{ return &KustTarget{
kustomization: &k, kustomization: &k,
@@ -102,7 +104,8 @@ func loadKustFile(ldr ifc.Loader) ([]byte, error) {
case 1: case 1:
return content, nil return content, nil
default: default:
return nil, fmt.Errorf("Found multiple kustomization files under: %s\n", ldr.Root()) return nil, fmt.Errorf(
"Found multiple kustomization files under: %s\n", ldr.Root())
} }
} }
@@ -215,14 +218,17 @@ func (kt *KustTarget) AccumulateTarget() (
func (kt *KustTarget) generateConfigMapsAndSecrets( func (kt *KustTarget) generateConfigMapsAndSecrets(
errs *interror.KustomizationErrors) (resmap.ResMap, error) { errs *interror.KustomizationErrors) (resmap.ResMap, error) {
kt.rFactory.Set(kt.ldr)
cms, err := kt.rFactory.NewResMapFromConfigMapArgs( cms, err := kt.rFactory.NewResMapFromConfigMapArgs(
kt.kustomization.ConfigMapGenerator, kt.kustomization.GeneratorOptions) kt.ldr,
kt.kustomization.GeneratorOptions,
kt.kustomization.ConfigMapGenerator)
if err != nil { if err != nil {
errs.Append(errors.Wrap(err, "NewResMapFromConfigMapArgs")) errs.Append(errors.Wrap(err, "NewResMapFromConfigMapArgs"))
} }
secrets, err := kt.rFactory.NewResMapFromSecretArgs( secrets, err := kt.rFactory.NewResMapFromSecretArgs(
kt.kustomization.SecretGenerator, kt.kustomization.GeneratorOptions) kt.ldr,
kt.kustomization.GeneratorOptions,
kt.kustomization.SecretGenerator)
if err != nil { if err != nil {
errs.Append(errors.Wrap(err, "NewResMapFromSecretArgs")) errs.Append(errors.Wrap(err, "NewResMapFromSecretArgs"))
} }