116 lines
3.1 KiB
Go
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
|
|
}
|