From 2fe8025afa1f76d5c75df657863374bdd1356d5d Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 12 Jan 2022 14:21:15 -0500 Subject: [PATCH] Cover a legacy case, allow server to run with uuids --- logic/nodes.go | 27 +++++++++++++++++++++++++++ logic/server.go | 8 +++++--- logic/util.go | 4 +++- models/node.go | 5 ++--- serverctl/serverctl.go | 9 +++++++-- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/logic/nodes.go b/logic/nodes.go index 75e63036..6b35c4bc 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -5,12 +5,14 @@ import ( "errors" "fmt" "sort" + "strings" "time" "github.com/go-playground/validator/v10" "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/models" + "github.com/gravitl/netmaker/servercfg" "github.com/gravitl/netmaker/validation" ) @@ -431,3 +433,28 @@ func GetDeletedNodeByID(uuid string) (models.Node, error) { return node, nil } + +// GetNetworkServerNodeID - get network server node ID if exists +func GetNetworkServerNodeID(network string) (string, error) { + var nodes, err = GetNetworkNodes(network) + if err != nil { + return "", err + } + for _, node := range nodes { + if node.IsServer == "yes" { + if servercfg.GetNodeID() != "" { + if servercfg.GetNodeID() == node.MacAddress { + if strings.Contains(node.ID, "###") { + DeleteNodeByMacAddress(&node, true) + logger.Log(1, "deleted legacy server node on network "+node.Network) + return "", errors.New("deleted legacy server node on network " + node.Network) + } + return node.ID, nil + } + continue + } + return node.ID, nil + } + } + return "", errors.New("could not find server node") +} diff --git a/logic/server.go b/logic/server.go index 26512d0f..4dbe777e 100644 --- a/logic/server.go +++ b/logic/server.go @@ -31,19 +31,21 @@ func ServerJoin(networkSettings *models.Network, serverID string) error { if networkSettings == nil || networkSettings.NetID == "" { return errors.New("no network provided") } - + var privateKey = "" var err error + var node = &models.Node{ IsServer: "yes", DNSOn: "no", IsStatic: "yes", Name: models.NODE_SERVER_NAME, - MacAddress: serverID, - ID: serverID, + MacAddress: servercfg.GetNodeID(), + ID: "", // will be set to new uuid UDPHolePunch: "no", IsLocal: networkSettings.IsLocal, LocalRange: networkSettings.LocalRange, } + SetNodeDefaults(node) if servercfg.GetPlatform() == "Kubernetes" { diff --git a/logic/util.go b/logic/util.go index 173f1c89..fc383060 100644 --- a/logic/util.go +++ b/logic/util.go @@ -106,7 +106,9 @@ func CreateNode(node *models.Node) error { } // TODO: This covers legacy nodes, eventually want to remove legacy check - if (node.IsServer != "yes" && (node.ID == "" || strings.Contains(node.ID, "###"))) || (node.IsServer == "yes" && servercfg.GetNodeID() == "") { + if node.IsServer == "yes" { + node.ID = uuid.NewString() + } else if node.IsServer != "yes" || (node.ID == "" || strings.Contains(node.ID, "###")) { node.ID = uuid.NewString() } diff --git a/models/node.go b/models/node.go index 32808b5f..64a30de2 100644 --- a/models/node.go +++ b/models/node.go @@ -210,9 +210,8 @@ func (node *Node) SetDefaultName() { } func (newNode *Node) Fill(currentNode *Node) { - if newNode.ID == "" { - newNode.ID = currentNode.ID - } + newNode.ID = currentNode.ID + if newNode.Address == "" && newNode.IsStatic != "yes" { newNode.Address = currentNode.Address } diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index 837536c2..9db9a3e9 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -42,7 +42,7 @@ func FileExists(f string) bool { // RemoveNetwork - removes a network locally on server func RemoveNetwork(network string) (bool, error) { - err := logic.ServerLeave(servercfg.GetNodeID()) + err := logic.ServerLeave(network) return true, err } @@ -70,7 +70,12 @@ func HandleContainedClient() error { return err } for _, serverNet := range servernets { - err = logic.ServerCheckin(servercfg.GetNodeID(), servercfg.GetNodeID(), serverNet.NetID) + var serverID, err = logic.GetNetworkServerNodeID(serverNet.NetID) + if err != nil { + logger.Log(1, "error occurred during server checkin:", err.Error()) + continue + } + err = logic.ServerCheckin(serverID, servercfg.GetNodeID(), serverNet.NetID) if err != nil { logger.Log(1, "error occurred during server checkin:", err.Error()) } else {