github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/integration_test/itest/template.go (about) 1 package itest 2 3 import ( 4 "bytes" 5 "context" 6 "io" 7 "path/filepath" 8 "strings" 9 "text/template" 10 11 "github.com/Masterminds/sprig/v3" 12 "sigs.k8s.io/yaml" 13 ) 14 15 func OpenTemplate(ctx context.Context, name string, data any) (io.Reader, error) { 16 b, err := ReadTemplate(ctx, name, data) 17 if err != nil { 18 return nil, err 19 } 20 return bytes.NewReader(b), nil 21 } 22 23 func ReadTemplate(ctx context.Context, name string, data any) ([]byte, error) { 24 fnMap := sprig.FuncMap() 25 fnMap["toYaml"] = toYAML 26 tpl, err := template.New("").Funcs(fnMap).ParseFiles(filepath.Join(GetWorkingDir(ctx), name)) 27 if err != nil { 28 return nil, err 29 } 30 wr := bytes.Buffer{} 31 if err = tpl.ExecuteTemplate(&wr, filepath.Base(name), data); err != nil { 32 return nil, err 33 } 34 return wr.Bytes(), nil 35 } 36 37 // toYAML is direct copy of toYaml in the helm.sh/helm/v3/pkg/engine package. 38 func toYAML(v interface{}) string { 39 data, err := yaml.Marshal(v) 40 if err != nil { 41 // Swallow errors inside of a template. 42 return "" 43 } 44 return strings.TrimSuffix(string(data), "\n") 45 }