Files
oc-k8s/internal/cluster.go
2026-01-07 16:56:27 +01:00

116 lines
3.1 KiB
Go

package internal
import (
"bytes"
"fmt"
"oc-k8s/utils"
"os"
"os/exec"
)
func Help_Cluster() {
fmt.Println(`
Cluster commands: oc-k8s <action> cluster [env_folder] [release]
create - Create a new kind cluster named 'opencloud'
delete - Delete the kind cluster named 'opencloud'
help - Show this help message
Usage:
oc-k8s create cluster [env_folder] [release]
env_folder - Helm config folder (required, default: .)
release - Release values name (required, default: dev)
oc-k8s delete cluster [env_folder] [release]
env_folder - Helm config folder (required, default: .)
release - Release values name (required, default: dev)
oc-k8s help cluster `)
}
func Delete_Cluster(args ...string) error {
folder := "."
env := "dev"
if len(args) > 0 {
folder = args[0]
}
if len(args) > 1 {
env = args[1]
}
clusterName := "opencloud"
if b, err := os.ReadFile(folder + "/" + env + "-values.yaml"); err == nil {
clusterName, _ = utils.Extract(string(b), "clusterName")
}
utils.Exec("kind delete cluster --name " + clusterName)
return nil
}
func Create_Cluster(args ...string) error {
Delete_Cluster(args...)
folder := "."
env := "dev"
if len(args) > 0 {
folder = args[0]
}
if len(args) > 1 {
env = args[1]
}
clusterName := "opencloud"
if b, err := os.ReadFile(folder + "/" + env + "-values.yaml"); err == nil {
clusterName, _ = utils.Extract(string(b), "clusterName")
}
utils.Exec("kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.9.0/deploy/longhorn.yaml ")
kindConfig := `
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 30950
hostPort: 80
protocol: TCP
- containerPort: 30951
hostPort: 443
protocol: TCP
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
`
cmd := exec.Command("kind", "create", "cluster", "--name", clusterName, "--config=-")
cmd.Stdin = bytes.NewBufferString(kindConfig)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
fmt.Println("[WARNING] New cluster should be merged into your current config !")
if err := utils.Exec("kind get kubeconfig --name " + clusterName + " > /tmp/kind-" + clusterName + ".kubeconfig"); err != nil {
return err
}
if err := utils.Exec("KUBECONFIG=~/.kube/config:/tmp/kind-" + clusterName + ".kubeconfig kubectl config view --flatten --merge --minify > /tmp/merged-kubeconfig.yaml"); err != nil {
return err
}
if err := utils.Exec("sudo mv /tmp/merged-kubeconfig.yaml ~/.kube/config"); err != nil {
return err
}
if err := utils.Exec("chmod 600 ~/.kube/config"); err != nil {
return err
}
if err := utils.Exec("kubectl config get-contexts"); err != nil {
return err
}
if err := utils.Exec("kubectl config use-context kind-opencloud"); err != nil {
return err
}
return nil
}