diff --git a/examples/support-bundle/sample-supportbundle.yaml b/examples/support-bundle/sample-supportbundle.yaml index 40dbc67d..fcfbce3d 100644 --- a/examples/support-bundle/sample-supportbundle.yaml +++ b/examples/support-bundle/sample-supportbundle.yaml @@ -8,7 +8,7 @@ spec: selector: - app=example - component=nginx - namespace: repl{{ Namespace }} + namespace: default limits: maxAge: 720h # 30*24 maxLines: 10000 diff --git a/pkg/convert/templates.go b/pkg/convert/templates.go index d921b2cc..76eb1e0d 100644 --- a/pkg/convert/templates.go +++ b/pkg/convert/templates.go @@ -25,20 +25,35 @@ func Bool(text string, data interface{}) (bool, error) { } func Execute(text string, data interface{}) (string, error) { - tmpl, err := template.New(text). - Delims("{{repl", "}}"). - Funcs(funcMap). - Parse(text) - if err != nil { - return "", err + delims := []struct { + ldelim string + rdelim string + }{ + {"{{repl", "}}"}, + {"repl{{", "}}"}, } - var buf bytes.Buffer - err = func() (err error) { - defer errRecover(&err) - err = tmpl.Execute(&buf, data) - return - }() - return buf.String(), err + + curText := text + for _, d := range delims { + tmpl, err := template.New(curText). + Delims(d.ldelim, d.rdelim). + Funcs(funcMap). + Parse(curText) + if err != nil { + return "", err + } + var buf bytes.Buffer + err = func() (err error) { + defer errRecover(&err) + err = tmpl.Execute(&buf, data) + return + }() + if err != nil { + return "", err + } + curText = buf.String() + } + return curText, nil } func RegisterFunc(key string, fn interface{}) { diff --git a/pkg/convert/templates_test.go b/pkg/convert/templates_test.go new file mode 100644 index 00000000..3604575c --- /dev/null +++ b/pkg/convert/templates_test.go @@ -0,0 +1,45 @@ +package convert + +import "testing" + +func TestExecute(t *testing.T) { + type args struct { + text string + data interface{} + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + { + name: "{{repl", + args: args{ + text: "{{repl printf \"%s\" \"hello\"}}", + data: nil, + }, + want: "hello", + }, + { + name: "repl{{", + args: args{ + text: "repl{{ printf \"%s\" \"hello\"}}", + data: nil, + }, + want: "hello", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := Execute(tt.args.text, tt.args.data) + if (err != nil) != tt.wantErr { + t.Errorf("Execute() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("Execute() = %v, want %v", got, tt.want) + } + }) + } +}