From ddd65eda580c59f0895f30f8193f9f9ae17c2640 Mon Sep 17 00:00:00 2001 From: Marcin Owsiany Date: Tue, 3 Mar 2020 08:35:11 +0100 Subject: [PATCH] KEP-25: Implementation of toYaml function. (#1375) Signed-off-by: Marcin Owsiany --- pkg/engine/renderer/engine.go | 2 ++ pkg/engine/renderer/engine_test.go | 8 ++++++++ pkg/engine/renderer/functions.go | 9 +++++++++ 3 files changed, 19 insertions(+) create mode 100644 pkg/engine/renderer/functions.go diff --git a/pkg/engine/renderer/engine.go b/pkg/engine/renderer/engine.go index 6eccb158e..2d2802276 100644 --- a/pkg/engine/renderer/engine.go +++ b/pkg/engine/renderer/engine.go @@ -34,6 +34,8 @@ type Engine struct { func New() *Engine { f := sprig.TxtFuncMap() + f["toYaml"] = ToYaml + // Prevent environment access inside the running KUDO Controller funcs := []string{"env", "expandenv", "base", "dir", "clean", "ext", "isAbs"} diff --git a/pkg/engine/renderer/engine_test.go b/pkg/engine/renderer/engine_test.go index b43bb299a..7f41a5796 100644 --- a/pkg/engine/renderer/engine_test.go +++ b/pkg/engine/renderer/engine_test.go @@ -22,6 +22,14 @@ func TestRender(t *testing.T) { }, expected: "Name: Bob User"}, {name: "function", template: "Name: {{ .Params.Name | upper }}", params: map[string]interface{}{"Name": "hello"}, expected: "Name: HELLO"}, + { + name: "toYaml", + template: "{{ toYaml .Params.Dict | trim | indent 2 }}", + params: map[string]interface{}{ + "Dict": map[string]string{"Foo": "Bar", "Baz": "Quux"}, + }, + expected: " Baz: Quux\n Foo: Bar", + }, } engine := New() diff --git a/pkg/engine/renderer/functions.go b/pkg/engine/renderer/functions.go new file mode 100644 index 000000000..44c09f19c --- /dev/null +++ b/pkg/engine/renderer/functions.go @@ -0,0 +1,9 @@ +package renderer + +import "gopkg.in/yaml.v2" + +// ToYaml takes any value, and returns its YAML representation as a string. +func ToYaml(v interface{}) (string, error) { + out, err := yaml.Marshal(v) + return string(out), err +}