Skip to content

Commit 49ca573

Browse files
committed
fix: allow env as vars
1 parent ff15f7e commit 49ca573

3 files changed

Lines changed: 30 additions & 9 deletions

File tree

e2e/tests/config/config.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1794,6 +1794,8 @@ var _ = DevSpaceDescribe("config", func() {
17941794
framework.ExpectNoError(err)
17951795
defer framework.CleanupTempDir(initialDir, tempDir)
17961796

1797+
_ = os.Setenv("FROM_ENV", "FROM_ENV")
1798+
17971799
// set the question answer func here
17981800
f.SetAnswerFunc(func(params *survey.QuestionOptions) (string, error) {
17991801
return "test", nil
@@ -1804,7 +1806,8 @@ var _ = DevSpaceDescribe("config", func() {
18041806
framework.ExpectNoError(err)
18051807

18061808
// check if variables were loaded correctly
1807-
framework.ExpectEqual(len(config.Variables()), 3+len(variable.AlwaysResolvePredefinedVars))
1809+
framework.ExpectEqual(len(config.Variables()), 4+len(variable.AlwaysResolvePredefinedVars))
1810+
framework.ExpectEqual(config.Variables()["FROM_ENV"], "FROM_ENV")
18081811
framework.ExpectEqual(len(config.LocalCache().ListVars()), 1)
18091812
test1, _ := config.LocalCache().GetVar("TEST_1")
18101813
framework.ExpectEqual(test1, "test")

e2e/tests/config/testdata/vars/devspace.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ deployments:
1818
- ${TEST_1}
1919
- ${TEST_2}
2020
- ${TEST_OVERRIDE}
21+
- ${FROM_ENV}
2122

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package variable
33
import (
44
"context"
55
"fmt"
6+
"os"
67
"path/filepath"
78
"regexp"
89
"strings"
@@ -152,7 +153,7 @@ func (r *resolver) findVariablesInclude(haystack interface{}, include []*regexp.
152153

153154
// filter out runtime environment variables
154155
for k := range varsUsed {
155-
if !strings.HasPrefix(k, "runtime.") && !IsPredefinedVariable(k) && r.vars[k] == nil {
156+
if !strings.HasPrefix(k, "runtime.") && !IsPredefinedVariable(k) && r.getVariableDefinition(k) == nil {
156157
delete(varsUsed, k)
157158
}
158159
}
@@ -164,6 +165,23 @@ func (r *resolver) FindVariables(haystack interface{}) ([]*latest.Variable, erro
164165
return r.findVariablesInclude(haystack, nil)
165166
}
166167

168+
func (r *resolver) getVariableDefinition(name string) *latest.Variable {
169+
definition, ok := r.vars[name]
170+
if !ok {
171+
value := os.Getenv(name)
172+
if value != "" {
173+
return &latest.Variable{
174+
Name: name,
175+
Value: value,
176+
}
177+
}
178+
179+
return nil
180+
}
181+
182+
return definition
183+
}
184+
167185
func (r *resolver) orderVariables(vars map[string]bool) ([]*latest.Variable, error) {
168186
root := graph.NewNode("root", nil)
169187
g := graph.NewGraphOf(root, "variable")
@@ -174,9 +192,8 @@ func (r *resolver) orderVariables(vars map[string]bool) ([]*latest.Variable, err
174192
definition = &latest.Variable{Name: name}
175193
} else {
176194
// check if has definition
177-
var ok bool
178-
definition, ok = r.vars[name]
179-
if !ok {
195+
definition = r.getVariableDefinition(name)
196+
if definition == nil {
180197
continue
181198
}
182199
}
@@ -219,8 +236,8 @@ func (r *resolver) insertVariableGraph(g *graph.Graph, node *latest.Variable) er
219236

220237
parents := r.findVariablesInDefinition(node)
221238
for parent := range parents {
222-
parentDefinition, ok := r.vars[parent]
223-
if !ok {
239+
parentDefinition := r.getVariableDefinition(parent)
240+
if parentDefinition == nil {
224241
continue
225242
}
226243

@@ -428,7 +445,7 @@ func (r *resolver) findVariablesInDefinition(definition *latest.Variable) map[st
428445

429446
// filter out runtime environment variables and non existing ones
430447
for k := range varsUsed {
431-
if !strings.HasPrefix(k, "runtime.") && !IsPredefinedVariable(k) && r.vars[k] == nil {
448+
if !strings.HasPrefix(k, "runtime.") && !IsPredefinedVariable(k) && r.getVariableDefinition(k) == nil {
432449
delete(varsUsed, k)
433450
}
434451
}
@@ -510,7 +527,7 @@ func (r *resolver) resolveDefinitionString(ctx context.Context, str string, defi
510527
// check if its a predefined variable
511528
variable, err := NewPredefinedVariable(varName, r.options, r.log)
512529
if err != nil {
513-
if r.vars[varName] == nil {
530+
if r.getVariableDefinition(varName) == nil {
514531
return "${" + varName + "}", nil
515532
}
516533

0 commit comments

Comments
 (0)