| | |
| | | "bytes" |
| | | "encoding/json" |
| | | "fmt" |
| | | "io/ioutil" |
| | | "log" |
| | | "net/http" |
| | | "os" |
| | | "path/filepath" |
| | | "strings" |
| | | |
| | | "basic.com/aps/aps_deploy.git/src/rancher" |
| | |
| | | |
| | | 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 { |
| | |
| | | // 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) |
| | | } |
| | |
| | | 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"` |