From 1a7a8beabc8aa773fc3f7c0d3e8a3b84336f3951 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Sat, 5 Feb 2022 13:12:07 -0500 Subject: [PATCH 1/3] added server pulls upon server initialize if networks present --- logic/server.go | 12 ++++++++---- serverctl/serverctl.go | 21 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/logic/server.go b/logic/server.go index 8880f9a1..e5d02a81 100644 --- a/logic/server.go +++ b/logic/server.go @@ -141,11 +141,11 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) { // ServerUpdate - updates the server // replaces legacy Checkin code func ServerUpdate(serverNode *models.Node, ifaceDelta bool) error { - var err = serverPull(serverNode, ifaceDelta) + var err = ServerPull(serverNode, ifaceDelta) if isDeleteError(err) { return DeleteNodeByID(serverNode, true) } else if err != nil && !ifaceDelta { - err = serverPull(serverNode, true) + err = ServerPull(serverNode, true) if err != nil { return err } @@ -369,7 +369,11 @@ func checkNodeActions(node *models.Node) string { // == Private == -func serverPull(serverNode *models.Node, ifaceDelta bool) error { +// ServerPull - performs a server pull +func ServerPull(serverNode *models.Node, ifaceDelta bool) error { + if serverNode.IsServer != "yes" { + return fmt.Errorf("attempted pull from non-server node: %s - %s", serverNode.Name, serverNode.ID) + } var err error if serverNode.IPForwarding == "yes" { @@ -400,7 +404,7 @@ func serverPull(serverNode *models.Node, ifaceDelta bool) error { } else { if err = setWGConfig(serverNode, true); err != nil { if errors.Is(err, os.ErrNotExist) { - return serverPull(serverNode, true) + return ServerPull(serverNode, true) } else { return err } diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index e1c4f7c4..3d5424ba 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -2,10 +2,12 @@ package serverctl import ( "errors" + "fmt" "net" "os" "strings" + "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/netclient/ncutils" @@ -14,15 +16,32 @@ import ( const NETMAKER_BINARY_NAME = "netmaker" // InitServerNetclient - intializes the server netclient +// 1. Check if config directory exists, if not attempt to make +// 2. Check current networks and run pull to get interface up to date in case of restart func InitServerNetclient() error { netclientDir := ncutils.GetNetclientPath() _, err := os.Stat(netclientDir + "/config") if os.IsNotExist(err) { - os.MkdirAll(netclientDir+"/config", 0744) + os.MkdirAll(netclientDir+"/config", 0700) } else if err != nil { logger.Log(1, "could not find or create", netclientDir) return err } + + var networks, netsErr = logic.GetNetworks() + if netsErr == nil || database.IsEmptyRecord(netsErr) { + for _, network := range networks { + var currentServerNode, nodeErr = logic.GetNetworkServerLocal(network.NetID) + if nodeErr == nil { + if err = logic.ServerPull(¤tServerNode, true); err != nil { + logger.Log(1, fmt.Sprintf("failed pull for network %s, on server node %s", + network.NetID, + currentServerNode.ID)) + } + } + } + } + return nil } From 3ea5e1b2d139312eaf0ae4ff06cd2137989e573b Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Sat, 5 Feb 2022 13:22:13 -0500 Subject: [PATCH 2/3] added check in run updates for mq --- controllers/node.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/controllers/node.go b/controllers/node.go index 65e60320..9d8e6a66 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -609,7 +609,8 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { func runUpdates(node *models.Node, nodeUpdate bool) error { //don't publish to server node - if nodeUpdate && !isServer(node) { + + if nodeUpdate && !isServer(node) && servercfg.IsMessageQueueBackend() { if err := mq.NodeUpdate(node); err != nil { logger.Log(1, "error publishing node update", err.Error()) return err From c22f35f57ff5cd8d973786a99e30b0b6b31fa58c Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Sat, 5 Feb 2022 13:26:12 -0500 Subject: [PATCH 3/3] added better check --- controllers/node.go | 2 +- controllers/server_util.go | 7 +++---- mq/mq.go | 4 +++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/controllers/node.go b/controllers/node.go index 9d8e6a66..5e673920 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -610,7 +610,7 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { func runUpdates(node *models.Node, nodeUpdate bool) error { //don't publish to server node - if nodeUpdate && !isServer(node) && servercfg.IsMessageQueueBackend() { + if nodeUpdate && !isServer(node) { if err := mq.NodeUpdate(node); err != nil { logger.Log(1, "error publishing node update", err.Error()) return err diff --git a/controllers/server_util.go b/controllers/server_util.go index d9ae9e58..fef90374 100644 --- a/controllers/server_util.go +++ b/controllers/server_util.go @@ -14,10 +14,9 @@ func runServerPeerUpdate(node *models.Node, ifaceDelta bool) error { if err != nil { logger.Log(3, "error occurred on timer,", err.Error()) } - if servercfg.IsMessageQueueBackend() { - if err := mq.PublishPeerUpdate(node); err != nil { - logger.Log(0, "failed to inform peers of new node ", err.Error()) - } + + if err := mq.PublishPeerUpdate(node); err != nil { + logger.Log(0, "failed to inform peers of new node ", err.Error()) } if servercfg.IsClientMode() != "on" { diff --git a/mq/mq.go b/mq/mq.go index e59466ea..4d1851ae 100644 --- a/mq/mq.go +++ b/mq/mq.go @@ -99,7 +99,9 @@ var UpdateNode mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) // PublishPeerUpdate --- deterines and publishes a peer update to all the peers of a node func PublishPeerUpdate(newNode *models.Node) error { - + if !servercfg.IsMessageQueueBackend() { + return nil + } networkNodes, err := logic.GetNetworkNodes(newNode.Network) if err != nil { logger.Log(1, "err getting Network Nodes", err.Error())