mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-10 07:05:28 +08:00
added ability to remove legacy nodes
This commit is contained in:
parent
8f05238875
commit
692441279b
4 changed files with 89 additions and 2 deletions
|
@ -27,6 +27,7 @@ var HttpHandlers = []interface{}{
|
||||||
loggerHandlers,
|
loggerHandlers,
|
||||||
hostHandlers,
|
hostHandlers,
|
||||||
enrollmentKeyHandlers,
|
enrollmentKeyHandlers,
|
||||||
|
legacyHandlers,
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleRESTRequests - handles the rest requests
|
// HandleRESTRequests - handles the rest requests
|
||||||
|
|
35
controllers/legacy.go
Normal file
35
controllers/legacy.go
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package controller
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/gravitl/netmaker/logger"
|
||||||
|
"github.com/gravitl/netmaker/logic"
|
||||||
|
)
|
||||||
|
|
||||||
|
func legacyHandlers(r *mux.Router) {
|
||||||
|
r.HandleFunc("/api/v1/legacy/nodes", logic.SecurityCheck(true, http.HandlerFunc(wipeLegacyNodes))).Methods(http.MethodDelete)
|
||||||
|
}
|
||||||
|
|
||||||
|
// swagger:route DELETE /api/v1/legacy/nodes nodes wipeLegacyNodes
|
||||||
|
//
|
||||||
|
// Delete all legacy nodes from DB.
|
||||||
|
//
|
||||||
|
// Schemes: https
|
||||||
|
//
|
||||||
|
// Security:
|
||||||
|
// oauth
|
||||||
|
//
|
||||||
|
// Responses:
|
||||||
|
// 200: wipeLegacyNodesResponse
|
||||||
|
func wipeLegacyNodes(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Set header
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
if err := logic.RemoveAllLegacyNodes(); err != nil {
|
||||||
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
|
logger.Log(0, "error occurred when removing legacy nodes", err.Error())
|
||||||
|
}
|
||||||
|
logger.Log(0, r.Header.Get("user"), "wiped legacy nodes")
|
||||||
|
logic.ReturnSuccessResponse(w, r, "wiped all legacy nodes")
|
||||||
|
}
|
|
@ -975,8 +975,13 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
||||||
fromNode := r.Header.Get("requestfrom") == "node"
|
fromNode := r.Header.Get("requestfrom") == "node"
|
||||||
node, err := logic.GetNodeByID(nodeid)
|
node, err := logic.GetNodeByID(nodeid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if logic.CheckAndRemoveLegacyNode(nodeid) {
|
||||||
|
logger.Log(0, "removed legacy node", nodeid)
|
||||||
|
logic.ReturnSuccessResponse(w, r, nodeid+" deleted.")
|
||||||
|
} else {
|
||||||
logger.Log(0, "error retrieving node to delete", err.Error())
|
logger.Log(0, "error retrieving node to delete", err.Error())
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if r.Header.Get("ismaster") != "yes" {
|
if r.Header.Get("ismaster") != "yes" {
|
||||||
|
|
46
logic/legacy.go
Normal file
46
logic/legacy.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/gravitl/netmaker/database"
|
||||||
|
"github.com/gravitl/netmaker/logger"
|
||||||
|
"github.com/gravitl/netmaker/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsLegacyNode - checks if a node is legacy or not
|
||||||
|
func IsLegacyNode(nodeID string) bool {
|
||||||
|
record, err := database.FetchRecord(database.NODES_TABLE_NAME, nodeID)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
var currentNode models.Node
|
||||||
|
var legacyNode models.LegacyNode
|
||||||
|
currentNodeErr := json.Unmarshal([]byte(record), ¤tNode)
|
||||||
|
legacyNodeErr := json.Unmarshal([]byte(record), &legacyNode)
|
||||||
|
return currentNodeErr != nil && legacyNodeErr == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckAndRemoveLegacyNode - checks for legacy node and removes
|
||||||
|
func CheckAndRemoveLegacyNode(nodeID string) bool {
|
||||||
|
if IsLegacyNode(nodeID) {
|
||||||
|
if err := database.DeleteRecord(database.NODES_TABLE_NAME, nodeID); err == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveAllLegacyNodes - fetches all legacy nodes from DB and removes
|
||||||
|
func RemoveAllLegacyNodes() error {
|
||||||
|
records, err := database.FetchRecords(database.NODES_TABLE_NAME)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for k := range records {
|
||||||
|
if CheckAndRemoveLegacyNode(k) {
|
||||||
|
logger.Log(0, "removed legacy node", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue