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 }