This commit is contained in:
Ybehrooz
2025-08-03 14:54:21 +03:30
parent 97d1424fa7
commit b1656a5e65
3 changed files with 319 additions and 6 deletions

View File

@@ -12,6 +12,7 @@ import (
"main/db"
"net/http"
"sort"
"strconv"
"strings"
"time"
@@ -214,6 +215,33 @@ func CreateClusterHandler(w http.ResponseWriter, r *http.Request) {
}
func Deletecluster(w http.ResponseWriter, r *http.Request) {
clusterName := r.URL.Query().Get("Name")
if clusterName == "" {
http.Error(w, "Invalid input", http.StatusBadRequest)
return
}
err := argohandler.DeleteApp(clusterName)
if err != nil {
http.Error(w, "File to delete "+clusterName, http.StatusInternalServerError)
return
}
res, err := db.Vclusters_details.DeleteOne(context.TODO(), bson.M{"name": clusterName})
if err != nil {
http.Error(w, `{"message": "Could not delete cluster"}`, http.StatusInternalServerError)
return
}
if res.DeletedCount == 0 {
http.Error(w, `{"message": "No cluster found to delete"}`, http.StatusNotFound)
return
}
}
func getClientset(w http.ResponseWriter, clustername string) (*kubernetes.Clientset, *rest.Config, error) {
kubeconfig, err := getClusterConfig(clustername)
@@ -820,6 +848,15 @@ func Pod_exec(w http.ResponseWriter, r *http.Request) {
podName := r.URL.Query().Get("Pod")
command := r.URL.Query().Get("Command")
//var cmd []string
parsed, err := strconv.Unquote(command)
if err != nil {
http.Error(w, "Invalid command string: "+err.Error(), http.StatusBadRequest)
return
}
// cmd = strings.Fields(parsed)
cmd := []string{"sh", "-c", parsed}
if clustername == "" || namespace == "" || podName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
@@ -831,8 +868,6 @@ func Pod_exec(w http.ResponseWriter, r *http.Request) {
return
}
cmd := []string{command}
req := clientset.CoreV1().RESTClient().
Post().
Resource("pods").
@@ -874,3 +909,237 @@ func Pod_exec(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(output)
}
func Pod_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
podName := r.URL.Query().Get("Pod")
if clustername == "" || namespace == "" || podName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.CoreV1().Pods(namespace).Delete(context.TODO(), podName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting pod", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(podName + " Has been deleted")
}
func Service_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
serviceName := r.URL.Query().Get("serviceName")
if clustername == "" || namespace == "" || serviceName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.CoreV1().Services(namespace).Delete(context.TODO(), serviceName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting service", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(serviceName + " Has been deleted")
}
func Deployment_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
deploymenteName := r.URL.Query().Get("deploymenteName")
if clustername == "" || namespace == "" || deploymenteName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.AppsV1().Deployments(namespace).Delete(context.TODO(), deploymenteName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting deploymente", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(deploymenteName + " Has been deleted")
}
func StatefulSet_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
statefulSetName := r.URL.Query().Get("statefulSetName")
if clustername == "" || namespace == "" || statefulSetName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.AppsV1().StatefulSets(namespace).Delete(context.TODO(), statefulSetName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting statefulSet", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(statefulSetName + " Has been deleted")
}
func Daemonsets_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
daemonsetsName := r.URL.Query().Get("daemonsetsName")
if clustername == "" || namespace == "" || daemonsetsName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.AppsV1().DaemonSets(namespace).Delete(context.TODO(), daemonsetsName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting daemonsets"+err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(daemonsetsName + " Has been deleted")
}
func JobsName_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
jobsName := r.URL.Query().Get("jobsName")
if clustername == "" || namespace == "" || jobsName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.BatchV1().Jobs(namespace).Delete(context.TODO(), jobsName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting Jobs", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(jobsName + " Has been deleted")
}
func Replicaset_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
replicasetName := r.URL.Query().Get("replicasetName")
if clustername == "" || namespace == "" || replicasetName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.AppsV1().ReplicaSets(namespace).Delete(context.TODO(), replicasetName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting ReplicaSets", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(replicasetName + " Has been deleted")
}
func Replicationcontroller_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
replicationcontrollerName := r.URL.Query().Get("replicationcontrollerName")
if clustername == "" || namespace == "" || replicationcontrollerName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.CoreV1().ReplicationControllers(namespace).Delete(context.TODO(), replicationcontrollerName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting ReplicationControllers", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(replicationcontrollerName + " Has been deleted")
}
func Cronjob_delete(w http.ResponseWriter, r *http.Request) {
clustername := r.URL.Query().Get("Name")
namespace := r.URL.Query().Get("Namespace")
cronjobName := r.URL.Query().Get("cronjobName")
if clustername == "" || namespace == "" || cronjobName == "" {
http.Error(w, "Missing required parameters (Name, Namespace, Pod)", http.StatusBadRequest)
return
}
clientset, _, err := getClientset(w, clustername)
if err != nil {
http.Error(w, "Error getting Kubernetes clientset", http.StatusInternalServerError)
return
}
err = clientset.BatchV1().CronJobs(namespace).Delete(context.TODO(), cronjobName, metav1.DeleteOptions{})
if err != nil {
http.Error(w, "Error deleting CronJobs", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(cronjobName + " Has been deleted")
}