From 794b44835f98df719f2b1186b2ad90a11f9a35b0 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 08 六月 2023 20:28:11 +0800
Subject: [PATCH] fix
---
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