devstar-devcontainer-operator/internal/controller/utils/template_utils.go
2024-09-11 04:10:47 +00:00

57 lines
1.4 KiB
Go

package utils
import (
"bytes"
"text/template"
devcontainer_apps_v1 "devstar.cn/DevcontainerApp/api/v1"
app_v1 "k8s.io/api/apps/v1"
core_v1 "k8s.io/api/core/v1"
networking_v1 "k8s.io/api/networking/v1"
yaml_util "k8s.io/apimachinery/pkg/util/yaml"
)
// parseTemplate 解析 Go Template 模板文件
func parseTemplate(templateName string, app *devcontainer_apps_v1.DevcontainerApp) []byte {
tmpl, err := template.ParseFiles("internal/controller/templates/" + templateName + ".yaml")
if err != nil {
panic(err)
}
b := new(bytes.Buffer)
err = tmpl.Execute(b, app)
if err != nil {
panic(err)
}
return b.Bytes()
}
// NewStatefulSet 根据创建 StatefulSet
func NewStatefulSet(app *devcontainer_apps_v1.DevcontainerApp) *app_v1.StatefulSet {
statefulSet := &app_v1.StatefulSet{}
err := yaml_util.Unmarshal(parseTemplate("stateful_set", app), statefulSet)
if err != nil {
panic(err)
}
return statefulSet
}
// NewService 创建 Service
func NewService(app *devcontainer_apps_v1.DevcontainerApp) *core_v1.Service {
service := &core_v1.Service{}
err := yaml_util.Unmarshal(parseTemplate("service", app), service)
if err != nil {
panic(err)
}
return service
}
// NewIngress 创建新的 Ingress Controller 规则
func NewIngress(app *devcontainer_apps_v1.DevcontainerApp) *networking_v1.Ingress {
ingress := &networking_v1.Ingress{}
err := yaml_util.Unmarshal(parseTemplate("ingress", app), ingress)
if err != nil {
panic(err)
}
return ingress
}