| 162 | } |
| 163 | |
| 164 | func (handler *ClusterHandler) Import(c *gin.Context) { |
| 165 | namespace := c.Param("namespace") |
| 166 | clusterName := c.Param("cluster") |
| 167 | var req struct { |
| 168 | Nodes []string `json:"nodes" validate:"required"` |
| 169 | Password string `json:"password"` |
| 170 | } |
| 171 | if err := c.BindJSON(&req); err != nil { |
| 172 | helper.ResponseBadRequest(c, err) |
| 173 | return |
| 174 | } |
| 175 | if len(req.Nodes) == 0 { |
| 176 | helper.ResponseBadRequest(c, errors.New("nodes should NOT be empty")) |
| 177 | return |
| 178 | } |
| 179 | |
| 180 | firstNode := store.NewClusterNode(req.Nodes[0], req.Password) |
| 181 | clusterNodesStr, err := firstNode.GetClusterNodesString(c) |
| 182 | if err != nil { |
| 183 | helper.ResponseError(c, err) |
| 184 | return |
| 185 | } |
| 186 | cluster, err := store.ParseCluster(clusterNodesStr) |
| 187 | if err != nil { |
| 188 | helper.ResponseError(c, err) |
| 189 | return |
| 190 | } |
| 191 | cluster.SetPassword(req.Password) |
| 192 | |
| 193 | newNodes := make([]string, 0) |
| 194 | for _, node := range cluster.GetNodes() { |
| 195 | newNodes = append(newNodes, node.Addr()) |
| 196 | } |
| 197 | if err := handler.s.CheckNewNodes(c, newNodes); err != nil { |
| 198 | helper.ResponseError(c, err) |
| 199 | return |
| 200 | } |
| 201 | |
| 202 | cluster.Name = clusterName |
| 203 | if err := handler.s.CreateCluster(c, namespace, cluster); err != nil { |
| 204 | helper.ResponseError(c, err) |
| 205 | return |
| 206 | } |
| 207 | helper.ResponseOK(c, gin.H{"cluster": cluster}) |
| 208 | } |