mirror of https://github.com/shunfei/cronsun
Node also should be removed from groups when it deleted by someone manually. Fix #32
parent
3a9c5c1d2e
commit
25f10aeb42
30
web/node.go
30
web/node.go
|
@ -191,5 +191,35 @@ func (n *Node) DeleteNode(ctx *Context) {
|
|||
return
|
||||
}
|
||||
|
||||
// remove node from group
|
||||
var errmsg = "failed to remove node %s from groups, please remove it manually: %s"
|
||||
resp, err = cronsun.DefalutClient.Get(conf.Config.Group, v3.WithPrefix())
|
||||
if err != nil {
|
||||
outJSONWithCode(ctx.W, http.StatusInternalServerError, fmt.Sprintf(errmsg, ip, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
for i := range resp.Kvs {
|
||||
g := cronsun.Group{}
|
||||
err = json.Unmarshal(resp.Kvs[i].Value, &g)
|
||||
if err != nil {
|
||||
outJSONWithCode(ctx.W, http.StatusInternalServerError, fmt.Sprintf(errmsg, ip, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
var nids = make([]string, 0, len(g.NodeIDs))
|
||||
for _, nid := range g.NodeIDs {
|
||||
if nid != ip {
|
||||
nids = append(nids, nid)
|
||||
}
|
||||
}
|
||||
g.NodeIDs = nids
|
||||
|
||||
if _, err = g.Put(resp.Kvs[i].ModRevision); err != nil {
|
||||
outJSONWithCode(ctx.W, http.StatusInternalServerError, fmt.Sprintf(errmsg, ip, err.Error()))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
outJSONWithCode(ctx.W, http.StatusNoContent, nil)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue