| | |
| | | "path/filepath" |
| | | "time" |
| | | |
| | | "../create" |
| | | "../delete" |
| | | "basic.com/aps/aps_deploy.git/src/cluster" |
| | | "basic.com/aps/aps_deploy.git/src/rancher" |
| | | "basic.com/aps/aps_deploy.git/src/util" |
| | | "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" |
| | | "basic.com/aps/aps_deploy.git/src/k8s" |
| | | |
| | | "github.com/spf13/viper" |
| | | ) |
| | | |
| | | var ( |
| | | replicas int32 = 3 |
| | | replicas int32 = 1 |
| | | port int32 = 9081 |
| | | usedNodePorts = make(map[int32]bool) |
| | | namespaces = []string{"guangsheng", "geruimi", "tongsheng"} |
| | | namespaces = []string{"testFactory1", "testFactory2", "testFactory3"} |
| | | ) |
| | | |
| | | func rancher_install_test(node rancher.Node) { |
| | | /* nodes := []Node{ |
| | | { |
| | | Roles: []string{"etcd", "controlplane", "worker"}, |
| | | IP: "192.168.20.189", |
| | | SSHUsername: "basic", |
| | | SSHPassword: "123", |
| | | SSHPort: 22, |
| | | }, |
| | | { |
| | | Roles: []string{"worker"}, |
| | | IP: "192.168.20.10", |
| | | SSHUsername: "basic", |
| | | SSHPassword: "123", |
| | | SSHPort: 22, |
| | | }, |
| | | { |
| | | Roles: []string{"worker"}, |
| | | IP: "192.168.20.115", |
| | | SSHUsername: "basic", |
| | | SSHPassword: "alien123", |
| | | SSHPort: 22, |
| | | }, |
| | | // Add more nodes here if needed |
| | | }*/ |
| | | |
| | | //install rancher on master node |
| | | err := rancher.InstallDockerAndRancher(node.IP, node.SSHUsername, node.SSHPassword, node.SSHPort) |
| | | if err != nil { |
| | | log.Fatalf("Failed to install Rancher: %v", err) |
| | | } |
| | | |
| | | os.Exit(0) |
| | | } |
| | | |
| | | func cluster_test(clusterName string, rancherClusterConfig rancher.RancherClusterConfig) { |
| | | |
| | | // Create the cluster |
| | | // Rancher configuration |
| | | /*rancherConfig := RancherConfig{ |
| | | RancherURL: "https://192.168.20.119:8443", |
| | | BearerToken: "token-nnrsc:w68zdt8s47fnpjd5xqdl5hhzpz4j2d56kt5nx49nsswcbpdzc28kh5", |
| | | }*/ |
| | | |
| | | fmt.Println(rancherClusterConfig) |
| | | fmt.Println(rancherClusterConfig.RancherURL) |
| | | fmt.Println(rancherClusterConfig.BearerToken) |
| | | // Deploy clusterId |
| | | clusterID, err := cluster.GetClusterID(rancherClusterConfig.RancherURL, rancherClusterConfig.BearerToken, clusterName) |
| | | if err != nil { |
| | | fmt.Printf("Cluster not found: %s %v\n", clusterName, err) |
| | | _, err = cluster.CreateCluster(rancherClusterConfig, clusterName) |
| | | if err != nil { |
| | | log.Fatalf("Failed to create cluster: %v", err) |
| | | } |
| | | fmt.Printf("Cluster created: %s\n", clusterName) |
| | | clusterID, err = cluster.GetClusterID(rancherClusterConfig.RancherURL, rancherClusterConfig.BearerToken, clusterName) |
| | | if err != nil { |
| | | log.Fatal(err) |
| | | } |
| | | } |
| | | fmt.Println(clusterID) |
| | | |
| | | // Deploy nodeCommand |
| | | nodeCommand, err := cluster.GetNodeCommand(rancherClusterConfig.RancherURL, rancherClusterConfig.BearerToken, clusterID) |
| | | if err != nil { |
| | | log.Fatal(err) |
| | | } |
| | | fmt.Println(nodeCommand) |
| | | |
| | | for _, node := range rancherClusterConfig.Nodes { |
| | | //Deploy Docker on each node |
| | | err = util.InstallDocker(node.IP, node.SSHUsername, node.SSHPassword, node.SSHPort) |
| | | if err != nil { |
| | | log.Fatal(err) |
| | | } |
| | | |
| | | // Deploy Kubectl on each node |
| | | err = util.InstallKubectl(node.IP, node.SSHUsername, node.SSHPassword, node.SSHPort) |
| | | if err != nil { |
| | | log.Fatal(err) |
| | | } |
| | | |
| | | // Deploy Kubernetes roles on each node |
| | | err = cluster.Deployk8sRolesOnNode(node.IP, node.SSHUsername, node.SSHPassword, nodeCommand, node.SSHPort, node.Roles) |
| | | if err != nil { |
| | | log.Fatal(err) |
| | | } |
| | | } |
| | | os.Exit(0) |
| | | } |
| | | |
| | | func main() { |
| | | createCmd := flag.NewFlagSet("create", flag.ExitOnError) |
| | | deleteCmd := flag.NewFlagSet("delete", flag.ExitOnError) |
| | | testCmd := flag.NewFlagSet("test", flag.ExitOnError) |
| | | clusterCmd := flag.NewFlagSet("cluster", flag.ExitOnError) |
| | | rancherInstallCmd := flag.NewFlagSet("rancher_install", flag.ExitOnError) |
| | | |
| | | createNamespace := createCmd.String("ns", "", "Namespace name") |
| | | createDeployment := createCmd.String("deployment", "", "Deployment name") |
| | | fmt.Println(createDeployment) |
| | | createService := createCmd.String("service", "", "Service name") |
| | | |
| | | fmt.Println(createService) |
| | | 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") |
| | | fmt.Println("create/delete/test/cluster/rancher_install command is required") |
| | | os.Exit(1) |
| | | } |
| | | |
| | |
| | | deleteCmd.Parse(os.Args[2:]) |
| | | case "test": |
| | | testCmd.Parse(os.Args[2:]) |
| | | case "cluster": |
| | | clusterCmd.Parse(os.Args[2:]) |
| | | case "rancher_install": |
| | | rancherInstallCmd.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() |
| | | if rancherInstallCmd.Parsed() { |
| | | //// 初始化配置解析库 |
| | | //viper.SetConfigName("config") |
| | | //viper.SetConfigType("yaml") |
| | | //viper.AddConfigPath("./config") |
| | | // |
| | | //// 读取配置文件 |
| | | //err := viper.ReadInConfig() |
| | | //if err != nil { |
| | | // log.Fatalf("Failed to read config file: %v", err) |
| | | //} |
| | | |
| | | // 创建 Kubernetes 客户端 |
| | | config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) |
| | | if err != nil { |
| | | panic(err.Error()) |
| | | } |
| | | // 解析配置文件中的字段 |
| | | var rancherClusterConfig rancher.RancherClusterConfig |
| | | //err = viper.Unmarshal(&rancherClusterConfig) |
| | | //if err != nil { |
| | | // log.Fatalf("Failed to unmarshal config: %v", err) |
| | | //} |
| | | |
| | | clientset, err := kubernetes.NewForConfig(config) |
| | | if err != nil { |
| | | panic(err.Error()) |
| | | rancherClusterConfig.Nodes = make([]rancher.Node, 3) |
| | | rancherClusterConfig.Nodes[0] = rancher.Node{ |
| | | Roles: []string{"worker"}, |
| | | IP: "192.168.20.119", |
| | | SSHUsername: "basic", |
| | | SSHPassword: "basic2021", |
| | | SSHPort: 22, |
| | | } |
| | | |
| | | rancher_install_test(rancherClusterConfig.Nodes[0]) |
| | | os.Exit(1) |
| | | } |
| | | |
| | | // 执行 create 命令 |
| | | if createCmd.Parsed() { |
| | | if *createNamespace == "" || *createDeployment == "" || *createService == "" { |
| | | |
| | | // 配置 Kubernetes 集群的 kubeconfig 路径 |
| | | kubeconfig := flag.String("kubeconfig", filepath.Join(util.HomeDir(), ".kube", "config"), "kubeconfig file") |
| | | flag.Parse() |
| | | |
| | | fmt.Println(&kubeconfig) |
| | | |
| | | // 创建 Kubernetes 客户端 |
| | | config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) |
| | | if err != nil { |
| | | panic(err.Error()) |
| | | } |
| | | |
| | | fmt.Println(&config) |
| | | |
| | | clientset, err := kubernetes.NewForConfig(config) |
| | | if err != nil { |
| | | panic(err.Error()) |
| | | } |
| | | |
| | | if *createNamespace == "" { |
| | | fmt.Println("Namespace, Deployment, and Service names are required") |
| | | createCmd.PrintDefaults() |
| | | os.Exit(1) |
| | | } |
| | | |
| | | err := create.CreateDeploymentAndService(clientset, *createNamespace, *createDeployment, *createService) |
| | | err = k8s.CreateNamespace(clientset, *createNamespace) |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | | for _, proj := range k8s.Projects { |
| | | obj := k8s.GetCreateObj(proj) |
| | | err = obj.CreateDeploymentAndService(k8s.Config{ |
| | | Client: clientset, |
| | | NameSpace: *createNamespace, |
| | | DeploymentName: proj, |
| | | ServiceName: proj, |
| | | Image: "fai365.com:9088/aps/aps", |
| | | }, nil) |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | | } |
| | | |
| | | nodeport, err := create.GetServiceNodePort(clientset, *createNamespace, *createService) |
| | | nodeport, err := k8s.GetServiceNodePort(clientset, *createNamespace, "aps") |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | |
| | | |
| | | // 执行 delete 命令 |
| | | if deleteCmd.Parsed() { |
| | | // 配置 Kubernetes 集群的 kubeconfig 路径 |
| | | kubeconfig := flag.String("kubeconfig", filepath.Join(util.HomeDir(), ".kube", "config"), "kubeconfig file") |
| | | flag.Parse() |
| | | |
| | | fmt.Println(*kubeconfig) |
| | | fmt.Println(*kubeconfig) |
| | | fmt.Println(*kubeconfig) |
| | | fmt.Println(*kubeconfig) |
| | | fmt.Println(*kubeconfig) |
| | | |
| | | // 创建 Kubernetes 客户端 |
| | | config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) |
| | | if err != nil { |
| | | panic(err.Error()) |
| | | } |
| | | |
| | | clientset, err := kubernetes.NewForConfig(config) |
| | | if err != nil { |
| | | panic(err.Error()) |
| | | } |
| | | |
| | | 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) |
| | | for _, proj := range k8s.Projects { |
| | | err = k8s.DeleteResources(clientset, *deleteNamespace, proj, proj) |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | | } |
| | | |
| | | fmt.Println("Resources deleted.") |
| | |
| | | |
| | | // 执行创建和删除测试 |
| | | if testCmd.Parsed() { |
| | | // 配置 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()) |
| | | } |
| | | |
| | | fmt.Println("\033[97;40mRunning create and delete tests...\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) |
| | | for _, proj := range k8s.Projects { |
| | | obj := k8s.GetCreateObj(proj) |
| | | err = obj.CreateDeploymentAndService(k8s.Config{ |
| | | Client: clientset, |
| | | NameSpace: ns, |
| | | DeploymentName: deploymentName, |
| | | ServiceName: serviceName, |
| | | }, nil) |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | | log.Printf("\033[97;41mFailed to create resources in namespace %s: %v\033[0m\n", ns, err) |
| | | } else { |
| | | nodeport, err := k8s.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) |
| | | log.Printf("Service NodePort: %d\n", nodeport) |
| | | log.Printf("\033[97;42mSuccessfully created resources in namespace %s\033[0m\n", ns) |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | // 延迟 1000 秒后删除创建的资源 |
| | |
| | | |
| | | // 删除多个 Namespace 下的相同名称的 Deployment 和 Service |
| | | for _, ns := range namespaces { |
| | | err = delete.DeleteResources(clientset, ns, ns, ns) |
| | | err = k8s.DeleteResources(clientset, ns, ns, ns) |
| | | if err != nil { |
| | | panic(err) |
| | | } |
| | |
| | | fmt.Println("Resources deleted.") |
| | | } |
| | | |
| | | if clusterCmd.Parsed() { |
| | | // 初始化配置解析库 |
| | | viper.SetConfigName("config") |
| | | viper.SetConfigType("yaml") |
| | | viper.AddConfigPath("./config") |
| | | |
| | | // 读取配置文件 |
| | | err := viper.ReadInConfig() |
| | | if err != nil { |
| | | log.Fatalf("Failed to read config file: %v", err) |
| | | } |
| | | |
| | | // 解析配置文件中的字段 |
| | | var rancherClusterConfig rancher.RancherClusterConfig |
| | | err = viper.Unmarshal(&rancherClusterConfig) |
| | | if err != nil { |
| | | log.Fatalf("Failed to unmarshal config: %v", err) |
| | | } |
| | | clusterName := "kubernetus" |
| | | fmt.Println(rancherClusterConfig) |
| | | cluster_test(clusterName, rancherClusterConfig) |
| | | } |
| | | |
| | | } |