From d12cb70cb92d50d9375dda3fc6ee8598889463c8 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 5 Nov 2021 15:29:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA=E5=8F=AF?= =?UTF-8?q?=E7=94=A8=E7=9A=84API=E8=8A=82=E7=82=B9=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/web/actions/default/api/delete.go | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/internal/web/actions/default/api/delete.go b/internal/web/actions/default/api/delete.go index 2772e046..3f4435de 100644 --- a/internal/web/actions/default/api/delete.go +++ b/internal/web/actions/default/api/delete.go @@ -13,16 +13,35 @@ type DeleteAction struct { func (this *DeleteAction) RunPost(params struct { NodeId int64 }) { - // TODO 检查权限 + // 创建日志 + defer this.CreateLog(oplogs.LevelInfo, "删除API节点 %d", params.NodeId) - _, err := this.RPC().APINodeRPC().DeleteAPINode(this.AdminContext(), &pb.DeleteAPINodeRequest{NodeId: params.NodeId}) + // 检查是否是唯一的节点 + nodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + if err != nil { + this.ErrorPage(err) + return + } + var apiNode = nodeResp.Node + if apiNode == nil { + this.Success() + } + if apiNode.IsOn { + countResp, err := this.RPC().APINodeRPC().CountAllEnabledAndOnAPINodes(this.AdminContext(), &pb.CountAllEnabledAndOnAPINodesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + if countResp.Count == 1 { + this.Fail("无法删除此节点:必须至少保留一个可用的API节点") + } + } + + _, err = this.RPC().APINodeRPC().DeleteAPINode(this.AdminContext(), &pb.DeleteAPINodeRequest{NodeId: params.NodeId}) if err != nil { this.ErrorPage(err) return } - // 创建日志 - defer this.CreateLog(oplogs.LevelInfo, "删除API节点 %d", params.NodeId) - this.Success() }