Added toYamlPretty template function to avoid errors with the yamllint tool in pipelines

Signed-off-by: Edson Franco <efranco@technisys.com>
pull/12849/head
Edson Franco 2 years ago
parent 15d116b854
commit 6e6a7d489f
No known key found for this signature in database
GPG Key ID: 8DB62A35C7B5F232

@ -45,7 +45,7 @@ require (
k8s.io/klog/v2 v2.110.1 k8s.io/klog/v2 v2.110.1
k8s.io/kubectl v0.29.0 k8s.io/kubectl v0.29.0
oras.land/oras-go v1.2.4 oras.land/oras-go v1.2.4
sigs.k8s.io/yaml v1.3.0 sigs.k8s.io/yaml v1.4.0
) )
require ( require (

@ -596,3 +596,5 @@ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+s
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=

@ -25,6 +25,7 @@ import (
"github.com/BurntSushi/toml" "github.com/BurntSushi/toml"
"github.com/Masterminds/sprig/v3" "github.com/Masterminds/sprig/v3"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
goYaml "sigs.k8s.io/yaml/goyaml.v3"
) )
// funcMap returns a mapping of all of the functions that Engine has. // funcMap returns a mapping of all of the functions that Engine has.
@ -49,6 +50,7 @@ func funcMap() template.FuncMap {
extra := template.FuncMap{ extra := template.FuncMap{
"toToml": toTOML, "toToml": toTOML,
"toYaml": toYAML, "toYaml": toYAML,
"toYamlPretty": toYAMLPretty,
"fromYaml": fromYAML, "fromYaml": fromYAML,
"fromYamlArray": fromYAMLArray, "fromYamlArray": fromYAMLArray,
"toJson": toJSON, "toJson": toJSON,
@ -88,6 +90,23 @@ func toYAML(v interface{}) string {
return strings.TrimSuffix(string(data), "\n") return strings.TrimSuffix(string(data), "\n")
} }
// toYAMLPretty takes an interface, marshals it to yaml, and returns a string. It will
// always return a string, even on marshal error (empty string).
//
// This is designed to be called from a template.
func toYAMLPretty(v interface{}) string {
var data bytes.Buffer
encoder := goYaml.NewEncoder(&data)
encoder.SetIndent(2)
err := encoder.Encode(v)
if err != nil {
// Swallow errors inside of a template.
return ""
}
return strings.TrimSuffix(data.String(), "\n")
}
// fromYAML converts a YAML document into a map[string]interface{}. // fromYAML converts a YAML document into a map[string]interface{}.
// //
// This is not a general-purpose YAML parser, and will not parse all valid // This is not a general-purpose YAML parser, and will not parse all valid

@ -33,6 +33,10 @@ func TestFuncs(t *testing.T) {
tpl: `{{ toYaml . }}`, tpl: `{{ toYaml . }}`,
expect: `foo: bar`, expect: `foo: bar`,
vars: map[string]interface{}{"foo": "bar"}, vars: map[string]interface{}{"foo": "bar"},
}, {
tpl: `{{ toYamlPretty . }}`,
expect: "baz:\n - 1\n - 2\n - 3",
vars: map[string]interface{}{"baz": []int{1, 2, 3}},
}, { }, {
tpl: `{{ toToml . }}`, tpl: `{{ toToml . }}`,
expect: "foo = \"bar\"\n", expect: "foo = \"bar\"\n",

Loading…
Cancel
Save