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 |  132 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 118 insertions(+), 14 deletions(-)

diff --git a/src/cluster/cluster.go b/src/cluster/cluster.go
index bf26f6a..1012b5b 100644
--- a/src/cluster/cluster.go
+++ b/src/cluster/cluster.go
@@ -4,10 +4,14 @@
 	"bytes"
 	"encoding/json"
 	"fmt"
+	"io/ioutil"
 	"log"
 	"net/http"
+	"os"
+	"path/filepath"
 	"strings"
 
+	"basic.com/aps/aps_deploy.git/src/rancher"
 	"basic.com/aps/aps_deploy.git/src/util"
 )
 
@@ -18,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 {
@@ -110,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))
@@ -145,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"`
@@ -152,11 +257,6 @@
 	SSHUsername string   `json:"sshUsername"`
 	SSHPassword string   `json:"sshPassword"`
 	SSHPort     int      `json:"sshPort"`
-}
-
-type RancherConfig struct {
-	RancherURL  string `json:"rancherURL"`
-	BearerToken string `json:"bearerToken"`
 }
 
 type ClusterCreateRequest struct {
@@ -250,37 +350,41 @@
 	return true, nil
 }
 
-func CreateCluster(rancherConfig 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