Browse Source

moved telemetry check and generated comms CIDR better

0xdcarns 3 years ago
parent
commit
324d2ba70c
4 changed files with 46 additions and 7 deletions
  1. 0 4
      controllers/node.go
  2. 6 0
      mq/publishers.go
  3. 39 2
      servercfg/serverconf.go
  4. 1 1
      serverctl/serverctl.go

+ 0 - 4
controllers/node.go

@@ -625,10 +625,6 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 
 
 func runUpdates(node *models.Node, ifaceDelta bool) {
 func runUpdates(node *models.Node, ifaceDelta bool) {
 	go func() { // don't block http response
 	go func() { // don't block http response
-		err := logic.TimerCheckpoint()
-		if err != nil {
-			logger.Log(3, "error occurred on timer,", err.Error())
-		}
 		// publish node update if not server
 		// publish node update if not server
 		if err := mq.NodeUpdate(node); err != nil {
 		if err := mq.NodeUpdate(node); err != nil {
 			logger.Log(1, "error publishing node update to node", node.Name, node.ID, err.Error())
 			logger.Log(1, "error publishing node update to node", node.Name, node.ID, err.Error())

+ 6 - 0
mq/publishers.go

@@ -91,16 +91,22 @@ func NodeUpdate(node *models.Node) error {
 
 
 // sendPeers - retrieve networks, send peer ports to all peers
 // sendPeers - retrieve networks, send peer ports to all peers
 func sendPeers() {
 func sendPeers() {
+
 	var force bool
 	var force bool
 	peer_force_send++
 	peer_force_send++
 	if peer_force_send == 5 {
 	if peer_force_send == 5 {
 		force = true
 		force = true
 		peer_force_send = 0
 		peer_force_send = 0
+		err := logic.TimerCheckpoint() // run telemetry & log dumps if 24 hours has passed..
+		if err != nil {
+			logger.Log(3, "error occurred on timer,", err.Error())
+		}
 	}
 	}
 	networks, err := logic.GetNetworks()
 	networks, err := logic.GetNetworks()
 	if err != nil {
 	if err != nil {
 		logger.Log(1, "error retrieving networks for keepalive", err.Error())
 		logger.Log(1, "error retrieving networks for keepalive", err.Error())
 	}
 	}
+
 	for _, network := range networks {
 	for _, network := range networks {
 		serverNode, errN := logic.GetNetworkServerLeader(network.NetID)
 		serverNode, errN := logic.GetNetworkServerLeader(network.NetID)
 		if errN == nil {
 		if errN == nil {

+ 39 - 2
servercfg/serverconf.go

@@ -2,14 +2,18 @@ package servercfg
 
 
 import (
 import (
 	"errors"
 	"errors"
+	"fmt"
 	"io"
 	"io"
+	"math/rand"
 	"net"
 	"net"
 	"net/http"
 	"net/http"
 	"os"
 	"os"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
+	"time"
 
 
 	"github.com/gravitl/netmaker/config"
 	"github.com/gravitl/netmaker/config"
+	"github.com/gravitl/netmaker/logger"
 )
 )
 
 
 var (
 var (
@@ -258,17 +262,19 @@ func GetMQPort() string {
 
 
 // GetGRPCPort - gets the grpc port
 // GetGRPCPort - gets the grpc port
 func GetCommsCIDR() string {
 func GetCommsCIDR() string {
-	netrange := "172.242.0.0/16"
+	netrange := "172.16.0.0/16"
 	if os.Getenv("COMMS_CIDR") != "" {
 	if os.Getenv("COMMS_CIDR") != "" {
 		netrange = os.Getenv("COMMS_CIDR")
 		netrange = os.Getenv("COMMS_CIDR")
 	} else if config.Config.Server.CommsCIDR != "" {
 	} else if config.Config.Server.CommsCIDR != "" {
 		netrange = config.Config.Server.CommsCIDR
 		netrange = config.Config.Server.CommsCIDR
+	} else { // make a random one, which should only affect initialize first time, unless db is removed
+		netrange = genNewCommsCIDR()
 	}
 	}
 	_, _, err := net.ParseCIDR(netrange)
 	_, _, err := net.ParseCIDR(netrange)
 	if err == nil {
 	if err == nil {
 		return netrange
 		return netrange
 	}
 	}
-	return "172.242.0.0/16"
+	return "172.16.0.0/16"
 }
 }
 
 
 // GetCommsID - gets the grpc port
 // GetCommsID - gets the grpc port
@@ -614,3 +620,34 @@ func GetRce() bool {
 func GetDebug() bool {
 func GetDebug() bool {
 	return os.Getenv("DEBUG") == "on" || config.Config.Server.Debug == true
 	return os.Getenv("DEBUG") == "on" || config.Config.Server.Debug == true
 }
 }
+
+func genNewCommsCIDR() string {
+	currIfaces, err := net.Interfaces()
+	netrange := fmt.Sprintf("172.%d.0.0/16", genCommsByte())
+	if err == nil { // make sure chosen CIDR doesn't overlap with any local iface CIDRs
+		iter := 0
+		for i := 0; i < len(currIfaces); i++ {
+			if currentAddrs, err := currIfaces[i].Addrs(); err == nil {
+				for j := range currentAddrs {
+					if strings.Contains(currentAddrs[j].String(), netrange[0:7]) {
+						if iter > 20 { // if this hits, then the cidr should be specified
+							logger.FatalLog("could not find a suitable comms network on this server, please manually enter one")
+						}
+						netrange = fmt.Sprintf("172.%d.0.0/16", genCommsByte())
+						i = -1 // reset to loop back through
+						iter++ // track how many times you've iterated and not found one
+						break
+					}
+				}
+			}
+		}
+	}
+	return netrange
+}
+
+func genCommsByte() int {
+	const min = 1 << 4 // 16
+	const max = 1 << 5 // 32
+	rand.Seed(time.Now().UnixNano())
+	return rand.Intn(max-min) + min
+}

+ 1 - 1
serverctl/serverctl.go

@@ -29,13 +29,13 @@ func InitializeCommsNetwork() error {
 
 
 	_, err := logic.GetNetwork(COMMS_NETID)
 	_, err := logic.GetNetwork(COMMS_NETID)
 	if err != nil {
 	if err != nil {
-		logger.Log(1, "comms net does not exist, creating")
 		var network models.Network
 		var network models.Network
 		network.NetID = COMMS_NETID
 		network.NetID = COMMS_NETID
 		network.AddressRange = servercfg.GetCommsCIDR()
 		network.AddressRange = servercfg.GetCommsCIDR()
 		network.IsPointToSite = "yes"
 		network.IsPointToSite = "yes"
 		network.DefaultUDPHolePunch = "yes"
 		network.DefaultUDPHolePunch = "yes"
 		network.IsComms = "yes"
 		network.IsComms = "yes"
+		logger.Log(1, "comms net does not exist, creating with ID,", network.NetID, "and CIDR,", network.AddressRange)
 		return logic.CreateNetwork(network)
 		return logic.CreateNetwork(network)
 	}
 	}
 	SyncServerNetwork(COMMS_NETID)
 	SyncServerNetwork(COMMS_NETID)