freeleaps-ops/operators/freeleaps-gitops-initializer/internal/helm/func.go
zhenyus 0e256f8708 chore(git): code staging
Signed-off-by: zhenyus <zhenyus@mathmast.com>
2025-02-17 14:02:49 +08:00

68 lines
1.4 KiB
Go

package helm
import (
"bytes"
"encoding/base64"
"strings"
"text/template"
"gopkg.in/yaml.v3"
)
var funcMap template.FuncMap
func init() {
funcMap = template.FuncMap{
"camelCase": camelCase,
"toYaml": toYaml,
"nindent": nindent,
"title": strings.Title,
"lower": strings.ToLower,
"join": strings.Join,
"split": split,
"quote": quote,
"b64enc": b64enc,
}
funcMap["include"] = include
}
func b64enc(s string) string {
return base64.StdEncoding.EncodeToString([]byte(s))
}
func quote(s string) string {
return `"` + s + `"`
}
func include(name string, data interface{}) (string, error) {
buf := &bytes.Buffer{}
err := template.Must(template.New("").Funcs(funcMap).Parse("{{define \"tmp\"}}{{template \""+name+"\" .}}{{end}}")).
ExecuteTemplate(buf, "tmp", data)
return buf.String(), err
}
func camelCase(s string) string {
parts := strings.Split(s, "_")
for i := 1; i < len(parts); i++ {
parts[i] = strings.Title(strings.ToLower(parts[i]))
}
return strings.ToLower(parts[0]) + strings.Join(parts[1:], "")
}
func toYaml(v interface{}) string {
marshaled, err := yaml.Marshal(v)
if err != nil {
panic(err)
}
return string(marshaled)
}
func nindent(n int, s string) string {
prefix := strings.Repeat(" ", n)
return prefix + strings.ReplaceAll(s, "\n", "\n"+prefix)
}
func split(sep, s string) []string {
return strings.Split(s, sep)
}