fix
wangpengfei
2023-06-08 b6958b9b9fd46496ecc3adea7bc3b4b0f253771d
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
package k8s
 
import (
    "context"
    "flag"
    "fmt"
    "path/filepath"
 
    "basic.com/aps/aps_deploy.git/src/util"
    "k8s.io/apimachinery/pkg/api/errors"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)
 
func delete_test() {
    var (
        namespaces = []string{"guangsheng", "geruimi", "tongsheng"}
    )
 
    // 配置 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())
    }
 
    // 删除多个 Namespace 下的相同名称的 Deployment 和 Service
    for _, ns := range namespaces {
        err = DeleteResources(clientset, ns, ns, ns)
        if err != nil {
            panic(err)
        }
    }
 
    fmt.Println("Resources deleted.")
}
 
// DeleteResources 删除指定的 Namespace、Deployment 和 Service
func DeleteResources(clientset *kubernetes.Clientset, namespace, deploymentName, serviceName string) error {
    fmt.Println("\033[1;37;40mDeleting resources in Namespace:", namespace, "\033[0m")
 
    // 删除 Deployment
    err := deleteDeployment(clientset, namespace, deploymentName)
    if err != nil {
        return err
    }
 
    // 删除 Service
    err = deleteService(clientset, namespace, serviceName)
    if err != nil {
        return err
    }
 
    // 删除 Namespace
    err = DeleteNamespace(Config{Client: clientset, NameSpace: namespace})
    if err != nil {
        return err
    }
 
    return nil
}
 
// deleteDeployment 删除指定的 Deployment
func deleteDeployment(clientset *kubernetes.Clientset, namespace, deploymentName string) error {
    fmt.Println("\033[1;37;40mDeleting Deployment:", deploymentName, "\033[0m")
 
    err := clientset.AppsV1().Deployments(namespace).Delete(context.TODO(), deploymentName, metav1.DeleteOptions{})
    if err != nil {
        if errors.IsNotFound(err) {
            fmt.Printf("Deployment %s not found in Namespace %s\n", deploymentName, namespace)
        } else {
            return fmt.Errorf("failed to delete Deployment: %v", err)
        }
    } else {
        fmt.Printf("Deployment %s deleted from Namespace %s\n", deploymentName, namespace)
    }
 
    return nil
}
 
// deleteService 删除指定的 Service
func deleteService(clientset *kubernetes.Clientset, namespace, serviceName string) error {
    fmt.Println("\033[1;37;40mDeleting Service:", serviceName, "\033[0m")
 
    err := clientset.CoreV1().Services(namespace).Delete(context.TODO(), serviceName, metav1.DeleteOptions{})
    if err != nil {
        if errors.IsNotFound(err) {
            fmt.Printf("Service %s not found in Namespace %s\n", serviceName, namespace)
        } else {
            return fmt.Errorf("failed to delete Service: %v", err)
        }
    } else {
        fmt.Printf("Service %s deleted from Namespace %s\n", serviceName, namespace)
    }
 
    return nil
}
 
// deleteNamespace 删除指定的 Namespace
func DeleteNamespace(config Config) error {
    fmt.Println("\033[1;37;40mDeleting Namespace:", config.NameSpace, "\033[0m")
 
    err := config.Client.CoreV1().Namespaces().Delete(context.TODO(), config.NameSpace, metav1.DeleteOptions{})
    if err != nil {
        if errors.IsNotFound(err) {
            fmt.Printf("Namespace %s not found\n", config.NameSpace)
        } else {
            return fmt.Errorf("failed to delete Namespace: %v", err)
        }
    } else {
        fmt.Printf("Namespace %s deleted\n", config.NameSpace)
    }
 
    return nil
}