func()

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})
}