in server/api/cluster.go [149:193]
func (handler *ClusterHandler) Import(c *gin.Context) {
namespace := c.Param("namespace")
clusterName := c.Param("cluster")
var req struct {
Nodes []string `json:"nodes" validate:"required"`
Password string `json:"password"`
}
if err := c.BindJSON(&req); err != nil {
helper.ResponseBadRequest(c, err)
return
}
if len(req.Nodes) == 0 {
helper.ResponseBadRequest(c, errors.New("nodes should NOT be empty"))
return
}
firstNode := store.NewClusterNode(req.Nodes[0], req.Password)
clusterNodesStr, err := firstNode.GetClusterNodesString(c)
if err != nil {
helper.ResponseError(c, err)
return
}
cluster, err := store.ParseCluster(clusterNodesStr)
if err != nil {
helper.ResponseError(c, err)
return
}
cluster.SetPassword(req.Password)
newNodes := make([]string, 0)
for _, node := range cluster.GetNodes() {
newNodes = append(newNodes, node.Addr())
}
if err := handler.s.CheckNewNodes(c, newNodes); err != nil {
helper.ResponseError(c, err)
return
}
cluster.Name = clusterName
if err := handler.s.CreateCluster(c, namespace, cluster); err != nil {
helper.ResponseError(c, err)
return
}
helper.ResponseOK(c, gin.H{"cluster": cluster})
}