@@ -14,6 +14,7 @@ import (
14
14
15
15
"github.com/go-kit/kit/log"
16
16
"github.com/go-kit/kit/log/level"
17
+ "github.com/pkg/errors"
17
18
"github.com/spf13/viper"
18
19
)
19
20
@@ -53,6 +54,10 @@ func isReadOnly(item *libyaml.ConfigItem) bool {
53
54
return ! editable
54
55
}
55
56
57
+ func shouldOverrideValueWithDefault (item * libyaml.ConfigItem ) bool {
58
+ return item .Hidden && item .Value == "" && item .Default != ""
59
+ }
60
+
56
61
func isRequired (item * libyaml.ConfigItem ) bool {
57
62
return item .Required
58
63
}
@@ -172,42 +177,52 @@ func resolveConfigValuesMap(liveValues map[string]interface{}, configGroups []li
172
177
func (r * APIConfigRenderer ) ResolveConfig (
173
178
ctx context.Context ,
174
179
release * api.Release ,
180
+ savedState map [string ]interface {},
175
181
liveValues map [string ]interface {},
176
182
) ([]libyaml.ConfigGroup , error ) {
177
183
resolvedConfig := make ([]libyaml.ConfigGroup , 0 , 0 )
178
184
179
185
updatedValues , err := resolveConfigValuesMap (liveValues , release .Spec .Config .V1 , r .Logger , r .Viper )
180
186
if err != nil {
181
- return resolvedConfig , err
187
+ return resolvedConfig , errors . Wrap ( err , "resolve config values map" )
182
188
}
183
189
184
190
builder , err := r .newBuilder (ctx , release , updatedValues )
185
191
if err != nil {
186
- return resolvedConfig , err
192
+ return resolvedConfig , errors . Wrap ( err , "initialize tpl builder" )
187
193
}
188
194
189
195
for _ , configGroup := range release .Spec .Config .V1 {
190
196
resolvedItems := make ([]* libyaml.ConfigItem , 0 , 0 )
191
197
for _ , configItem := range configGroup .Items {
198
+
199
+ if val , ok := savedState [configItem .Name ]; ok {
200
+ configItem .Value = fmt .Sprintf ("%s" , val )
201
+ }
202
+
192
203
if ! isReadOnly (configItem ) {
193
204
if val , ok := liveValues [configItem .Name ]; ok {
194
- configItem .Value = fmt .Sprintf ("%v " , val )
205
+ configItem .Value = fmt .Sprintf ("%s " , val )
195
206
}
196
207
}
197
208
198
- resolvedItem , err := r .resolveConfigItem (ctx , * builder , configItem )
209
+ resolvedItem , err := r .applyConfigItemFieldTemplates (ctx , * builder , configItem )
199
210
if err != nil {
200
- return resolvedConfig , err
211
+ return resolvedConfig , errors .Wrapf (err , "resolve item %s" , configItem .Name )
212
+ }
213
+
214
+ if shouldOverrideValueWithDefault (configItem ) {
215
+ configItem .Value = configItem .Default
201
216
}
202
217
203
218
resolvedItems = append (resolvedItems , resolvedItem )
204
219
}
205
220
206
221
configGroup .Items = resolvedItems
207
222
208
- resolvedGroup , err := r .resolveConfigGroup (ctx , * builder , configGroup )
223
+ resolvedGroup , err := r .applyConfigGroupFieldTemplates (ctx , * builder , configGroup )
209
224
if err != nil {
210
- return resolvedConfig , err
225
+ return resolvedConfig , errors . Wrapf ( err , "resolve gropu %s" , configGroup . Name )
211
226
}
212
227
213
228
resolvedConfig = append (resolvedConfig , resolvedGroup )
@@ -285,9 +300,9 @@ func (r *APIConfigRenderer) newBuilder(
285
300
return & builder , nil
286
301
}
287
302
288
- func (r * APIConfigRenderer ) resolveConfigGroup (ctx context.Context , builder templates.Builder , configGroup libyaml.ConfigGroup ) (libyaml.ConfigGroup , error ) {
303
+ func (r * APIConfigRenderer ) applyConfigGroupFieldTemplates (ctx context.Context , builder templates.Builder , configGroup libyaml.ConfigGroup ) (libyaml.ConfigGroup , error ) {
289
304
// configgroup doesn't have a hidden attribute, so if the config group is hidden, we should
290
- // set all items as hidden. this is called after resolveConfigItem and will override all hidden
305
+ // set all items as hidden. this is called after applyConfigItemFieldTemplates and will override all hidden
291
306
// values in items if when is set
292
307
builtWhen , err := builder .String (configGroup .When )
293
308
if err != nil {
@@ -314,7 +329,7 @@ func (r *APIConfigRenderer) resolveConfigGroup(ctx context.Context, builder temp
314
329
return configGroup , nil
315
330
}
316
331
317
- func (r * APIConfigRenderer ) resolveConfigItem (ctx context.Context , builder templates.Builder , configItem * libyaml.ConfigItem ) (* libyaml.ConfigItem , error ) {
332
+ func (r * APIConfigRenderer ) applyConfigItemFieldTemplates (ctx context.Context , builder templates.Builder , configItem * libyaml.ConfigItem ) (* libyaml.ConfigItem , error ) {
318
333
// filters
319
334
var filters []string
320
335
for _ , filter := range configItem .Filters {
0 commit comments