104 lines
3.7 KiB
Go
104 lines
3.7 KiB
Go
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/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()
|
|
}
|