@@ -274,16 +274,16 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
274274 }
275275
276276 // create a new variable resolver
277- resolver := l .newVariableResolver (generatedConfig , options , log )
277+ resolver := l .newVariableResolver (generatedConfig , absPath , options , log )
278278
279- // copy raw config
280- copiedRawConfig , err := copyRaw ( rawConfig )
279+ // parse cli --var's, the resolver will cache them for us
280+ _ , err = resolver . ConvertFlags ( options . Vars )
281281 if err != nil {
282282 return nil , nil , nil , err
283283 }
284284
285- // parse cli --var's, the resolver will cache them for us
286- _ , err = resolver . ConvertFlags ( options . Vars )
285+ // copy raw config
286+ copiedRawConfig , err := copyRaw ( rawConfig )
287287 if err != nil {
288288 return nil , nil , nil , err
289289 }
@@ -294,6 +294,12 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
294294 return nil , nil , nil , err
295295 }
296296
297+ // validate variables
298+ err = validateVars (vars )
299+ if err != nil {
300+ return nil , nil , nil , err
301+ }
302+
297303 // prepare profiles
298304 copiedRawConfig , err = prepareProfiles (copiedRawConfig , resolver , filepath .Dir (absPath ), vars )
299305 if err != nil {
@@ -306,7 +312,7 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
306312 return nil , nil , nil , err
307313 }
308314
309- // Load defined variables
315+ // Load defined variables again (might be changed through profiles)
310316 vars , err = versions .ParseVariables (copiedRawConfig , log )
311317 if err != nil {
312318 return nil , nil , nil , err
@@ -322,7 +328,7 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
322328 delete (copiedRawConfig , "vars" )
323329
324330 // parse the config
325- latestConfig , err := parser .Parse (absPath , rawConfig , copiedRawConfig , vars , resolver , options , log )
331+ latestConfig , err := parser .Parse (rawConfig , copiedRawConfig , vars , resolver , log )
326332 if err != nil {
327333 return nil , nil , nil , err
328334 }
@@ -440,7 +446,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
440446 return config , nil
441447 }
442448
443- resolved , err := resolve (rawProfiles , resolver , dir , vars )
449+ resolved , err := resolve (rawProfiles , resolver , vars )
444450 if err != nil {
445451 return nil , err
446452 }
@@ -451,7 +457,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
451457 }
452458
453459 for idx , profile := range profiles {
454- resolvedProfile , err := resolve (profile , resolver , dir , vars )
460+ resolvedProfile , err := resolve (profile , resolver , vars )
455461 if err != nil {
456462 return nil , err
457463 }
@@ -463,7 +469,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
463469
464470 // Resolve merge field
465471 if profileMap ["merge" ] != nil {
466- merge , err := resolve (profileMap ["merge" ], resolver , dir , vars )
472+ merge , err := resolve (profileMap ["merge" ], resolver , vars )
467473 if err != nil {
468474 return nil , err
469475 }
@@ -472,7 +478,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
472478
473479 // Resolve patches field
474480 if profileMap ["patches" ] != nil {
475- patches , err := resolve (profileMap ["patches" ], resolver , dir , vars )
481+ patches , err := resolve (profileMap ["patches" ], resolver , vars )
476482 if err != nil {
477483 return nil , err
478484 }
@@ -481,7 +487,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
481487
482488 // Resolve replace field
483489 if profileMap ["replace" ] != nil {
484- replace , err := resolve (profileMap ["replace" ], resolver , dir , vars )
490+ replace , err := resolve (profileMap ["replace" ], resolver , vars )
485491 if err != nil {
486492 return nil , err
487493 }
@@ -490,7 +496,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
490496
491497 // Resolve strategicMerge field
492498 if profileMap ["strategicMerge" ] != nil {
493- strategicMerge , err := resolve (profileMap ["strategicMerge" ], resolver , dir , vars )
499+ strategicMerge , err := resolve (profileMap ["strategicMerge" ], resolver , vars )
494500 if err != nil {
495501 return nil , err
496502 }
@@ -511,20 +517,14 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
511517 return config , nil
512518}
513519
514- func resolve (data interface {}, resolver variable.Resolver , dir string , vars []* latest.Variable ) (interface {}, error ) {
520+ func resolve (data interface {}, resolver variable.Resolver , vars []* latest.Variable ) (interface {}, error ) {
515521 _ , ok := data .(string )
516522 if ! ok {
517523 return data , nil
518524 }
519525
520- // first resolve variables
521- data , err := resolver .FindAndFillVariables (data , vars )
522- if err != nil {
523- return nil , err
524- }
525-
526- // evaluate expressions
527- return expression .ResolveAllExpressions (data , dir )
526+ // find and fill variables
527+ return resolver .FillVariables (data , vars )
528528}
529529
530530func (l * configLoader ) applyProfiles (data map [interface {}]interface {}, options * ConfigOptions , resolver variable.Resolver , vars []* latest.Variable , log log.Logger ) (map [interface {}]interface {}, error ) {
@@ -567,10 +567,10 @@ func (l *configLoader) applyProfiles(data map[interface{}]interface{}, options *
567567 return data , nil
568568}
569569
570- func (l * configLoader ) newVariableResolver (generatedConfig * generated.Config , options * ConfigOptions , log log.Logger ) variable.Resolver {
570+ func (l * configLoader ) newVariableResolver (generatedConfig * generated.Config , absPath string , options * ConfigOptions , log log.Logger ) variable.Resolver {
571571 return variable .NewResolver (generatedConfig .Vars , & variable.PredefinedVariableOptions {
572572 BasePath : options .BasePath ,
573- ConfigPath : ConfigPath ( l . configPath ) ,
573+ ConfigPath : absPath ,
574574 KubeContextFlag : options .KubeContext ,
575575 NamespaceFlag : options .Namespace ,
576576 KubeConfigLoader : l .kubeConfigLoader ,
0 commit comments