2026-01-07 16:56:27 +01:00
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
2026-01-20 16:21:04 +01:00
oc - k8s create helm - n [ namespace ] - r [ release ] - f [ folder ]
folder - Helm config folder ( required , default : . )
release - environnement selected ( default : dev )
2026-01-07 16:56:27 +01:00
namespace - namespace selected ( default : dev )
2026-01-20 16:21:04 +01:00
oc - k8s upgrade helm - n [ namespace ] - r [ release ] - f [ folder ]
folder - Helm config folder ( required , default : . )
release - environnement selected ( default : dev )
2026-01-07 16:56:27 +01:00
namespace - namespace selected ( default : dev )
2026-01-20 16:21:04 +01:00
oc - k8s delete helm - n [ namespace ] - r [ release ] - f [ folder ]
folder - Helm config folder ( required , default : . )
release - environnement selected ( default : dev )
2026-01-07 16:56:27 +01:00
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
}
2026-01-20 16:21:04 +01:00
func Delete_Helm ( release string , namespace string ) error {
utils . Exec ( "helm uninstall " + release + " -n " + namespace )
2026-01-07 16:56:27 +01:00
utils . Exec ( "kubectl delete namespace " + namespace + " &" )
return nil
}
2026-01-20 16:21:04 +01:00
func Create_Helm ( folder string , release string , namespace string ) error {
2026-01-08 21:15:34 +01:00
tmp := "./opencloud-chart"
2026-01-15 15:48:10 +01:00
utils . Exec ( "sudo rm -rf " + tmp )
2026-01-08 21:15:34 +01:00
if err := os . MkdirAll ( tmp , os . ModePerm ) ; err != nil {
fmt . Println ( err )
return err
}
ExtractTrees ( "assets" , tmp )
clusterName := "opencloud"
2026-01-19 11:24:16 +01:00
2026-01-20 16:21:04 +01:00
host := "beta.opencloud.com"
2026-01-08 21:15:34 +01:00
if b , err := os . ReadFile ( folder + "/" + release + "-values.yaml" ) ; err == nil {
clusterName , _ = utils . Extract ( string ( b ) , "clusterName" )
2026-01-19 11:24:16 +01:00
host , _ = utils . Extract ( string ( b ) , "host" )
2026-01-08 21:15:34 +01:00
}
2026-01-20 16:21:04 +01:00
2026-01-15 15:48:10 +01:00
fmt . Println ( "set up helm" )
2026-01-08 21:15:34 +01:00
if err := utils . Exec ( "helm dependency update " + tmp ) ; err != nil {
2026-01-07 16:56:27 +01:00
return err
}
2026-01-15 15:48:10 +01:00
fmt . Println ( "set up deps" )
2026-01-08 21:15:34 +01:00
for name , repo := range utils . ExtractRepo ( ) {
utils . Exec ( "helm repo add " + name + " " + repo )
}
if err := utils . Exec ( "helm dependency build " + tmp ) ; err != nil {
2026-01-07 16:56:27 +01:00
return err
}
2026-01-15 15:48:10 +01:00
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 {
2026-01-07 16:56:27 +01:00
return err
}
2026-01-08 21:15:34 +01:00
utils . Exec ( "kind get kubeconfig --name " + clusterName + " > ./deployed_config" )
2026-01-07 16:56:27 +01:00
utils . Exec ( "kind export logs ./kind-logs" )
2026-01-15 15:48:10 +01:00
utils . Exec ( "sudo rm -rf " + tmp )
2026-01-19 11:24:16 +01:00
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" )
2026-01-07 16:56:27 +01:00
return nil
}
2026-01-20 16:21:04 +01:00
func Upgrade_Helm ( folder string , release string , namespace string ) error {
2026-01-08 21:15:34 +01:00
tmp := "./opencloud-chart"
if err := os . MkdirAll ( tmp , os . ModePerm ) ; err != nil {
fmt . Println ( err )
return err
}
defer os . RemoveAll ( tmp )
ExtractTrees ( "assets" , tmp )
2026-01-20 16:21:04 +01:00
Delete_Cluster ( folder , release )
2026-01-07 16:56:27 +01:00
2026-01-08 21:15:34 +01:00
return utils . Exec ( "helm upgrade " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml" )
2026-01-07 16:56:27 +01:00
}