add config file
This commit is contained in:
@@ -2,6 +2,7 @@ package argohandler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"main/db"
|
"main/db"
|
||||||
@@ -14,6 +15,7 @@ import (
|
|||||||
"github.com/argoproj/argo-cd/v2/pkg/apiclient/application"
|
"github.com/argoproj/argo-cd/v2/pkg/apiclient/application"
|
||||||
argoprojv1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
|
argoprojv1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
@@ -48,6 +50,7 @@ type SyncTask struct {
|
|||||||
AppName string
|
AppName string
|
||||||
Clustername string
|
Clustername string
|
||||||
Namespace string
|
Namespace string
|
||||||
|
ObjectID string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -85,7 +88,7 @@ func generateRandomString(length int) string {
|
|||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateApp(clustername string, ControlPlane string, PlatformVersion string, Cpu string, Memory string, userID string) {
|
func CreateApp(objectID string, clustername string, ControlPlane string, PlatformVersion string, Cpu string, Memory string, userID string) {
|
||||||
|
|
||||||
InitializeClient()
|
InitializeClient()
|
||||||
|
|
||||||
@@ -117,6 +120,8 @@ func CreateApp(clustername string, ControlPlane string, PlatformVersion string,
|
|||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
"user-id": userID,
|
"user-id": userID,
|
||||||
"type": "vcluster",
|
"type": "vcluster",
|
||||||
|
"clustername": uniqueClusterName,
|
||||||
|
"namespace": namespace,
|
||||||
},
|
},
|
||||||
Finalizers: []string{
|
Finalizers: []string{
|
||||||
"resources-finalizer.argocd.argoproj.io",
|
"resources-finalizer.argocd.argoproj.io",
|
||||||
@@ -177,11 +182,11 @@ func CreateApp(clustername string, ControlPlane string, PlatformVersion string,
|
|||||||
|
|
||||||
fmt.Printf("Application created: %s\n", createdApp.Name)
|
fmt.Printf("Application created: %s\n", createdApp.Name)
|
||||||
|
|
||||||
SyncApp(app.Name, clustername, namespace)
|
SyncApp(objectID, app.Name, clustername, namespace)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getConfig(cluster string, namesname string) {
|
func getConfig(objectID string, cluster string, namespace string) {
|
||||||
var hostcluster HostConfig
|
var hostcluster HostConfig
|
||||||
|
|
||||||
// "vc-"+cluster will be vcluster secret
|
// "vc-"+cluster will be vcluster secret
|
||||||
@@ -203,27 +208,37 @@ func getConfig(cluster string, namesname string) {
|
|||||||
log.Fatalf("Error creating clientSet: %v", err)
|
log.Fatalf("Error creating clientSet: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
//namespaces, err := clientset.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{})
|
secret, err := clientset.CoreV1().Secrets(namespace).Get(context.TODO(), "vc-"+cluster, metav1.GetOptions{})
|
||||||
|
|
||||||
// if err != nil {
|
|
||||||
// log.Fatalf("Error listing namespaces: %v", err)
|
|
||||||
// }
|
|
||||||
secret, err := clientset.CoreV1().Secrets(namesname).Get(context.TODO(), "vc-"+cluster, metav1.GetOptions{})
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error in getting cluster config")
|
fmt.Println("Error in getting cluster config")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
configStrings := string(secret.Data["config"])
|
configStrings := string(secret.Data["config"])
|
||||||
fmt.Println(configStrings)
|
configStrings = base64.StdEncoding.EncodeToString([]byte(configStrings))
|
||||||
|
|
||||||
// for _, ns := range namespaces.Items {
|
updateConfig(objectID, configStrings, namespace)
|
||||||
// fmt.Println("Namespace:", ns.Name)
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func SyncApp(appName string, cluster string, namesname string) {
|
func updateConfig(objectID string, configStrings string, namespace string) {
|
||||||
|
id, _ := primitive.ObjectIDFromHex(objectID)
|
||||||
|
|
||||||
|
filter := bson.M{"_id": id}
|
||||||
|
update := bson.M{
|
||||||
|
"$set": bson.M{
|
||||||
|
"cluster_config": configStrings,
|
||||||
|
"namespace": namespace,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.Vclusters_details.UpdateOne(context.TODO(), filter, update)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("update cluster config error: ", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncApp(objectID string, appName string, cluster string, namesname string) {
|
||||||
|
|
||||||
InitializeClient()
|
InitializeClient()
|
||||||
|
|
||||||
@@ -260,7 +275,7 @@ func SyncApp(appName string, cluster string, namesname string) {
|
|||||||
|
|
||||||
if status == "Synced" && health == "Healthy" {
|
if status == "Synced" && health == "Healthy" {
|
||||||
log.Printf("App %s synced successfully", task.AppName)
|
log.Printf("App %s synced successfully", task.AppName)
|
||||||
getConfig(task.Clustername, task.Namespace)
|
getConfig(task.ObjectID, task.Clustername, task.Namespace)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,6 +292,7 @@ func SyncApp(appName string, cluster string, namesname string) {
|
|||||||
AppName: appName,
|
AppName: appName,
|
||||||
Clustername: cluster,
|
Clustername: cluster,
|
||||||
Namespace: namesname,
|
Namespace: namesname,
|
||||||
|
ObjectID: objectID,
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Application synced successfully: %s\n", appName)
|
fmt.Printf("Application synced successfully: %s\n", appName)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package handler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"main/argohandler"
|
"main/argohandler"
|
||||||
"main/db"
|
"main/db"
|
||||||
@@ -22,6 +23,7 @@ type Cluster struct {
|
|||||||
Memory string `json:"memory"`
|
Memory string `json:"memory"`
|
||||||
CreatedAt string `json:"createdAt"`
|
CreatedAt string `json:"createdAt"`
|
||||||
UserID primitive.ObjectID `json:"userId"`
|
UserID primitive.ObjectID `json:"userId"`
|
||||||
|
Cluster_config string `json:"clusterconfig"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Header struct {
|
type Header struct {
|
||||||
@@ -51,12 +53,15 @@ func CreateClusterHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := db.Vclusters_details.InsertOne(context.TODO(), cluster)
|
res, err := db.Vclusters_details.InsertOne(context.TODO(), cluster)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, `{"message": "Could not create cluster"}`, http.StatusInternalServerError)
|
http.Error(w, `{"message": "Could not create cluster"}`, http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
argohandler.CreateApp(cluster.Name, cluster.ControlPlane, cluster.PlatformVersion, cluster.Cpu, cluster.Memory, "userid")
|
objectID := res.InsertedID.(primitive.ObjectID)
|
||||||
|
idStr := objectID.Hex()
|
||||||
|
|
||||||
|
argohandler.CreateApp(idStr, cluster.Name, cluster.ControlPlane, cluster.PlatformVersion, cluster.Cpu, cluster.Memory, "userid")
|
||||||
|
|
||||||
response := map[string]string{"message": "Cluster created"}
|
response := map[string]string{"message": "Cluster created"}
|
||||||
|
|
||||||
@@ -74,6 +79,28 @@ func ListUserClusters(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Connect(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
clusterName := r.URL.Query().Get("Name")
|
||||||
|
if clusterName == "" {
|
||||||
|
http.Error(w, "Missing 'Name' parameter", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var existsCluster Cluster
|
||||||
|
_ = db.Vclusters_details.FindOne(context.TODO(), bson.M{"name": clusterName}).Decode(&existsCluster)
|
||||||
|
|
||||||
|
decoded, err := base64.StdEncoding.DecodeString(existsCluster.Cluster_config)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Failed to decode cluster config", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/x-yaml")
|
||||||
|
w.Write(decoded)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// func RegsiterClusterRoute(r *mux.Router) {
|
// func RegsiterClusterRoute(r *mux.Router) {
|
||||||
// r.HandleFunc("/createcluster", createClusterHandler).Methods("POST", "OPTIONS")
|
// r.HandleFunc("/createcluster", createClusterHandler).Methods("POST", "OPTIONS")
|
||||||
// }
|
// }
|
||||||
|
|||||||
1
main.go
1
main.go
@@ -127,6 +127,7 @@ func main() {
|
|||||||
router.HandleFunc("/login", loginHandler)
|
router.HandleFunc("/login", loginHandler)
|
||||||
router.HandleFunc("/createcluster", handler.CreateClusterHandler)
|
router.HandleFunc("/createcluster", handler.CreateClusterHandler)
|
||||||
router.HandleFunc("/clusters", handler.ListUserClusters)
|
router.HandleFunc("/clusters", handler.ListUserClusters)
|
||||||
|
router.HandleFunc("/connect", handler.Connect)
|
||||||
//handler.RegsiterClusterRoute(router)
|
//handler.RegsiterClusterRoute(router)
|
||||||
// Enable CORS
|
// Enable CORS
|
||||||
c := cors.New(cors.Options{
|
c := cors.New(cors.Options{
|
||||||
|
|||||||
Reference in New Issue
Block a user