Browse Source

added server pulls upon server initialize if networks present

0xdcarns 3 years ago
parent
commit
1a7a8beabc
2 changed files with 28 additions and 5 deletions
  1. 8 4
      logic/server.go
  2. 20 1
      serverctl/serverctl.go

+ 8 - 4
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
 			}

+ 20 - 1
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(&currentServerNode, true); err != nil {
+					logger.Log(1, fmt.Sprintf("failed pull for network %s, on server node %s",
+						network.NetID,
+						currentServerNode.ID))
+				}
+			}
+		}
+	}
+
 	return nil
 }