Merge pull request #676 from gravitl/bugfix_v0.10.0_server_pull

added server pulls upon server initialize if networks present
This commit is contained in:
dcarns 2022-02-05 13:29:17 -05:00 committed by GitHub
commit 14c2e2c3f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 10 deletions

View file

@ -609,6 +609,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) {
if err := mq.NodeUpdate(node); err != nil {
logger.Log(1, "error publishing node update", err.Error())

View file

@ -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" {

View file

@ -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
}

View file

@ -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())

View file

@ -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
}