in server/api/cluster.go [66:107]
func (handler *ClusterHandler) Create(c *gin.Context) {
namespace := c.Param("namespace")
var req CreateClusterRequest
if err := c.BindJSON(&req); err != nil {
helper.ResponseBadRequest(c, err)
return
}
clusterStore := handler.s
if err := clusterStore.CheckNewNodes(c, req.Nodes); err != nil {
helper.ResponseError(c, err)
return
}
cluster, err := store.NewCluster(req.Name, req.Nodes, req.Replicas)
if err != nil {
helper.ResponseBadRequest(c, err)
return
}
cluster.SetPassword(req.Password)
checkClusterMode := strings.ToLower(c.GetHeader(consts.HeaderDontCheckClusterMode)) == "yes"
for _, node := range cluster.GetNodes() {
if !checkClusterMode {
break
}
version, err := node.CheckClusterMode(c)
if err != nil {
helper.ResponseError(c, err)
return
}
if version != -1 {
helper.ResponseBadRequest(c, errors.New("node is already in cluster mode"))
return
}
}
if err := clusterStore.CreateCluster(c, namespace, cluster); err != nil {
helper.ResponseError(c, err)
return
}
helper.ResponseCreated(c, gin.H{"cluster": cluster})
}