package templates import ( "bytes" "embed" "kube-forge/pkg/config" "kube-forge/pkg/resources" "os" "path/filepath" "strings" "text/template" ) var K8S_TEMPLATES = [...][2]string{ {"templates/kubespray/inventory/hosts.tmpl", "kubespray/inventory/hosts"}, {"templates/kubespray/inventory/group_vars/all.yml.tmpl", "kubespray/inventory/group_vars/all.yml"}, {"templates/kubespray/inventory/group_vars/k8s_cluster/addons.yml.tmpl", "kubespray/inventory/group_vars/k8s_cluster/addons.yml"}, {"templates/kubespray/inventory/group_vars/k8s_cluster/k8s-cluster.yml.tmpl", "kubespray/inventory/group_vars/k8s_cluster/k8s-cluster.yml"}, } var HELM_APPS_TEMPLATES = [...]string{ "templates/helm-apps/releases/additional-modules/docker-secrets-generator.yml.tmpl", "templates/helm-apps/releases/additional-modules/longhorn.yml.tmpl", "templates/helm-apps/releases/additional-modules/cert-manager.yml.tmpl", "templates/helm-apps/releases/additional-modules/ingress-nginx.yml.tmpl", "templates/helm-apps/releases/additional-modules/secrets-store-csi-driver.yml.tmpl", "templates/helm-apps/releases/observability/fluent-operator.yml.tmpl", "templates/helm-apps/releases/observability/opentelemetry-operator.yml.tmpl", "templates/helm-apps/releases/observability/tempo.yml.tmpl", "templates/helm-apps/releases/observability/loki.yml.tmpl", "templates/helm-apps/releases/observability/observability.yml.tmpl", "templates/helm-apps/releases/registry/harbor-certificate-generator.yml.tmpl", "templates/helm-apps/releases/registry/harbor.yml.tmpl", "templates/helm-apps/releases/cicd/argo-cd.yml.tmpl", "templates/helm-apps/releases/cicd/argo-rollouts.yml.tmpl", "templates/helm-apps/releases/cicd/keel.yml.tmpl", "templates/helm-apps/releases/cicd/argo-cd-ingress.yml.tmpl", "templates/helm-apps/releases/secrets-storage/vault.yml.tmpl", } var HELM_REPOSITORIES_TEMPLATES = [...]string{ "templates/helm-apps/repositories/repositories.yml.tmpl", } func executeTemplateToString(template *template.Template, config *config.Config) string { templateResult := &bytes.Buffer{} err := template.Execute(templateResult, config) if err != nil { panic(err) } templateResultString := templateResult.String() return templateResultString } func getTemplateFromEmbedFSFolder(embedFS embed.FS, templateFile string) *template.Template { templateData, err := embedFS.ReadFile(templateFile) if err != nil { panic(err) } templateDataString := string(templateData) template, err := template.New("tmpl").Funcs(funcMap()).Parse(templateDataString) if err != nil { panic(err) } return template } func applyTemplates() { config := config.GetConfig() for _, templateData := range K8S_TEMPLATES { var templateFile = templateData[0] var outFile = filepath.Join(config.DataDir, templateData[1]) tmpl := getTemplateFromEmbedFSFolder(resources.Templates, templateFile) file, err := os.Create(outFile) if err != nil { panic(err) } defer file.Close() err = tmpl.Execute(file, config) if err != nil { panic(err) } } } func GetHelmAppsConfigData() (string, string) { cfg := config.GetConfig() helmAppsTemplateResults := []string{} for _, templateFile := range HELM_APPS_TEMPLATES { template := getTemplateFromEmbedFSFolder(resources.Templates, templateFile) helmAppsTemplateResults = append(helmAppsTemplateResults, executeTemplateToString(template, cfg)) } repositoriesTemplateResults := []string{} for _, templateFile := range HELM_REPOSITORIES_TEMPLATES { template := getTemplateFromEmbedFSFolder(resources.Templates, templateFile) repositoriesTemplateResults = append(repositoriesTemplateResults, executeTemplateToString(template, cfg)) } return strings.Join(repositoriesTemplateResults, "\n"), strings.Join(helmAppsTemplateResults, "\n") } func ApplyTemplates() { applyTemplates() }