cheliequan
2023-05-22 628115fe816db130c6008bcc8c1c3f26cf2d0e8b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package main
 
import (
    "flag"
    "fmt"
    "log"
    "os"
    "path/filepath"
    "time"
 
    "../create"
    "../delete"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
 
    "basic.com/aps/aps_deploy.git/src/create"
    "basic.com/aps/aps_deploy.git/src/delete"
    "basic.com/aps/aps_deploy.git/src/util"
)
 
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 := create.CreateDeploymentAndService(clientset, *createNamespace, *createDeployment, *createService)
        if err != nil {
            panic(err)
        }
 
        nodeport, err := create.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 := delete.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 := create.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 = delete.DeleteResources(clientset, ns, ns, ns)
            if err != nil {
                panic(err)
            }
        }
 
        fmt.Println("Resources deleted.")
    }
 
}