package internal import ( "fmt" "oc-k8s/utils" "os" ) func Help_Helm() { fmt.Println(` Helm commands: oc-k8s 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") }