mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-06 13:14:24 +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,
|
||||
hostHandlers,
|
||||
enrollmentKeyHandlers,
|
||||
legacyHandlers,
|
||||
}
|
||||
|
||||
// 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"
|
||||
node, err := logic.GetNodeByID(nodeid)
|
||||
if err != nil {
|
||||
logger.Log(0, "error retrieving node to delete", err.Error())
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||
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())
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||
}
|
||||
return
|
||||
}
|
||||
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