Files
oc-k8s/internal/helm.go
2026-01-20 16:21:04 +01:00

116 lines
4.0 KiB
Go

package internal
import (
"fmt"
"oc-k8s/utils"
"os"
)
func Help_Helm() {
fmt.Println(`
Helm commands: oc-k8s <action> helm
install - Install Helm
create - Install a helm release for the given environment (default: dev)
delete - Uninstall a helm release for the given environment (default: dev)
help - Show this help message
Usage:
oc-k8s install helm
oc-k8s create helm -n [namespace] -r [release] -f [folder]
folder - Helm config folder (required, default: .)
release - environnement selected (default: dev)
namespace - namespace selected (default: dev)
oc-k8s upgrade helm -n [namespace] -r [release] -f [folder]
folder - Helm config folder (required, default: .)
release - environnement selected (default: dev)
namespace - namespace selected (default: dev)
oc-k8s delete helm -n [namespace] -r [release] -f [folder]
folder - Helm config folder (required, default: .)
release - environnement selected (default: dev)
namespace - namespace selected (default: dev)
oc-k8sh help helm`)
}
func Install_Helm() error {
utils.Exec("curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash")
utils.Exec("helm version")
return nil
}
func Delete_Helm(release string, namespace string) error {
utils.Exec("helm uninstall " + release + " -n " + namespace)
utils.Exec("kubectl delete namespace " + namespace + " &")
return nil
}
func Create_Helm(folder string, release string, namespace string) error {
tmp := "./opencloud-chart"
utils.Exec("sudo rm -rf " + tmp)
if err := os.MkdirAll(tmp, os.ModePerm); err != nil {
fmt.Println(err)
return err
}
ExtractTrees("assets", tmp)
clusterName := "opencloud"
host := "beta.opencloud.com"
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
clusterName, _ = utils.Extract(string(b), "clusterName")
host, _ = utils.Extract(string(b), "host")
}
fmt.Println("set up helm")
if err := utils.Exec("helm dependency update " + tmp); err != nil {
return err
}
fmt.Println("set up deps")
for name, repo := range utils.ExtractRepo() {
utils.Exec("helm repo add " + name + " " + repo)
}
if err := utils.Exec("helm dependency build " + tmp); err != nil {
return err
}
utils.Exec("sudo ulimit -n 1000000")
utils.Exec("helm repo add jetstack https://charts.jetstack.io")
utils.Exec("helm repo update")
utils.Exec("kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.crds.yaml")
utils.Exec("helm repo add jetstack https://charts.jetstack.io")
utils.Exec("helm repo update")
utils.Exec("helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.14.0")
utils.Exec("helm install admiralty oci://public.ecr.aws/admiralty/admiralty --namespace admiralty --create-namespace --version 0.17.0 --wait")
utils.Exec("helm repo add argo https://argoproj.github.io/argo-helm")
utils.Exec("helm repo update")
utils.Exec("helm install argo-workflows argo/argo-workflows --namespace argo --create-namespace")
if err := utils.Exec("helm upgrade --install " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml --debug"); err != nil {
return err
}
utils.Exec("kind get kubeconfig --name " + clusterName + " > ./deployed_config")
utils.Exec("kind export logs ./kind-logs")
utils.Exec("sudo rm -rf " + tmp)
utils.Exec("sudo sed -i.bak \"/[[:space:]]" + host + "$/d\" /etc/hosts")
utils.Exec("echo \"$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type==\"InternalIP\")].address}') " + host + "\" | sudo tee -a /etc/hosts > /dev/null")
return nil
}
func Upgrade_Helm(folder string, release string, namespace string) error {
tmp := "./opencloud-chart"
if err := os.MkdirAll(tmp, os.ModePerm); err != nil {
fmt.Println(err)
return err
}
defer os.RemoveAll(tmp)
ExtractTrees("assets", tmp)
Delete_Cluster(folder, release)
return utils.Exec("helm upgrade " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml")
}