fix: added extra conditional to warning about non-table values for expected tables

Port change to charts v3

Signed-off-by: Jesse Simpson <jesse.simpson36@gmail.com>
pull/12812/head
Jesse Simpson 1 month ago
parent a92794b4ff
commit 9d578f27ef
No known key found for this signature in database
GPG Key ID: 237495C89AB0AAFC

@ -300,7 +300,7 @@ func coalesceTablesFullKey(printf printFn, dst, src map[string]interface{}, pref
} else {
printf("warning: cannot overwrite table with non table for %s (%v)", fullkey, val)
}
} else if istable(dv) && val != nil {
} else if istable(dv) && val != nil && isNonEmptyString(val) && isNonEmptyTable(dv) {
printf("warning: destination for %s is a table. Ignoring non-table value (%v)", fullkey, val)
}
}

@ -717,6 +717,72 @@ func TestCoalesceValuesWarnings(t *testing.T) {
}
func TestCoalesceValuesWarningsWithEmptyDefaultMaps(t *testing.T) {
c := withDeps(&chart.Chart{
Metadata: &chart.Metadata{Name: "level1"},
Values: map[string]interface{}{
"something": map[string]interface{}{
"somethingElse": []interface{}{},
},
},
})
vals := map[string]interface{}{
"something": map[string]interface{}{
"somethingElse": map[string]interface{}{},
},
}
warnings := make([]string, 0)
printf := func(format string, v ...interface{}) {
t.Logf(format, v...)
warnings = append(warnings, fmt.Sprintf(format, v...))
}
_, err := coalesce(printf, c, vals, "", false)
if err != nil {
t.Fatal(err)
}
t.Logf("vals: %v", vals)
assert.NotContains(t, warnings, "warning: destination for level1.something.somethingElse is a table. Ignoring non-table value ([])")
}
func TestCoalesceValuesWarningsWithEmptyStringDefault(t *testing.T) {
c := withDeps(&chart.Chart{
Metadata: &chart.Metadata{Name: "level1"},
Values: map[string]interface{}{
"auth": map[string]interface{}{
"existingSecret": "",
},
},
})
vals := map[string]interface{}{
"auth": map[string]interface{}{
"existingSecret": map[string]interface{}{
"name": "secretName",
},
},
}
warnings := make([]string, 0)
printf := func(format string, v ...interface{}) {
t.Logf(format, v...)
warnings = append(warnings, fmt.Sprintf(format, v...))
}
_, err := coalesce(printf, c, vals, "", false)
if err != nil {
t.Fatal(err)
}
t.Logf("vals: %v", vals)
assert.NotContains(t, warnings, "warning: destination for level1.auth.existingSecret is a table. Ignoring non-table value ()")
}
func TestConcatPrefix(t *testing.T) {
assert.Equal(t, "b", concatPrefix("", "b"))
assert.Equal(t, "a.b", concatPrefix("a", "b"))

@ -179,6 +179,20 @@ func istable(v interface{}) bool {
return ok
}
func isNonEmptyTable(val interface{}) bool {
table, ok := val.(map[string]interface{})
if !ok {
return false
}
return len(table) > 0
}
func isNonEmptyString(val interface{}) bool {
valueString := fmt.Sprintf("%v", val)
return valueString != ""
}
// PathValue takes a path that traverses a YAML structure and returns the value at the end of that path.
// The path starts at the root of the YAML structure and is comprised of YAML keys separated by periods.
// Given the following YAML data the value at path "chapter.one.title" is "Loomings".

Loading…
Cancel
Save