@@ -19,7 +19,6 @@ package configmapandsecret
19
19
20
20
import (
21
21
"encoding/json"
22
- "errors"
23
22
"fmt"
24
23
"io/ioutil"
25
24
"path"
@@ -29,6 +28,7 @@ import (
29
28
"github.com/kubernetes-sigs/kustomize/pkg/hash"
30
29
"github.com/kubernetes-sigs/kustomize/pkg/loader"
31
30
"github.com/kubernetes-sigs/kustomize/pkg/types"
31
+ "github.com/pkg/errors"
32
32
"k8s.io/api/core/v1"
33
33
corev1 "k8s.io/api/core/v1"
34
34
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -38,22 +38,20 @@ import (
38
38
39
39
// ConfigMapFactory makes ConfigMaps.
40
40
type ConfigMapFactory struct {
41
- args * types.ConfigMapArgs
42
41
fSys fs.FileSystem
43
42
ldr loader.Loader
44
43
}
45
44
46
45
// NewConfigMapFactory returns a new ConfigMapFactory.
47
46
func NewConfigMapFactory (
48
- args * types.ConfigMapArgs ,
49
- l loader.Loader ,
50
- fSys fs.FileSystem ) * ConfigMapFactory {
51
- return & ConfigMapFactory {args : args , ldr : l , fSys : fSys }
47
+ fSys fs.FileSystem , l loader.Loader ) * ConfigMapFactory {
48
+ return & ConfigMapFactory {fSys : fSys , ldr : l }
52
49
}
53
50
54
51
// MakeUnstructAndGenerateName returns an configmap and the name appended with a hash.
55
- func (f * ConfigMapFactory ) MakeUnstructAndGenerateName () (* unstructured.Unstructured , string , error ) {
56
- cm , err := f .MakeConfigMap1 ()
52
+ func (f * ConfigMapFactory ) MakeUnstructAndGenerateName (
53
+ args * types.ConfigMapArgs ) (* unstructured.Unstructured , string , error ) {
54
+ cm , err := f .MakeConfigMap1 (args )
57
55
if err != nil {
58
56
return nil , "" , err
59
57
}
@@ -76,31 +74,32 @@ func objectToUnstructured(in runtime.Object) (*unstructured.Unstructured, error)
76
74
return & out , err
77
75
}
78
76
79
- func (f * ConfigMapFactory ) makeFreshConfigMap () * corev1.ConfigMap {
77
+ func (f * ConfigMapFactory ) makeFreshConfigMap (
78
+ args * types.ConfigMapArgs ) * corev1.ConfigMap {
80
79
cm := & corev1.ConfigMap {}
81
80
cm .APIVersion = "v1"
82
81
cm .Kind = "ConfigMap"
83
- cm .Name = f . args .Name
82
+ cm .Name = args .Name
84
83
cm .Data = map [string ]string {}
85
84
return cm
86
85
}
87
86
88
87
// MakeConfigMap1 returns a new ConfigMap, or nil and an error.
89
- func (f * ConfigMapFactory ) MakeConfigMap1 () ( * corev1. ConfigMap , error ) {
90
- cm := f . makeFreshConfigMap ()
91
-
92
- if f . args .EnvSource != "" {
93
- if err := f .handleConfigMapFromEnvFileSource (cm ); err != nil {
88
+ func (f * ConfigMapFactory ) MakeConfigMap1 (
89
+ args * types. ConfigMapArgs ) ( * corev1. ConfigMap , error ) {
90
+ cm := f . makeFreshConfigMap ( args )
91
+ if args .EnvSource != "" {
92
+ if err := f .handleConfigMapFromEnvFileSource (cm , args ); err != nil {
94
93
return nil , err
95
94
}
96
95
}
97
- if f . args .FileSources != nil {
98
- if err := f .handleConfigMapFromFileSources (cm ); err != nil {
96
+ if args .FileSources != nil {
97
+ if err := f .handleConfigMapFromFileSources (cm , args ); err != nil {
99
98
return nil , err
100
99
}
101
100
}
102
- if f . args .LiteralSources != nil {
103
- if err := f .handleConfigMapFromLiteralSources (cm ); err != nil {
101
+ if args .LiteralSources != nil {
102
+ if err := f .handleConfigMapFromLiteralSources (cm , args . LiteralSources ); err != nil {
104
103
return nil , err
105
104
}
106
105
}
@@ -109,40 +108,38 @@ func (f *ConfigMapFactory) MakeConfigMap1() (*corev1.ConfigMap, error) {
109
108
110
109
// MakeConfigMap2 returns a new ConfigMap, or nil and an error.
111
110
// TODO: Get rid of the nearly duplicated code in MakeConfigMap1 vs MakeConfigMap2
112
- func (f * ConfigMapFactory ) MakeConfigMap2 () (* corev1.ConfigMap , error ) {
113
- var envPairs , literalPairs , filePairs []kvPair
111
+ func (f * ConfigMapFactory ) MakeConfigMap2 (
112
+ args * types.ConfigMapArgs ) (* corev1.ConfigMap , error ) {
113
+ var all []kvPair
114
114
var err error
115
+ cm := f .makeFreshConfigMap (args )
115
116
116
- cm := f .makeFreshConfigMap ()
117
-
118
- if f .args .EnvSource != "" {
119
- envPairs , err = keyValuesFromEnvFile (f .ldr , f .args .EnvSource )
120
- if err != nil {
121
- return nil , fmt .Errorf (
122
- "error reading keys from env source file: %s %v" ,
123
- f .args .EnvSource , err )
124
- }
117
+ pairs , err := keyValuesFromEnvFile (f .ldr , args .EnvSource )
118
+ if err != nil {
119
+ return nil , errors .Wrap (err , fmt .Sprintf (
120
+ "env source file: %s" ,
121
+ args .EnvSource ))
125
122
}
123
+ all = append (all , pairs ... )
126
124
127
- literalPairs , err = keyValuesFromLiteralSources (f . args .LiteralSources )
125
+ pairs , err = keyValuesFromLiteralSources (args .LiteralSources )
128
126
if err != nil {
129
- return nil , fmt .Errorf (
130
- "error reading key values from literal sources: %v" , err )
127
+ return nil , errors . Wrap ( err , fmt .Sprintf (
128
+ "literal sources %v" , args . LiteralSources ) )
131
129
}
130
+ all = append (all , pairs ... )
132
131
133
- filePairs , err = keyValuesFromFileSources (f .ldr , f . args .FileSources )
132
+ pairs , err = keyValuesFromFileSources (f .ldr , args .FileSources )
134
133
if err != nil {
135
- return nil , fmt .Errorf (
136
- "error reading key values from file sources: %v" , err )
134
+ return nil , errors . Wrap ( err , fmt .Sprintf (
135
+ "file sources: %v" , args . FileSources ) )
137
136
}
137
+ all = append (all , pairs ... )
138
138
139
- allPairs := append (append (envPairs , literalPairs ... ), filePairs ... )
140
-
141
- // merge key value pairs from all the sources
142
- for _ , kv := range allPairs {
143
- err = addKV (cm .Data , kv )
139
+ for _ , kv := range all {
140
+ err = addKeyFromLiteralToConfigMap (cm , kv .key , kv .value )
144
141
if err != nil {
145
- return nil , fmt . Errorf ( "error adding key in configmap: %v" , err )
142
+ return nil , err
146
143
}
147
144
}
148
145
return cm , nil
@@ -163,13 +160,13 @@ func keyValuesFromLiteralSources(sources []string) ([]kvPair, error) {
163
160
// handleConfigMapFromLiteralSources adds the specified literal source
164
161
// information into the provided configMap.
165
162
func (f * ConfigMapFactory ) handleConfigMapFromLiteralSources (
166
- configMap * v1.ConfigMap ) error {
167
- for _ , literalSource := range f . args . LiteralSources {
168
- keyName , value , err := ParseLiteralSource (literalSource )
163
+ configMap * v1.ConfigMap , sources [] string ) error {
164
+ for _ , s := range sources {
165
+ k , v , err := ParseLiteralSource (s )
169
166
if err != nil {
170
167
return err
171
168
}
172
- err = addKeyFromLiteralToConfigMap (configMap , keyName , value )
169
+ err = addKeyFromLiteralToConfigMap (configMap , k , v )
173
170
if err != nil {
174
171
return err
175
172
}
@@ -195,8 +192,9 @@ func keyValuesFromFileSources(ldr loader.Loader, sources []string) ([]kvPair, er
195
192
196
193
// handleConfigMapFromFileSources adds the specified file source information
197
194
// into the provided configMap
198
- func (f * ConfigMapFactory ) handleConfigMapFromFileSources (configMap * v1.ConfigMap ) error {
199
- for _ , fileSource := range f .args .FileSources {
195
+ func (f * ConfigMapFactory ) handleConfigMapFromFileSources (
196
+ configMap * v1.ConfigMap , args * types.ConfigMapArgs ) error {
197
+ for _ , fileSource := range args .FileSources {
200
198
keyName , filePath , err := ParseFileSource (fileSource )
201
199
if err != nil {
202
200
return err
@@ -232,6 +230,9 @@ func (f *ConfigMapFactory) handleConfigMapFromFileSources(configMap *v1.ConfigMa
232
230
}
233
231
234
232
func keyValuesFromEnvFile (l loader.Loader , path string ) ([]kvPair , error ) {
233
+ if path == "" {
234
+ return nil , nil
235
+ }
235
236
content , err := l .Load (path )
236
237
if err != nil {
237
238
return nil , err
@@ -241,14 +242,15 @@ func keyValuesFromEnvFile(l loader.Loader, path string) ([]kvPair, error) {
241
242
242
243
// HandleConfigMapFromEnvFileSource adds the specified env file source information
243
244
// into the provided configMap
244
- func (f * ConfigMapFactory ) handleConfigMapFromEnvFileSource (configMap * v1.ConfigMap ) error {
245
- if ! f .fSys .Exists (f .args .EnvSource ) {
246
- return fmt .Errorf ("unable to read configmap env file %s" , f .args .EnvSource )
245
+ func (f * ConfigMapFactory ) handleConfigMapFromEnvFileSource (
246
+ configMap * v1.ConfigMap , args * types.ConfigMapArgs ) error {
247
+ if ! f .fSys .Exists (args .EnvSource ) {
248
+ return fmt .Errorf ("unable to read configmap env file %s" , args .EnvSource )
247
249
}
248
- if f .fSys .IsDir (f . args .EnvSource ) {
249
- return fmt .Errorf ("env config file %s cannot be a directory" , f . args .EnvSource )
250
+ if f .fSys .IsDir (args .EnvSource ) {
251
+ return fmt .Errorf ("env config file %s cannot be a directory" , args .EnvSource )
250
252
}
251
- return addFromEnvFile (f . args .EnvSource , func (key , value string ) error {
253
+ return addFromEnvFile (args .EnvSource , func (key , value string ) error {
252
254
return addKeyFromLiteralToConfigMap (configMap , key , value )
253
255
})
254
256
}
@@ -318,18 +320,3 @@ func ParseLiteralSource(source string) (keyName, value string, err error) {
318
320
319
321
return items [0 ], items [1 ], nil
320
322
}
321
-
322
- // addKV adds key-value pair to the provided map.
323
- func addKV (m map [string ]string , kv kvPair ) error {
324
- if errs := validation .IsConfigMapKey (kv .key ); len (errs ) != 0 {
325
- return fmt .Errorf (
326
- "%q is not a valid key name: %s" ,
327
- kv .key , strings .Join (errs , ";" ))
328
- }
329
- if _ , exists := m [kv .key ]; exists {
330
- return fmt .Errorf (
331
- "key %s already exists: %v" , kv .key , m )
332
- }
333
- m [kv .key ] = kv .value
334
- return nil
335
- }
0 commit comments