diff --git a/pkg/runner/expression.go b/pkg/runner/expression.go index c9e5618..2d52c02 100644 --- a/pkg/runner/expression.go +++ b/pkg/runner/expression.go @@ -65,22 +65,34 @@ func (ee *expressionEvaluator) Evaluate(in string) (string, error) { if err != nil { return "", err } + if val.IsNull() || val.IsUndefined() { + return "", nil + } return val.ToString() } func (ee *expressionEvaluator) Interpolate(in string) string { errList := make([]error, 0) - out := pattern.ReplaceAllStringFunc(in, func(match string) string { - expression := strings.TrimPrefix(strings.TrimSuffix(match, suffix), prefix) - evaluated, err := ee.Evaluate(expression) - if err != nil { - errList = append(errList, err) + + out := in + for { + out = pattern.ReplaceAllStringFunc(in, func(match string) string { + expression := strings.TrimPrefix(strings.TrimSuffix(match, suffix), prefix) + evaluated, err := ee.Evaluate(expression) + if err != nil { + errList = append(errList, err) + } + return evaluated + }) + if len(errList) > 0 { + logrus.Errorf("Unable to interpolate string '%s' - %v", in, errList) + break } - return evaluated - }) - if len(errList) > 0 { - logrus.Errorf("Unable to interpolate string '%s' - %v", in, errList) - return in + if out == in { + // no replacement occurred, we're done! + break + } + in = out } return out }