hub and spoke logic

This commit is contained in:
afeiszli
2022-02-21 08:27:31 -05:00
parent c6612f9600
commit f521e5380f
2 changed files with 45 additions and 2 deletions

View File

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

View File

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