Unverified Commit d325d2a9 authored by Helgi Þormar Þorbjörnsson's avatar Helgi Þormar Þorbjörnsson Committed by Matthew Fisher
Browse files

Return empty string instead of nil when linting on required (#4748)


* Return empty string instead of nil when linting on required

This allows lint to work in scenarios when required is used in secrets or it's output is passed to another function.
Due to lint mode no longer failing on missing value in required it is passing nil through which not all functions can accept.

Fixes #4747
Signed-off-by: default avatarHelgi Þorbjörnsson <helgith@gmail.com>

* Apply suggestions from code review
Co-Authored-By: default avatarhelgi <70530+helgi@users.noreply.github.com>
Signed-off-by: default avatarHelgi Þorbjörnsson <helgith@gmail.com>

* Add tests
Signed-off-by: default avatarHelgi Þorbjörnsson <helgith@gmail.com>
(cherry picked from commit 15703cb1)
parent 3071a16d
Showing with 29 additions and 3 deletions
+29 -3
...@@ -159,9 +159,10 @@ func (e *Engine) alterFuncMap(t *template.Template, referenceTpls map[string]ren ...@@ -159,9 +159,10 @@ func (e *Engine) alterFuncMap(t *template.Template, referenceTpls map[string]ren
if e.LintMode { if e.LintMode {
// Don't fail on missing required values when linting // Don't fail on missing required values when linting
log.Printf("[INFO] Missing required value: %s", warn) log.Printf("[INFO] Missing required value: %s", warn)
return val, nil return "", nil
} }
return val, fmt.Errorf(warn) // Convert nil to "" in case required is piped into other functions
return "", fmt.Errorf(warn)
} else if _, ok := val.(string); ok { } else if _, ok := val.(string); ok {
if val == "" { if val == "" {
if e.LintMode { if e.LintMode {
......
...@@ -466,7 +466,6 @@ func TestAlterFuncMap(t *testing.T) { ...@@ -466,7 +466,6 @@ func TestAlterFuncMap(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
expectStr := "All your base are belong to us" expectStr := "All your base are belong to us"
if gotStr := outReq["conan/templates/quote"]; gotStr != expectStr { if gotStr := outReq["conan/templates/quote"]; gotStr != expectStr {
t.Errorf("Expected %q, got %q (%v)", expectStr, gotStr, outReq) t.Errorf("Expected %q, got %q (%v)", expectStr, gotStr, outReq)
...@@ -476,6 +475,32 @@ func TestAlterFuncMap(t *testing.T) { ...@@ -476,6 +475,32 @@ func TestAlterFuncMap(t *testing.T) {
t.Errorf("Expected %q, got %q (%v)", expectNum, gotNum, outReq) t.Errorf("Expected %q, got %q (%v)", expectNum, gotNum, outReq)
} }
// test required without passing in needed values with lint mode on
// verifies lint replaces required with an empty string (should not fail)
lintValues := chartutil.Values{
"Values": chartutil.Values{
"who": "us",
},
"Chart": reqChart.Metadata,
"Release": chartutil.Values{
"Name": "That 90s meme",
},
}
e := New()
e.LintMode = true
outReq, err = e.Render(reqChart, lintValues)
if err != nil {
t.Fatal(err)
}
expectStr = "All your base are belong to us"
if gotStr := outReq["conan/templates/quote"]; gotStr != expectStr {
t.Errorf("Expected %q, got %q (%v)", expectStr, gotStr, outReq)
}
expectNum = "All of them!"
if gotNum := outReq["conan/templates/bases"]; gotNum != expectNum {
t.Errorf("Expected %q, got %q (%v)", expectNum, gotNum, outReq)
}
tplChart := &chart.Chart{ tplChart := &chart.Chart{
Metadata: &chart.Metadata{Name: "TplFunction"}, Metadata: &chart.Metadata{Name: "TplFunction"},
Templates: []*chart.Template{ Templates: []*chart.Template{
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment