added server pulls upon server initialize if networks present

This commit is contained in:
0xdcarns
2022-02-05 13:12:07 -05:00
parent 4815c4da13
commit 1a7a8beabc
2 changed files with 28 additions and 5 deletions

View File

@@ -141,11 +141,11 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
// ServerUpdate - updates the server // ServerUpdate - updates the server
// replaces legacy Checkin code // replaces legacy Checkin code
func ServerUpdate(serverNode *models.Node, ifaceDelta bool) error { func ServerUpdate(serverNode *models.Node, ifaceDelta bool) error {
var err = serverPull(serverNode, ifaceDelta) var err = ServerPull(serverNode, ifaceDelta)
if isDeleteError(err) { if isDeleteError(err) {
return DeleteNodeByID(serverNode, true) return DeleteNodeByID(serverNode, true)
} else if err != nil && !ifaceDelta { } else if err != nil && !ifaceDelta {
err = serverPull(serverNode, true) err = ServerPull(serverNode, true)
if err != nil { if err != nil {
return err return err
} }
@@ -369,7 +369,11 @@ func checkNodeActions(node *models.Node) string {
// == Private == // == 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 var err error
if serverNode.IPForwarding == "yes" { if serverNode.IPForwarding == "yes" {
@@ -400,7 +404,7 @@ func serverPull(serverNode *models.Node, ifaceDelta bool) error {
} else { } else {
if err = setWGConfig(serverNode, true); err != nil { if err = setWGConfig(serverNode, true); err != nil {
if errors.Is(err, os.ErrNotExist) { if errors.Is(err, os.ErrNotExist) {
return serverPull(serverNode, true) return ServerPull(serverNode, true)
} else { } else {
return err return err
} }

View File

@@ -2,10 +2,12 @@ package serverctl
import ( import (
"errors" "errors"
"fmt"
"net" "net"
"os" "os"
"strings" "strings"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/ncutils"
@@ -14,15 +16,32 @@ import (
const NETMAKER_BINARY_NAME = "netmaker" const NETMAKER_BINARY_NAME = "netmaker"
// InitServerNetclient - intializes the server netclient // 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 { func InitServerNetclient() error {
netclientDir := ncutils.GetNetclientPath() netclientDir := ncutils.GetNetclientPath()
_, err := os.Stat(netclientDir + "/config") _, err := os.Stat(netclientDir + "/config")
if os.IsNotExist(err) { if os.IsNotExist(err) {
os.MkdirAll(netclientDir+"/config", 0744) os.MkdirAll(netclientDir+"/config", 0700)
} else if err != nil { } else if err != nil {
logger.Log(1, "could not find or create", netclientDir) logger.Log(1, "could not find or create", netclientDir)
return err 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 return nil
} }