mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 08:47:35 +08:00
refactor migrate for new models
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ func nodeHandlers(r *mux.Router) {
|
|||||||
r.HandleFunc("/api/nodes/{network}", authorize(false, true, "network", http.HandlerFunc(getNetworkNodes))).Methods(http.MethodGet)
|
r.HandleFunc("/api/nodes/{network}", authorize(false, true, "network", http.HandlerFunc(getNetworkNodes))).Methods(http.MethodGet)
|
||||||
r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(true, true, "node", http.HandlerFunc(getNode))).Methods(http.MethodGet)
|
r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(true, true, "node", http.HandlerFunc(getNode))).Methods(http.MethodGet)
|
||||||
r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(false, true, "node", http.HandlerFunc(updateNode))).Methods(http.MethodPut)
|
r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(false, true, "node", http.HandlerFunc(updateNode))).Methods(http.MethodPut)
|
||||||
r.HandleFunc("/api/nodes/{network}/{nodeid}/migrate", authorize(true, true, "node", http.HandlerFunc(nodeNodeUpdate))).Methods("PUT")
|
r.HandleFunc("/api/nodes/{network}/{nodeid}/migrate", authorize(true, true, "node", http.HandlerFunc(migrate))).Methods("PUT")
|
||||||
r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(true, true, "node", http.HandlerFunc(deleteNode))).Methods(http.MethodDelete)
|
r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(true, true, "node", http.HandlerFunc(deleteNode))).Methods(http.MethodDelete)
|
||||||
r.HandleFunc("/api/nodes/{network}/{nodeid}/createrelay", authorize(false, true, "user", http.HandlerFunc(createRelay))).Methods(http.MethodPost)
|
r.HandleFunc("/api/nodes/{network}/{nodeid}/createrelay", authorize(false, true, "user", http.HandlerFunc(createRelay))).Methods(http.MethodPost)
|
||||||
r.HandleFunc("/api/nodes/{network}/{nodeid}/deleterelay", authorize(false, true, "user", http.HandlerFunc(deleteRelay))).Methods(http.MethodDelete)
|
r.HandleFunc("/api/nodes/{network}/{nodeid}/deleterelay", authorize(false, true, "user", http.HandlerFunc(deleteRelay))).Methods(http.MethodDelete)
|
||||||
@@ -841,88 +842,39 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) {
|
|||||||
// oauth
|
// oauth
|
||||||
//
|
//
|
||||||
// Responses:
|
// Responses:
|
||||||
// 200: nodeResponse
|
// 200: nodeJoinResponse
|
||||||
func nodeNodeUpdate(w http.ResponseWriter, r *http.Request) {
|
func migrate(w http.ResponseWriter, r *http.Request) {
|
||||||
// should only be used by nodes
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
|
|
||||||
var params = mux.Vars(r)
|
|
||||||
|
|
||||||
//start here
|
|
||||||
nodeid := params["nodeid"]
|
|
||||||
currentNode, err := logic.GetNodeByID(nodeid)
|
|
||||||
if err != nil {
|
|
||||||
logger.Log(0,
|
|
||||||
fmt.Sprintf("error fetching node [ %s ] info: %v during migrate", nodeid, err))
|
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var newNode models.Node
|
|
||||||
// we decode our body request params
|
// we decode our body request params
|
||||||
err = json.NewDecoder(r.Body).Decode(&newNode)
|
data := models.JoinData{}
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, r.Header.Get("user"), "error decoding request body: ", err.Error())
|
logger.Log(0, r.Header.Get("user"), "error decoding request body: ", err.Error())
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
relayupdate := false
|
params := mux.Vars(r)
|
||||||
if currentNode.IsRelay && len(newNode.RelayAddrs) > 0 {
|
network, err := logic.GetNetwork(params["network"])
|
||||||
if len(newNode.RelayAddrs) != len(currentNode.RelayAddrs) {
|
|
||||||
relayupdate = true
|
|
||||||
} else {
|
|
||||||
for i, addr := range newNode.RelayAddrs {
|
|
||||||
if addr != currentNode.RelayAddrs[i] {
|
|
||||||
relayupdate = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
relayedUpdate := false
|
|
||||||
if currentNode.IsRelayed && (currentNode.Address.String() != newNode.Address.String() || currentNode.Address6.String() != newNode.Address6.String()) {
|
|
||||||
relayedUpdate = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if !servercfg.GetRce() {
|
|
||||||
newNode.PostDown = currentNode.PostDown
|
|
||||||
newNode.PostUp = currentNode.PostUp
|
|
||||||
}
|
|
||||||
|
|
||||||
ifaceDelta := logic.IfaceDelta(¤tNode, &newNode)
|
|
||||||
|
|
||||||
if ifaceDelta && servercfg.Is_EE {
|
|
||||||
if err = logic.EnterpriseResetAllPeersFailovers(currentNode.ID.String(), currentNode.Network); err != nil {
|
|
||||||
logger.Log(0, "failed to reset failover lists during node update for node", currentNode.ID.String(), currentNode.Network)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = logic.UpdateNode(¤tNode, &newNode)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, r.Header.Get("user"),
|
logger.Log(0, "error retrieving network: ", err.Error())
|
||||||
fmt.Sprintf("failed to update node info [ %s ] info: %v", nodeid, err))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if relayupdate {
|
key, err := logic.CreateAccessKey(models.AccessKey{}, network)
|
||||||
updatenodes := logic.UpdateRelay(currentNode.Network, currentNode.RelayAddrs, newNode.RelayAddrs)
|
if err != nil {
|
||||||
if len(updatenodes) > 0 {
|
logger.Log(0, "error creating key: ", err.Error())
|
||||||
for _, relayedNode := range updatenodes {
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
runUpdates(&relayedNode, false)
|
return
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if relayedUpdate {
|
data.Key = key.Value
|
||||||
updateRelay(¤tNode, &newNode)
|
payload, err := json.Marshal(data)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error encoding data: ", err.Error())
|
||||||
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if servercfg.IsDNSMode() {
|
r.Body = io.NopCloser(strings.NewReader(string(payload)))
|
||||||
logic.SetDNS()
|
r.ContentLength = int64(len(string(payload)))
|
||||||
}
|
createNode(w, r)
|
||||||
|
|
||||||
logger.Log(1, r.Header.Get("user"), "updated node", currentNode.ID.String(), "on network", currentNode.Network)
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
json.NewEncoder(w).Encode(newNode)
|
|
||||||
|
|
||||||
runUpdates(&newNode, ifaceDelta)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// swagger:route PUT /api/nodes/{network}/{nodeid} nodes updateNode
|
// swagger:route PUT /api/nodes/{network}/{nodeid} nodes updateNode
|
||||||
|
2
main.go
2
main.go
@@ -28,7 +28,7 @@ import (
|
|||||||
stunserver "github.com/gravitl/netmaker/stun-server"
|
stunserver "github.com/gravitl/netmaker/stun-server"
|
||||||
)
|
)
|
||||||
|
|
||||||
var version = "dev"
|
var version = "v0.18.0"
|
||||||
|
|
||||||
// Start DB Connection and start API Request Handler
|
// Start DB Connection and start API Request Handler
|
||||||
func main() {
|
func main() {
|
||||||
|
Reference in New Issue
Block a user