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() {
|
|
// 配置 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 {
|
for _, proj := range Projects {
|
if proj == ProjectAps {
|
err := deleteDeployment(clientset, ns, ns)
|
if err != nil {
|
panic(err)
|
}
|
// 删除 Service
|
err = deleteService(clientset, ns, ns)
|
if err != nil {
|
panic(err)
|
}
|
} else {
|
err := deleteDeployment(clientset, ns, proj)
|
if err != nil {
|
panic(err)
|
}
|
// 删除 Service
|
err = deleteService(clientset, ns, proj)
|
if err != nil {
|
panic(err)
|
}
|
}
|
}
|
|
// 删除 Namespace
|
err = DeleteNamespace(Config{Client: clientset, NameSpace: 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
|
}
|