mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
hub and spoke logic
This commit is contained in:
@@ -139,6 +139,13 @@ func IsLeader(node *models.Node) bool {
|
|||||||
|
|
||||||
// UpdateNode - takes a node and updates another node with it's values
|
// UpdateNode - takes a node and updates another node with it's values
|
||||||
func UpdateNode(currentNode *models.Node, newNode *models.Node) error {
|
func UpdateNode(currentNode *models.Node, newNode *models.Node) error {
|
||||||
|
var err error
|
||||||
|
if newNode.IsHub == "yes" && currentNode.IsHub != "yes" {
|
||||||
|
if err = unsetHub(newNode.Network); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if newNode.Address != currentNode.Address {
|
if newNode.Address != currentNode.Address {
|
||||||
if network, err := GetParentNetwork(newNode.Network); err == nil {
|
if network, err := GetParentNetwork(newNode.Network); err == nil {
|
||||||
if !IsAddressInCIDR(newNode.Address, network.AddressRange) {
|
if !IsAddressInCIDR(newNode.Address, network.AddressRange) {
|
||||||
@@ -605,3 +612,25 @@ func isMacAddressUnique(macaddress string, networkName string) (bool, error) {
|
|||||||
|
|
||||||
return isunique, nil
|
return isunique, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unsetHub - unset hub on network nodes
|
||||||
|
func unsetHub(networkName string) error {
|
||||||
|
|
||||||
|
nodes, err := GetNetworkNodes(networkName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range nodes {
|
||||||
|
if nodes[i].IsHub == "yes" {
|
||||||
|
nodes[i].IsHub = "no"
|
||||||
|
newNodeData, err := json.Marshal(&nodes[i])
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(1, "error on node during hub update")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
database.Insert(nodes[i].ID, string(newNodeData), database.NODES_TABLE_NAME)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@@ -40,8 +40,22 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
|
|||||||
serverCount = len(currentServers) + 1
|
serverCount = len(currentServers) + 1
|
||||||
}
|
}
|
||||||
var ishub = "no"
|
var ishub = "no"
|
||||||
if serverCount == 1 && (networkSettings.IsHubAndSpoke == "yes" || networkSettings.IsComms == "yes") {
|
|
||||||
|
if networkSettings.IsHubAndSpoke == "yes" || networkSettings.IsComms == "yes" {
|
||||||
|
nodes, err := GetNetworkNodes(networkSettings.NetID)
|
||||||
|
if err != nil || nodes == nil {
|
||||||
ishub = "yes"
|
ishub = "yes"
|
||||||
|
} else {
|
||||||
|
sethub := true
|
||||||
|
for i := range nodes {
|
||||||
|
if nodes[i].IsHub == "yes" {
|
||||||
|
sethub = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if sethub {
|
||||||
|
ishub = "yes"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var node = &models.Node{
|
var node = &models.Node{
|
||||||
IsServer: "yes",
|
IsServer: "yes",
|
||||||
|
Reference in New Issue
Block a user