Files
oc-k8s/internal/cluster.go

115 lines
3.4 KiB
Go
Raw Normal View History

2026-01-07 16:56:27 +01:00
package internal
import (
"bytes"
"fmt"
"oc-k8s/utils"
"os"
"os/exec"
)
func Help_Cluster() {
fmt.Println(`
2026-01-20 16:21:04 +01:00
Cluster commands: oc-k8s <action> cluster [options]
create - Create a new kind cluster
delete - Delete the kind cluster
2026-01-07 16:56:27 +01:00
help - Show this help message
2026-01-20 16:21:04 +01:00
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)
2026-01-07 16:56:27 +01:00
oc-k8s help cluster `)
}
2026-01-20 16:21:04 +01:00
func Delete_Cluster(folder string, release string) error {
2026-01-07 16:56:27 +01:00
clusterName := "opencloud"
2026-01-20 16:21:04 +01:00
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
2026-01-07 16:56:27 +01:00
clusterName, _ = utils.Extract(string(b), "clusterName")
}
utils.Exec("kind delete cluster --name " + clusterName)
2026-01-08 21:15:34 +01:00
utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
return utils.Exec("chmod 600 ~/.kube/config")
2026-01-07 16:56:27 +01:00
}
2026-01-20 16:21:04 +01:00
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 {
2026-01-07 16:56:27 +01:00
clusterName := "opencloud"
2026-01-20 16:21:04 +01:00
scheme := "http"
port := "80"
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
2026-01-07 16:56:27 +01:00
clusterName, _ = utils.Extract(string(b), "clusterName")
2026-01-20 16:21:04 +01:00
scheme, _ = utils.Extract(string(b), "scheme")
port, _ = utils.Extract(string(b), "hostPort")
2026-01-07 16:56:27 +01:00
}
2026-01-20 16:21:04 +01:00
utils.Exec("sudo fuser -k -TERM " + port + "/tcp")
utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
2026-01-07 16:56:27 +01:00
2026-01-20 16:21:04 +01:00
containerPort := "30950"
if scheme == "https" {
containerPort = "30951"
}
kindConfig := `kind: Cluster
2026-01-07 16:56:27 +01:00
apiVersion: kind.x-k8s.io/v1alpha4
2026-01-20 16:21:04 +01:00
name: ` + clusterName + `
2026-01-07 16:56:27 +01:00
nodes:
2026-01-20 16:21:04 +01:00
- role: control-plane
2026-01-21 12:03:02 +01:00
image: kindest/node:v1.35.0
2026-01-20 16:21:04 +01:00
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: ` + containerPort + `
hostPort: ` + port + `
protocol: TCP
2026-01-07 16:56:27 +01:00
`
2026-01-21 12:03:02 +01:00
utils.Exec(`docker exec -it oc-control-plane bash -c 'mkdir -p /etc/containerd && cat <<EOF >/etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
EOF
containerd config restart'`)
cmd := exec.Command("kind", "create", "cluster", "--name", clusterName, "--wait", "0", "--config=-")
2026-01-07 16:56:27 +01:00
cmd.Stdin = bytes.NewBufferString(kindConfig)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
2026-01-20 16:21:04 +01:00
fmt.Println(err)
2026-01-07 16:56:27 +01:00
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
}
2026-01-08 21:15:34 +01:00
if err := utils.Exec("cp -f /tmp/merged-kubeconfig.yaml ~/.kube/config"); err != nil {
2026-01-07 16:56:27 +01:00
return err
}
2026-01-08 21:15:34 +01:00
2026-01-07 16:56:27 +01:00
if err := utils.Exec("kubectl config get-contexts"); err != nil {
return err
}
2026-01-08 21:15:34 +01:00
2026-01-20 16:21:04 +01:00
if err := utils.Exec("kubectl config use-context kind-" + clusterName); err != nil {
2026-01-07 16:56:27 +01:00
return err
}
2026-01-15 15:48:10 +01:00
2026-01-20 16:21:04 +01:00
if err := utils.Exec("docker start " + clusterName + "-control-plane"); err != nil {
2026-01-15 15:48:10 +01:00
return err
}
2026-01-07 16:56:27 +01:00
return nil
}