fix: allow null values from --values to override parent chart values

Fixes #31919. Null values in override files now correctly remove parent chart defaults.

Made-with: Cursor
pull/31946/head
themavik 7 months ago
parent 42f78ba60e
commit a0d4a74c5e

@ -302,28 +302,20 @@ func coalesceTablesFullKey(printf printFn, dst, src map[string]any, prefix strin
if dst == nil { if dst == nil {
return src return src
} }
// Track original non-nil src keys before modifying src
// This lets us distinguish between user nullifying a chart default vs
// user setting nil for a key not in chart defaults.
srcOriginalNonNil := make(map[string]bool)
for key, val := range src {
if val != nil {
srcOriginalNonNil[key] = true
}
}
for key, val := range dst { for key, val := range dst {
if val == nil { if val == nil {
src[key] = nil if _, inSrc := src[key]; inSrc {
src[key] = nil
}
} }
} }
// Because dest has higher precedence than src, dest values override src // Because dest has higher precedence than src, dest values override src
// values. // values.
for key, val := range src { for key, val := range src {
fullkey := concatPrefix(prefix, key) fullkey := concatPrefix(prefix, key)
if dv, ok := dst[key]; ok && !merge && dv == nil && srcOriginalNonNil[key] { if dv, ok := dst[key]; ok && !merge && dv == nil {
// When coalescing (not merging), if dst has nil and src has a non-nil // When coalescing (not merging), if dst has nil, remove the key.
// value, the user is nullifying a chart default - remove the key. // This allows null from --values to override and remove parent chart defaults.
// But if src also has nil (or key not in src), preserve the nil
delete(dst, key) delete(dst, key)
} else if !ok { } else if !ok {
// key not in user values, preserve src value (including nil) // key not in user values, preserve src value (including nil)

Loading…
Cancel
Save