Browse Source

Cover a legacy case, allow server to run with uuids

0xdcarns 3 years ago
parent
commit
2fe8025afa
5 changed files with 44 additions and 9 deletions
  1. 27 0
      logic/nodes.go
  2. 5 3
      logic/server.go
  3. 3 1
      logic/util.go
  4. 2 3
      models/node.go
  5. 7 2
      serverctl/serverctl.go

+ 27 - 0
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")
+}

+ 5 - 3
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" {

+ 3 - 1
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()
 	}
 

+ 2 - 3
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
 	}

+ 7 - 2
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 {