fix(engine): make toToml return empty string on error

`toToml` was returning `err.Error()` on marshal failure, inconsistent
with `toYaml` and `toJson` — both of which swallow errors and return
an empty string to avoid embedding raw error text in rendered templates.

Align `toToml` with the same convention. Charts relying on the old
behavior (checking for an error string in the output) should use
`mustToToml` (available since #XXXX) to get an explicit failure instead.

Closes #31430

Signed-off-by: Ilya Kiselev <kis-ilya-a@yandex.ru>
pull/31958/head
Ilya Kiselev 6 months ago
parent a8ab76e86f
commit 9dd476a579

@ -168,7 +168,8 @@ func fromYAMLArray(str string) []any {
} }
// toTOML takes an interface, marshals it to toml, and returns a string. // toTOML takes an interface, marshals it to toml, and returns a string.
// On marshal error it returns the error string. // On marshal error it returns an empty string (errors are swallowed),
// consistent with toYAML and toJSON.
// //
// This is designed to be called from a template. Use mustToToml if you need // This is designed to be called from a template. Use mustToToml if you need
// the template to fail hard on marshal errors. // the template to fail hard on marshal errors.
@ -177,7 +178,8 @@ func toTOML(v any) string {
e := toml.NewEncoder(b) e := toml.NewEncoder(b)
err := e.Encode(v) err := e.Encode(v)
if err != nil { if err != nil {
return err.Error() // Swallow errors inside of a template.
return ""
} }
return b.String() return b.String()
} }

@ -180,6 +180,10 @@ keyInElement1 = "valueInElement1"`,
tpl: `{{ mustToToml . }}`, tpl: `{{ mustToToml . }}`,
expect: "foo = \"bar\"\n", // should succeed and return TOML string expect: "foo = \"bar\"\n", // should succeed and return TOML string
vars: map[string]string{"foo": "bar"}, vars: map[string]string{"foo": "bar"},
}, {
tpl: `{{ toToml . }}`,
expect: "", // should return empty string and swallow error (not err.Error())
vars: map[int]string{1: "one"}, // non-string key is invalid in TOML
}, },
} }

Loading…
Cancel
Save