package internal import ( "bytes" "fmt" "oc-k8s/utils" "os" "os/exec" ) func Help_Cluster() { fmt.Println(` Cluster commands: oc-k8s cluster [options] create - Create a new kind cluster delete - Delete the kind cluster help - Show this help message Usage: oc-k8s create cluster -f [env_folder] -r [release] env_folder - Helm config folder (default: .) release - Release values name (default: dev) oc-k8s delete cluster -f [env_folder] -r [release] env_folder - Helm config folder (default: .) release - Release values name (default: dev) oc-k8s help cluster `) } func Delete_Cluster(folder string, release string) error { clusterName := "opencloud" if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil { clusterName, _ = utils.Extract(string(b), "clusterName") } utils.Exec("kind delete cluster --name " + clusterName) utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config") return utils.Exec("chmod 600 ~/.kube/config") } func Install_Cluster() error { utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config") utils.Exec("chmod 700 /home/mr/.kube") return utils.Exec("chmod 600 ~/.kube/config") } func Create_Cluster(folder string, release string) error { clusterName := "opencloud" scheme := "http" port := "80" if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil { clusterName, _ = utils.Extract(string(b), "clusterName") scheme, _ = utils.Extract(string(b), "scheme") port, _ = utils.Extract(string(b), "hostPort") } utils.Exec("sudo fuser -k -TERM " + port + "/tcp") utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config") containerPort := "30950" if scheme == "https" { containerPort = "30951" } kindConfig := `kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: ` + clusterName + ` nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: ` + containerPort + ` hostPort: ` + port + ` 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 { fmt.Println(err) return err } fmt.Println("[WARNING] New cluster should be merged into your current config !") 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("cp -f /tmp/merged-kubeconfig.yaml ~/.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-" + clusterName); err != nil { return err } if err := utils.Exec("docker start " + clusterName + "-control-plane"); err != nil { return err } return nil }