credentialproviderpackage/pkg/templater/templater.go (55 lines of code) (raw):
package templater
import (
"bytes"
"fmt"
"strings"
"text/template"
"github.com/aws/eks-anywhere-packages/credentialproviderpackage/pkg/filewriter"
)
type Templater struct {
writer filewriter.FileWriter
}
func New(writer filewriter.FileWriter) *Templater {
return &Templater{
writer: writer,
}
}
func (t *Templater) WriteToFile(templateContent string, data interface{}, fileName string, f ...filewriter.FileOptionsFunc) (filePath string, err error) {
bytes, err := Execute(templateContent, data)
if err != nil {
return "", err
}
writtenFilePath, err := t.writer.Write(fileName, bytes, f...)
if err != nil {
return "", fmt.Errorf("writing template file: %v", err)
}
return writtenFilePath, nil
}
func (t *Templater) WriteBytesToFile(content []byte, fileName string, f ...filewriter.FileOptionsFunc) (filePath string, err error) {
writtenFilePath, err := t.writer.Write(fileName, content, f...)
if err != nil {
return "", fmt.Errorf("writing template file: %v", err)
}
return writtenFilePath, nil
}
func Execute(templateContent string, data interface{}) ([]byte, error) {
temp := template.New("tmpl")
funcMap := map[string]interface{}{
"indent": func(spaces int, v string) string {
pad := strings.Repeat(" ", spaces)
return pad + strings.Replace(v, "\n", "\n"+pad, -1)
},
"stringsJoin": strings.Join,
}
temp = temp.Funcs(funcMap)
temp, err := temp.Parse(templateContent)
if err != nil {
return nil, fmt.Errorf("parsing template: %v", err)
}
var buf bytes.Buffer
err = temp.Execute(&buf, data)
if err != nil {
return nil, fmt.Errorf("substituting values for template: %v", err)
}
return buf.Bytes(), nil
}