fix
wangpengfei
2023-06-02 4dcf624d6ab58ab847d2e1b7e57e88324bb7c59b
src/cluster/cluster.go
@@ -4,8 +4,11 @@
   "bytes"
   "encoding/json"
   "fmt"
   "io/ioutil"
   "log"
   "net/http"
   "os"
   "path/filepath"
   "strings"
   "basic.com/aps/aps_deploy.git/src/rancher"
@@ -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 {
@@ -172,6 +181,9 @@
   // 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)
   }
@@ -186,6 +198,58 @@
   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")
   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"`