Skip to content

Commit 661d6ba

Browse files
committed
refactor: improve variable parsing
1 parent 17285df commit 661d6ba

3 files changed

Lines changed: 15 additions & 10 deletions

File tree

pkg/devspace/config/loader/variable/expression/expression.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@ func ExcludedPath(path string, excluded, included []*regexp.Regexp) bool {
4242
return false
4343
}
4444

45-
func ResolveAllExpressions(ctx context.Context, preparedConfig interface{}, dir string, exclude, include []*regexp.Regexp) (interface{}, error) {
45+
func ResolveAllExpressions(ctx context.Context, preparedConfig interface{}, dir string, exclude, include []*regexp.Regexp, variables map[string]interface{}) (interface{}, error) {
4646
switch t := preparedConfig.(type) {
4747
case string:
48-
return ResolveExpressions(ctx, t, dir)
48+
return ResolveExpressions(ctx, t, dir, variables)
4949
case map[string]interface{}:
5050
err := walk.Walk(t, expressionMatchFn, func(path, value string) (interface{}, error) {
5151
if ExcludedPath(path, exclude, include) {
5252
return value, nil
5353
}
5454

55-
return ResolveExpressions(ctx, value, dir)
55+
return ResolveExpressions(ctx, value, dir, variables)
5656
})
5757
if err != nil {
5858
return nil, err
@@ -62,7 +62,7 @@ func ResolveAllExpressions(ctx context.Context, preparedConfig interface{}, dir
6262
case []interface{}:
6363
for i := range t {
6464
var err error
65-
t[i], err = ResolveAllExpressions(ctx, t[i], dir, exclude, include)
65+
t[i], err = ResolveAllExpressions(ctx, t[i], dir, exclude, include, variables)
6666
if err != nil {
6767
return nil, err
6868
}
@@ -74,12 +74,17 @@ func ResolveAllExpressions(ctx context.Context, preparedConfig interface{}, dir
7474
return preparedConfig, nil
7575
}
7676

77-
func ResolveExpressions(ctx context.Context, value, dir string) (interface{}, error) {
77+
func ResolveExpressions(ctx context.Context, value, dir string, variables map[string]interface{}) (interface{}, error) {
7878
matches := ExpressionMatchRegex.FindAllStringSubmatch(value, -1)
7979
if len(matches) == 0 {
8080
return value, nil
8181
}
8282

83+
vars := map[string]string{}
84+
for k, v := range variables {
85+
vars[k] = fmt.Sprintf("%v", v)
86+
}
87+
8388
out := value
8489
for _, match := range matches {
8590
if len(match) != 2 {
@@ -88,7 +93,7 @@ func ResolveExpressions(ctx context.Context, value, dir string) (interface{}, er
8893

8994
stdout := &bytes.Buffer{}
9095
stderr := &bytes.Buffer{}
91-
err := engine.ExecuteSimpleShellCommand(ctx, dir, stdout, stderr, nil, nil, match[1], os.Args[1:]...)
96+
err := engine.ExecuteSimpleShellCommand(ctx, dir, stdout, stderr, nil, vars, match[1], os.Args[1:]...)
9297
if err != nil {
9398
if len(strings.TrimSpace(stdout.String())) == 0 && len(strings.TrimSpace(stderr.String())) == 0 {
9499
if exitError, ok := err.(*exec.ExitError); ok && exitError.ExitCode() == 1 {

pkg/devspace/config/loader/variable/resolver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func (r *resolver) FindVariables(haystack interface{}) ([]*latest.Variable, erro
130130

131131
// add always resolve variables
132132
for _, v := range r.vars {
133-
if v.AlwaysResolve {
133+
if v.AlwaysResolve || v.Value != nil {
134134
varsUsed[v.Name] = true
135135
}
136136
}
@@ -242,7 +242,7 @@ func (r *resolver) FillVariablesInclude(ctx context.Context, haystack interface{
242242
}
243243

244244
// resolve expressions
245-
preparedConfigInterface, err = expression.ResolveAllExpressions(ctx, preparedConfigInterface, filepath.Dir(r.options.ConfigPath), nil, paths)
245+
preparedConfigInterface, err = expression.ResolveAllExpressions(ctx, preparedConfigInterface, filepath.Dir(r.options.ConfigPath), nil, paths, r.memoryCache)
246246
if err != nil {
247247
return nil, err
248248
}
@@ -272,7 +272,7 @@ func (r *resolver) FillVariablesExclude(ctx context.Context, haystack interface{
272272
}
273273

274274
// resolve expressions
275-
preparedConfigInterface, err = expression.ResolveAllExpressions(ctx, preparedConfigInterface, filepath.Dir(r.options.ConfigPath), paths, nil)
275+
preparedConfigInterface, err = expression.ResolveAllExpressions(ctx, preparedConfigInterface, filepath.Dir(r.options.ConfigPath), paths, nil, r.memoryCache)
276276
if err != nil {
277277
return nil, err
278278
}

pkg/devspace/config/loader/variable/runtime/runtime_resolver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (r *runtimeResolver) FillRuntimeVariablesWithRebuild(ctx context.Context, h
5757
}
5858

5959
// resolve expressions
60-
haystack, err = expression.ResolveAllExpressions(ctx, haystack, r.workingDirectory, nil, nil)
60+
haystack, err = expression.ResolveAllExpressions(ctx, haystack, r.workingDirectory, nil, nil, config.Variables())
6161
if err != nil {
6262
return false, nil, err
6363
}

0 commit comments

Comments
 (0)