Browse Source

Merge pull request #812 from gravitl/feature_v0.11.0_hubspoke

hub and spoke logic
dcarns 3 years ago
parent
commit
49b29a6615
2 changed files with 45 additions and 2 deletions
  1. 29 0
      logic/nodes.go
  2. 16 2
      logic/server.go

+ 29 - 0
logic/nodes.go

@@ -139,6 +139,13 @@ func IsLeader(node *models.Node) bool {
 
 // UpdateNode - takes a node and updates another node with it's values
 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 network, err := GetParentNetwork(newNode.Network); err == nil {
 			if !IsAddressInCIDR(newNode.Address, network.AddressRange) {
@@ -605,3 +612,25 @@ func isMacAddressUnique(macaddress string, networkName string) (bool, error) {
 
 	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
+}

+ 16 - 2
logic/server.go

@@ -40,8 +40,22 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
 		serverCount = len(currentServers) + 1
 	}
 	var ishub = "no"
-	if serverCount == 1 && (networkSettings.IsHubAndSpoke == "yes" || networkSettings.IsComms == "yes") {
-		ishub = "yes"
+
+	if networkSettings.IsHubAndSpoke == "yes" || networkSettings.IsComms == "yes" {
+		nodes, err := GetNetworkNodes(networkSettings.NetID)
+		if err != nil || nodes == nil {
+			ishub = "yes"
+		} else {
+			sethub := true
+			for i := range nodes {
+				if nodes[i].IsHub == "yes" {
+					sethub = false
+				}
+			}
+			if sethub {
+				ishub = "yes"
+			}
+		}
 	}
 	var node = &models.Node{
 		IsServer:     "yes",