mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-23 00:36:40 +08:00
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:
commit
14c2e2c3f2
|
@ -609,6 +609,7 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
||||||
//don't publish to server node
|
//don't publish to server node
|
||||||
|
|
||||||
if nodeUpdate && !isServer(node) {
|
if nodeUpdate && !isServer(node) {
|
||||||
if err := mq.NodeUpdate(node); err != nil {
|
if err := mq.NodeUpdate(node); err != nil {
|
||||||
logger.Log(1, "error publishing node update", err.Error())
|
logger.Log(1, "error publishing node update", err.Error())
|
||||||
|
|
|
@ -14,10 +14,9 @@ func runServerPeerUpdate(node *models.Node, ifaceDelta bool) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(3, "error occurred on timer,", err.Error())
|
logger.Log(3, "error occurred on timer,", err.Error())
|
||||||
}
|
}
|
||||||
if servercfg.IsMessageQueueBackend() {
|
|
||||||
if err := mq.PublishPeerUpdate(node); err != nil {
|
if err := mq.PublishPeerUpdate(node); err != nil {
|
||||||
logger.Log(0, "failed to inform peers of new node ", err.Error())
|
logger.Log(0, "failed to inform peers of new node ", err.Error())
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if servercfg.IsClientMode() != "on" {
|
if servercfg.IsClientMode() != "on" {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
4
mq/mq.go
4
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
|
// PublishPeerUpdate --- deterines and publishes a peer update to all the peers of a node
|
||||||
func PublishPeerUpdate(newNode *models.Node) error {
|
func PublishPeerUpdate(newNode *models.Node) error {
|
||||||
|
if !servercfg.IsMessageQueueBackend() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
networkNodes, err := logic.GetNetworkNodes(newNode.Network)
|
networkNodes, err := logic.GetNetworkNodes(newNode.Network)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(1, "err getting Network Nodes", err.Error())
|
logger.Log(1, "err getting Network Nodes", err.Error())
|
||||||
|
|
|
@ -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(¤tServerNode, 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue