update
This commit is contained in:
1 parent
0690285147
commit
5618cd2738
154 files changed
+5021
-3161
No files matched your search
@@ -12,9 +12,15 @@ import (
|
||||
|
||||
func (h *KubernetesHandler) GetResourceYAMLNS(c *gin.Context) {
|
||||
clusterID := h.resolveClusterCode(c.Param("clusterCode"))
|
||||
if clusterID == 0 { c.JSON(500, model.Response{Code: 500, Message: "cluster not found"}); return }
|
||||
if clusterID == 0 {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "cluster not found"})
|
||||
return
|
||||
}
|
||||
client, _, err := h.getK8sClient(clusterID)
|
||||
if err != nil { c.JSON(500, model.Response{Code: 500, Message: err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: err.Error()})
|
||||
return
|
||||
}
|
||||
ns := c.Param("namespace")
|
||||
resource := c.Param("resource")
|
||||
// Fallback: specific routes (statefulsets/:name/yaml, daemonsets/:name/yaml) have no :resource param
|
||||
@@ -62,10 +68,14 @@ func (h *KubernetesHandler) GetResourceYAMLNS(c *gin.Context) {
|
||||
case "rolebindings", "rolebinding":
|
||||
apiPath = fmt.Sprintf("/apis/rbac.authorization.k8s.io/v1/namespaces/%s/rolebindings/%s", ns, name)
|
||||
default:
|
||||
c.JSON(400, model.Response{Code: 400, Message: "unsupported resource type: " + resource}); return
|
||||
c.JSON(400, model.Response{Code: 400, Message: "unsupported resource type: " + resource})
|
||||
return
|
||||
}
|
||||
yamlBytes, err := client.GetResourceYAML(apiPath)
|
||||
if err != nil { c.JSON(500, model.Response{Code: 500, Message: "获取YAML失败: " + err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "获取YAML失败: " + err.Error()})
|
||||
return
|
||||
}
|
||||
c.Header("Content-Type", "application/yaml")
|
||||
c.String(200, string(yamlBytes))
|
||||
}
|
||||
@@ -73,9 +83,15 @@ func (h *KubernetesHandler) GetResourceYAMLNS(c *gin.Context) {
|
||||
// UpdateResourceYAMLNS applies YAML to update a K8s resource
|
||||
func (h *KubernetesHandler) UpdateResourceYAMLNS(c *gin.Context) {
|
||||
clusterID := h.resolveClusterCode(c.Param("clusterCode"))
|
||||
if clusterID == 0 { c.JSON(500, model.Response{Code: 500, Message: "cluster not found"}); return }
|
||||
if clusterID == 0 {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "cluster not found"})
|
||||
return
|
||||
}
|
||||
client, _, err := h.getK8sClient(clusterID)
|
||||
if err != nil { c.JSON(500, model.Response{Code: 500, Message: err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: err.Error()})
|
||||
return
|
||||
}
|
||||
ns := c.Param("namespace")
|
||||
resource := c.Param("resource")
|
||||
// Fallback: specific routes (statefulsets/:name/yaml, daemonsets/:name/yaml) have no :resource param
|
||||
@@ -90,7 +106,10 @@ func (h *KubernetesHandler) UpdateResourceYAMLNS(c *gin.Context) {
|
||||
}
|
||||
name := c.Param("name")
|
||||
yamlData, err := io.ReadAll(c.Request.Body)
|
||||
if err != nil { c.JSON(400, model.Response{Code: 400, Message: "读取body失败"}); return }
|
||||
if err != nil {
|
||||
c.JSON(400, model.Response{Code: 400, Message: "读取body失败"})
|
||||
return
|
||||
}
|
||||
var apiPath string
|
||||
switch resource {
|
||||
case "deployments", "deployment":
|
||||
@@ -124,10 +143,12 @@ func (h *KubernetesHandler) UpdateResourceYAMLNS(c *gin.Context) {
|
||||
case "rolebindings", "rolebinding":
|
||||
apiPath = fmt.Sprintf("/apis/rbac.authorization.k8s.io/v1/namespaces/%s/rolebindings/%s", ns, name)
|
||||
default:
|
||||
c.JSON(400, model.Response{Code: 400, Message: "unsupported resource type: " + resource}); return
|
||||
c.JSON(400, model.Response{Code: 400, Message: "unsupported resource type: " + resource})
|
||||
return
|
||||
}
|
||||
if err := client.UpdateResourceYAML(apiPath, yamlData); err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "更新失败: " + err.Error()}); return
|
||||
c.JSON(500, model.Response{Code: 500, Message: "更新失败: " + err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(200, model.Response{Code: 200, Message: "YAML已应用"})
|
||||
}
|
||||
@@ -173,16 +194,26 @@ func resourceAPIPath(ns, resource, name string) (string, error) {
|
||||
// DeleteResourceYAMLNS deletes a K8s resource (Service/Ingress/ConfigMap etc.)
|
||||
func (h *KubernetesHandler) DeleteResourceYAMLNS(c *gin.Context) {
|
||||
clusterID := h.resolveClusterCode(c.Param("clusterCode"))
|
||||
if clusterID == 0 { c.JSON(500, model.Response{Code: 500, Message: "cluster not found"}); return }
|
||||
if clusterID == 0 {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "cluster not found"})
|
||||
return
|
||||
}
|
||||
client, _, err := h.getK8sClient(clusterID)
|
||||
if err != nil { c.JSON(500, model.Response{Code: 500, Message: err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: err.Error()})
|
||||
return
|
||||
}
|
||||
ns := c.Param("namespace")
|
||||
resource := c.Param("resource")
|
||||
name := c.Param("name")
|
||||
apiPath, err := resourceAPIPath(ns, resource, name)
|
||||
if err != nil { c.JSON(400, model.Response{Code: 400, Message: err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(400, model.Response{Code: 400, Message: err.Error()})
|
||||
return
|
||||
}
|
||||
if err := client.DeleteResource(apiPath); err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "删除失败: " + err.Error()}); return
|
||||
c.JSON(500, model.Response{Code: 500, Message: "删除失败: " + err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(200, model.Response{Code: 200, Message: "资源已删除"})
|
||||
}
|
||||
@@ -190,18 +221,33 @@ func (h *KubernetesHandler) DeleteResourceYAMLNS(c *gin.Context) {
|
||||
// getK8sClient builds a K8s API client from cluster's stored kubeconfig
|
||||
func (h *KubernetesHandler) ApplyYAML(c *gin.Context) {
|
||||
clusterID := h.resolveClusterCode(c.Param("clusterCode"))
|
||||
if clusterID == 0 { c.JSON(500, model.Response{Code: 500, Message: "cluster not found"}); return }
|
||||
if clusterID == 0 {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "cluster not found"})
|
||||
return
|
||||
}
|
||||
client, _, err := h.getK8sClient(clusterID)
|
||||
if err != nil { c.JSON(500, model.Response{Code: 500, Message: err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
var req struct {
|
||||
YAML string `json:"yaml"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, model.Response{Code: 400, Message: "参数错误: " + err.Error()}); return }
|
||||
if req.YAML == "" { c.JSON(400, model.Response{Code: 400, Message: "YAML 内容不能为空"}); return }
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
c.JSON(400, model.Response{Code: 400, Message: "参数错误: " + err.Error()})
|
||||
return
|
||||
}
|
||||
if req.YAML == "" {
|
||||
c.JSON(400, model.Response{Code: 400, Message: "YAML 内容不能为空"})
|
||||
return
|
||||
}
|
||||
|
||||
result, err := client.ApplyYAML(req.YAML)
|
||||
if err != nil { c.JSON(500, model.Response{Code: 500, Message: "Apply 失败: " + err.Error()}); return }
|
||||
if err != nil {
|
||||
c.JSON(500, model.Response{Code: 500, Message: "Apply 失败: " + err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, model.Response{Code: 200, Message: "资源已应用", Data: result})
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user