From fea217048591823280a888b6c26f68558e51dded Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 12 一月 2024 15:17:53 +0800 Subject: [PATCH] 增加admin_grpc环境变量 --- src/cluster/cluster.go | 129 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 118 insertions(+), 11 deletions(-) diff --git a/src/cluster/cluster.go b/src/cluster/cluster.go index de960b7..1012b5b 100644 --- a/src/cluster/cluster.go +++ b/src/cluster/cluster.go @@ -4,12 +4,15 @@ "bytes" "encoding/json" "fmt" + "io/ioutil" "log" "net/http" + "os" + "path/filepath" "strings" - "basic.com/aps/aps_deploy.git/src/util" "basic.com/aps/aps_deploy.git/src/rancher" + "basic.com/aps/aps_deploy.git/src/util" ) type Cluster struct { @@ -19,6 +22,12 @@ type ClustersResponse struct { Data []Cluster `json:"data"` +} + +type KubectlConfigResponse struct { + BaseType string `json:"baseType"` + Config string `json:"config"` + Type string `json:"type"` } type RegistrationTokenResponse struct { @@ -111,7 +120,7 @@ req, err := http.NewRequest("GET", url, nil) if err != nil { - return "", fmt.Errorf("failed to create cluster list request: %v", err) + return "", fmt.Errorf("failed to get cluster list request: %v", err) } req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearerToken)) @@ -146,6 +155,101 @@ return "", fmt.Errorf("cluster '%s' not found", clusterName) } +func GetClusters(serverURL, bearerToken string) ([]string, error) { + + url := fmt.Sprintf("%s/v3/clusters", serverURL) + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, fmt.Errorf("failed to get cluster list request: %v", err) + } + + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearerToken)) + + client := util.CreateHTTPClient() + + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("failed to get cluster list: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("failed to get cluster list: unexpected status code %d", resp.StatusCode) + } + + // Parse the API response + var clustersResponse ClustersResponse + err = json.NewDecoder(resp.Body).Decode(&clustersResponse) + + log.Println("3333333333333333333333333") + log.Printf("%v", resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to decode cluster list response: %v", err) + } + + var clusters = make([]string, 0) + // Print cluster names + for _, cluster := range clustersResponse.Data { + clusters = append(clusters, cluster.ID) + fmt.Printf("Cluster ID: %s, Name: %s\n", cluster.ID, cluster.Name) + } + + return clusters, nil +} + +func GetKubectlConfig(serverURL, bearerToken, clusterName string) (string, error) { + + url := fmt.Sprintf("%s/v3/clusters/%s?action=generateKubeconfig", serverURL, clusterName) + + req, err := http.NewRequest("POST", url, nil) + if err != nil { + return "", fmt.Errorf("failed to get cluster list request: %v", err) + } + + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearerToken)) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "application/json") + + client := util.CreateHTTPClient() + + resp, err := client.Do(req) + if err != nil { + return "", fmt.Errorf("failed to get cluster list: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("failed to get cluster list: unexpected status code %d", resp.StatusCode) + } + + // Parse the API response + var kubectlConfig KubectlConfigResponse + err = json.NewDecoder(resp.Body).Decode(&kubectlConfig) + + if err != nil { + return "", fmt.Errorf("failed to decode cluster list response: %v", err) + } + + // 淇濆瓨 kubeconfig 鍒版枃浠� + homeDir, err := os.UserHomeDir() + if err != nil { + log.Fatalf("Failed to get home directory: %v", err) + } + kubeconfigDir := filepath.Join(homeDir, ".kube", clusterName) + err = os.MkdirAll(kubeconfigDir, 0700) + if err != nil { + log.Fatalf("Failed to create .kube directory: %v", err) + } + kubeconfigPath := filepath.Join(kubeconfigDir, "config") + err = ioutil.WriteFile(kubeconfigPath, []byte(kubectlConfig.Config), 0600) + if err != nil { + log.Fatalf("Failed to save kubeconfig: %v", err) + } + + return kubectlConfig.Config, nil +} + type Node struct { ClusterName string `json:"clusterName"` Roles []string `json:"roles"` @@ -154,7 +258,6 @@ SSHPassword string `json:"sshPassword"` SSHPort int `json:"sshPort"` } - type ClusterCreateRequest struct { Name string `json:"name"` @@ -247,37 +350,41 @@ return true, nil } -func CreateCluster(rancherConfig rancher.RancherConfig, clusterName string) error { +func CreateCluster(rancherClusterConfig rancher.RancherClusterConfig, clusterName string) (string, error) { requestBody := createClusterData(clusterName) + fmt.Println(rancherClusterConfig.RancherURL) - url := fmt.Sprintf("%s/v3/clusters", rancherConfig.RancherURL) + url := fmt.Sprintf("%s/v3/clusters", rancherClusterConfig.RancherURL) + fmt.Println("url: ", url) + fmt.Println("body: ", requestBody) req, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBody)) if err != nil { - return fmt.Errorf("Failed to create HTTP request: %v", err) + return "", fmt.Errorf("Failed to create HTTP request: %v", err) } - req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rancherConfig.BearerToken)) + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rancherClusterConfig.BearerToken)) req.Header.Set("Content-Type", "application/json") client := util.CreateHTTPClient() resp, err := client.Do(req) if err != nil { - return fmt.Errorf("Failed to send HTTP request: %v", err) + return "", fmt.Errorf("Failed to send HTTP request: %v", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusCreated { - return fmt.Errorf("Failed to create cluster, status code: %d", resp.StatusCode) + fmt.Println("1111111111111111111111111111 ", resp) + return "", fmt.Errorf("Failed to create cluster, status code: %d", resp.StatusCode) } var responseBody ClusterCreateResponse err = json.NewDecoder(resp.Body).Decode(&responseBody) if err != nil { - return fmt.Errorf("Failed to decode response body: %v", err) + return "", fmt.Errorf("Failed to decode response body: %v", err) } fmt.Printf("Cluster created: ID=%s, Name=%s\n", responseBody.ID, responseBody.Name) - return nil + return responseBody.ID, nil } -- Gitblit v1.8.0