Go(Gin) + React(Vite + shadcn/ui + Tailwind) 前后端分离,全中文 UI - 集群管理:Kubeconfig / Token 双接入,kubectl + helm 部署 - 主机管理:SSH 密钥 / 密码双认证,CPU/内存/磁盘使用率监控,SSH 错误中文友好提示 - 存储配置、部署管理、系统设置 - Docker 镜像内置 kubectl + helm,开箱即用 - run.sh 一键启停(start/stop/restart/status) Co-Authored-By: Claude <noreply@anthropic.com>
183 lines
4.7 KiB
Go
183 lines
4.7 KiB
Go
package controllers
|
|
|
|
import (
|
|
"lokideploy/services"
|
|
"lokideploy/utils"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type DeploymentController struct {
|
|
service *services.DeploymentService
|
|
}
|
|
|
|
func NewDeploymentController() *DeploymentController {
|
|
return &DeploymentController{service: services.NewDeploymentService()}
|
|
}
|
|
|
|
type CreateDeploymentRequest struct {
|
|
Name string `json:"name" binding:"required"`
|
|
Description string `json:"description"`
|
|
Version string `json:"version"`
|
|
Mode string `json:"mode" binding:"required,oneof=k8s-helm k8s-yaml host-binary"`
|
|
ClusterID *uint `json:"clusterID"`
|
|
HostID *uint `json:"hostID"`
|
|
Namespace string `json:"namespace"`
|
|
StorageConfigID uint `json:"storageConfigID"`
|
|
AuthEnabled bool `json:"authEnabled"`
|
|
RetentionDays int `json:"retentionDays"`
|
|
Replicas int `json:"replicas"`
|
|
ResourcesCPU string `json:"resourcesCPU"`
|
|
ResourcesMem string `json:"resourcesMem"`
|
|
StorageSize string `json:"storageSize"`
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Create(c *gin.Context) {
|
|
var req CreateDeploymentRequest
|
|
if !utils.BindAndValidate(c, &req) {
|
|
return
|
|
}
|
|
deployment, err := ctrl.service.Create(&services.CreateDeploymentRequest{
|
|
Name: req.Name,
|
|
Description: req.Description,
|
|
Version: req.Version,
|
|
Mode: req.Mode,
|
|
ClusterID: req.ClusterID,
|
|
HostID: req.HostID,
|
|
Namespace: req.Namespace,
|
|
StorageConfigID: req.StorageConfigID,
|
|
AuthEnabled: req.AuthEnabled,
|
|
RetentionDays: req.RetentionDays,
|
|
Replicas: req.Replicas,
|
|
ResourcesCPU: req.ResourcesCPU,
|
|
ResourcesMem: req.ResourcesMem,
|
|
StorageSize: req.StorageSize,
|
|
})
|
|
if err != nil {
|
|
utils.Error(c, 400, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, deployment)
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Get(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
deployment, err := ctrl.service.Get(uint(id))
|
|
if err != nil {
|
|
utils.NotFound(c, "部署不存在")
|
|
return
|
|
}
|
|
utils.Success(c, deployment)
|
|
}
|
|
|
|
func (ctrl *DeploymentController) List(c *gin.Context) {
|
|
page, pageSize := utils.Pagination(c)
|
|
deployments, total, err := ctrl.service.List(page, pageSize)
|
|
if err != nil {
|
|
utils.Error(c, 500, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, utils.PageData{
|
|
List: deployments, Total: total, Page: page, PageSize: pageSize,
|
|
})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Update(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
var updates map[string]interface{}
|
|
if !utils.BindAndValidate(c, &updates) {
|
|
return
|
|
}
|
|
if err := ctrl.service.Update(uint(id), updates); err != nil {
|
|
utils.Error(c, 400, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, gin.H{"message": "updated"})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Delete(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
if err := ctrl.service.Delete(uint(id)); err != nil {
|
|
utils.Error(c, 400, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, gin.H{"message": "deleted"})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Deploy(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
if err := ctrl.service.StartDeploy(uint(id)); err != nil {
|
|
utils.Error(c, 400, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, gin.H{"message": "deployment started"})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Stop(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
if err := ctrl.service.StopDeployment(uint(id)); err != nil {
|
|
utils.Error(c, 400, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, gin.H{"message": "deployment stopped"})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) Restart(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
if err := ctrl.service.RestartDeployment(uint(id)); err != nil {
|
|
utils.Error(c, 400, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, gin.H{"message": "deployment restarted"})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) GetLogs(c *gin.Context) {
|
|
id, err := utils.IntParam(c, "id")
|
|
if err != nil {
|
|
utils.BadRequest(c, "ID 无效")
|
|
return
|
|
}
|
|
page, pageSize := utils.Pagination(c)
|
|
logs, total, err := ctrl.service.GetLogs(uint(id), page, pageSize)
|
|
if err != nil {
|
|
utils.Error(c, 500, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, utils.PageData{
|
|
List: logs, Total: total, Page: page, PageSize: pageSize,
|
|
})
|
|
}
|
|
|
|
func (ctrl *DeploymentController) GetStats(c *gin.Context) {
|
|
stats, err := ctrl.service.GetStats()
|
|
if err != nil {
|
|
utils.Error(c, 500, err.Error())
|
|
return
|
|
}
|
|
utils.Success(c, stats)
|
|
}
|