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