package main
|
|
import (
|
"flag"
|
"fmt"
|
"log"
|
"os"
|
"path/filepath"
|
"time"
|
|
"../util"
|
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/tools/clientcmd"
|
|
"../k8s"
|
)
|
|
var (
|
replicas int32 = 3
|
port int32 = 9081
|
usedNodePorts = make(map[int32]bool)
|
namespaces = []string{"guangsheng", "geruimi", "tongsheng"}
|
)
|
|
func main() {
|
createCmd := flag.NewFlagSet("create", flag.ExitOnError)
|
deleteCmd := flag.NewFlagSet("delete", flag.ExitOnError)
|
testCmd := flag.NewFlagSet("test", flag.ExitOnError)
|
|
createNamespace := createCmd.String("ns", "", "Namespace name")
|
createDeployment := createCmd.String("deployment", "", "Deployment name")
|
createService := createCmd.String("service", "", "Service name")
|
|
deleteNamespace := deleteCmd.String("ns", "", "Namespace name")
|
deleteDeployment := deleteCmd.String("deployment", "", "Deployment name")
|
deleteService := deleteCmd.String("service", "", "Service name")
|
|
if len(os.Args) < 2 {
|
fmt.Println("create/delete/test command is required")
|
os.Exit(1)
|
}
|
|
switch os.Args[1] {
|
case "create":
|
createCmd.Parse(os.Args[2:])
|
case "delete":
|
deleteCmd.Parse(os.Args[2:])
|
case "test":
|
testCmd.Parse(os.Args[2:])
|
default:
|
flag.PrintDefaults()
|
os.Exit(1)
|
}
|
|
// 配置 Kubernetes 集群的 kubeconfig 路径
|
kubeconfig := flag.String("kubeconfig", filepath.Join(util.HomeDir(), ".kube", "config"), "kubeconfig file")
|
flag.Parse()
|
|
// 创建 Kubernetes 客户端
|
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
|
if err != nil {
|
panic(err.Error())
|
}
|
|
clientset, err := kubernetes.NewForConfig(config)
|
if err != nil {
|
panic(err.Error())
|
}
|
|
// 执行 create 命令
|
if createCmd.Parsed() {
|
if *createNamespace == "" || *createDeployment == "" || *createService == "" {
|
fmt.Println("Namespace, Deployment, and Service names are required")
|
createCmd.PrintDefaults()
|
os.Exit(1)
|
}
|
|
err := k8s.CreateDeploymentAndService(clientset, *createNamespace, *createDeployment, *createService)
|
if err != nil {
|
panic(err)
|
}
|
|
nodeport, err := k8s.GetServiceNodePort(clientset, *createNamespace, *createService)
|
if err != nil {
|
panic(err)
|
}
|
|
log.Printf("Service NodePort: %d\n", nodeport)
|
}
|
|
// 执行 delete 命令
|
if deleteCmd.Parsed() {
|
if *deleteNamespace == "" || *deleteDeployment == "" || *deleteService == "" {
|
fmt.Println("Namespace, Deployment, and Service names are required")
|
deleteCmd.PrintDefaults()
|
os.Exit(1)
|
}
|
|
err := k8s.DeleteResources(clientset, *deleteNamespace, *deleteDeployment, *deleteService)
|
if err != nil {
|
panic(err)
|
}
|
|
fmt.Println("Resources deleted.")
|
}
|
|
// 执行创建和删除测试
|
if testCmd.Parsed() {
|
fmt.Println("\033[97;40mRunning create and delete tests...\033[0m")
|
|
// 创建测试
|
fmt.Println("\033[97;40m--- Create Test ---\033[0m")
|
for _, ns := range namespaces {
|
deploymentName := ns
|
serviceName := ns
|
err := k8s.CreateDeploymentAndService(clientset, ns, deploymentName, serviceName)
|
if err != nil {
|
log.Printf("\033[97;41mFailed to create resources in namespace %s: %v\033[0m\n", ns, err)
|
} else {
|
nodeport, err := create.GetServiceNodePort(clientset, ns, ns)
|
if err != nil {
|
panic(err)
|
}
|
|
log.Printf("Service NodePort: %d\n", nodeport)
|
log.Printf("\033[97;42mSuccessfully created resources in namespace %s\033[0m\n", ns)
|
}
|
}
|
|
// 延迟 1000 秒后删除创建的资源
|
time.Sleep(1000 * time.Second)
|
|
// 删除测试
|
fmt.Println("\033[97;40m--- Delete Test ---\033[0m")
|
|
// 删除多个 Namespace 下的相同名称的 Deployment 和 Service
|
for _, ns := range namespaces {
|
err = k8s.DeleteResources(clientset, ns, ns, ns)
|
if err != nil {
|
panic(err)
|
}
|
}
|
|
fmt.Println("Resources deleted.")
|
}
|
|
}
|