@@ -12,8 +12,8 @@ import (
1212 "github.com/loft-sh/devspace/pkg/devspace/plugin"
1313 "github.com/loft-sh/devspace/pkg/devspace/upgrade"
1414
15- "github.com/loft-sh/devspace/pkg/devspace/config/loader/expression"
1615 "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable"
16+ "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable/expression"
1717 "github.com/mitchellh/go-homedir"
1818 "github.com/pkg/errors"
1919 "gopkg.in/yaml.v2"
@@ -273,15 +273,6 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
273273 options .Profiles = []string {generatedConfig .ActiveProfile }
274274 }
275275
276- // create a new variable resolver
277- resolver := l .newVariableResolver (generatedConfig , absPath , options , log )
278-
279- // parse cli --var's, the resolver will cache them for us
280- _ , err = resolver .ConvertFlags (options .Vars )
281- if err != nil {
282- return nil , nil , nil , err
283- }
284-
285276 // copy raw config
286277 copiedRawConfig , err := copyRaw (rawConfig )
287278 if err != nil {
@@ -300,14 +291,23 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
300291 return nil , nil , nil , err
301292 }
302293
294+ // create a new variable resolver
295+ resolver := l .newVariableResolver (generatedConfig , absPath , options , vars , log )
296+
297+ // parse cli --var's, the resolver will cache them for us
298+ _ , err = resolver .ConvertFlags (options .Vars )
299+ if err != nil {
300+ return nil , nil , nil , err
301+ }
302+
303303 // prepare profiles
304- copiedRawConfig , err = prepareProfiles (copiedRawConfig , resolver , filepath . Dir ( absPath ), vars )
304+ copiedRawConfig , err = prepareProfiles (copiedRawConfig , resolver )
305305 if err != nil {
306306 return nil , nil , nil , err
307307 }
308308
309309 // apply the profiles
310- copiedRawConfig , err = l .applyProfiles (copiedRawConfig , options , resolver , vars , log )
310+ copiedRawConfig , err = l .applyProfiles (copiedRawConfig , options , resolver , log )
311311 if err != nil {
312312 return nil , nil , nil , err
313313 }
@@ -318,6 +318,9 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
318318 return nil , nil , nil , err
319319 }
320320
321+ // update the used vars in the resolver
322+ resolver .UpdateVars (vars )
323+
321324 // validate variables
322325 err = validateVars (vars )
323326 if err != nil {
@@ -328,7 +331,7 @@ func (l *configLoader) parseConfig(absPath string, rawConfig map[interface{}]int
328331 delete (copiedRawConfig , "vars" )
329332
330333 // parse the config
331- latestConfig , err := parser .Parse (rawConfig , copiedRawConfig , vars , resolver , log )
334+ latestConfig , err := parser .Parse (rawConfig , copiedRawConfig , resolver , log )
332335 if err != nil {
333336 return nil , nil , nil , err
334337 }
@@ -440,13 +443,13 @@ func validateProfile(profile interface{}) error {
440443 return nil
441444}
442445
443- func prepareProfiles (config map [interface {}]interface {}, resolver variable.Resolver , dir string , vars [] * latest. Variable ) (map [interface {}]interface {}, error ) {
446+ func prepareProfiles (config map [interface {}]interface {}, resolver variable.Resolver ) (map [interface {}]interface {}, error ) {
444447 rawProfiles := config ["profiles" ]
445448 if rawProfiles == nil {
446449 return config , nil
447450 }
448451
449- resolved , err := resolve (rawProfiles , resolver , vars )
452+ resolved , err := resolve (rawProfiles , resolver )
450453 if err != nil {
451454 return nil , err
452455 }
@@ -457,7 +460,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
457460 }
458461
459462 for idx , profile := range profiles {
460- resolvedProfile , err := resolve (profile , resolver , vars )
463+ resolvedProfile , err := resolve (profile , resolver )
461464 if err != nil {
462465 return nil , err
463466 }
@@ -469,7 +472,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
469472
470473 // Resolve merge field
471474 if profileMap ["merge" ] != nil {
472- merge , err := resolve (profileMap ["merge" ], resolver , vars )
475+ merge , err := resolve (profileMap ["merge" ], resolver )
473476 if err != nil {
474477 return nil , err
475478 }
@@ -478,7 +481,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
478481
479482 // Resolve patches field
480483 if profileMap ["patches" ] != nil {
481- patches , err := resolve (profileMap ["patches" ], resolver , vars )
484+ patches , err := resolve (profileMap ["patches" ], resolver )
482485 if err != nil {
483486 return nil , err
484487 }
@@ -487,7 +490,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
487490
488491 // Resolve replace field
489492 if profileMap ["replace" ] != nil {
490- replace , err := resolve (profileMap ["replace" ], resolver , vars )
493+ replace , err := resolve (profileMap ["replace" ], resolver )
491494 if err != nil {
492495 return nil , err
493496 }
@@ -496,7 +499,7 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
496499
497500 // Resolve strategicMerge field
498501 if profileMap ["strategicMerge" ] != nil {
499- strategicMerge , err := resolve (profileMap ["strategicMerge" ], resolver , vars )
502+ strategicMerge , err := resolve (profileMap ["strategicMerge" ], resolver )
500503 if err != nil {
501504 return nil , err
502505 }
@@ -517,19 +520,19 @@ func prepareProfiles(config map[interface{}]interface{}, resolver variable.Resol
517520 return config , nil
518521}
519522
520- func resolve (data interface {}, resolver variable.Resolver , vars [] * latest. Variable ) (interface {}, error ) {
523+ func resolve (data interface {}, resolver variable.Resolver ) (interface {}, error ) {
521524 _ , ok := data .(string )
522525 if ! ok {
523526 return data , nil
524527 }
525528
526529 // find and fill variables
527- return resolver .FillVariables (data , vars )
530+ return resolver .FillVariables (data )
528531}
529532
530- func (l * configLoader ) applyProfiles (data map [interface {}]interface {}, options * ConfigOptions , resolver variable.Resolver , vars [] * latest. Variable , log log.Logger ) (map [interface {}]interface {}, error ) {
533+ func (l * configLoader ) applyProfiles (data map [interface {}]interface {}, options * ConfigOptions , resolver variable.Resolver , log log.Logger ) (map [interface {}]interface {}, error ) {
531534 // Get profile
532- profiles , err := versions .ParseProfile (filepath .Dir (l .configPath ), data , options .Profiles , options .ProfileRefresh , options .DisableProfileActivation , resolver , vars , log )
535+ profiles , err := versions .ParseProfile (filepath .Dir (l .configPath ), data , options .Profiles , options .ProfileRefresh , options .DisableProfileActivation , resolver , log )
533536 if err != nil {
534537 return nil , err
535538 }
@@ -567,15 +570,15 @@ func (l *configLoader) applyProfiles(data map[interface{}]interface{}, options *
567570 return data , nil
568571}
569572
570- func (l * configLoader ) newVariableResolver (generatedConfig * generated.Config , absPath string , options * ConfigOptions , log log.Logger ) variable.Resolver {
573+ func (l * configLoader ) newVariableResolver (generatedConfig * generated.Config , absPath string , options * ConfigOptions , vars [] * latest. Variable , log log.Logger ) variable.Resolver {
571574 return variable .NewResolver (generatedConfig .Vars , & variable.PredefinedVariableOptions {
572575 BasePath : options .BasePath ,
573576 ConfigPath : absPath ,
574577 KubeContextFlag : options .KubeContext ,
575578 NamespaceFlag : options .Namespace ,
576579 KubeConfigLoader : l .kubeConfigLoader ,
577580 Profile : GetLastProfile (options .Profiles ),
578- }, log )
581+ }, vars , log )
579582}
580583
581584func GetLastProfile (profiles []string ) string {
0 commit comments