Browse Source

set relayed nodes UDP to off and update them

afeiszli 3 years ago
parent
commit
83c4f99192
3 changed files with 33 additions and 0 deletions
  1. 8 0
      controllers/relay.go
  2. 16 0
      logic/nodes.go
  3. 9 0
      logic/relay.go

+ 8 - 0
controllers/relay.go

@@ -8,6 +8,7 @@ import (
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/mq"
 )
 )
 
 
 func createRelay(w http.ResponseWriter, r *http.Request) {
 func createRelay(w http.ResponseWriter, r *http.Request) {
@@ -27,6 +28,13 @@ func createRelay(w http.ResponseWriter, r *http.Request) {
 		return
 		return
 	}
 	}
 	logger.Log(1, r.Header.Get("user"), "created relay on node", relay.NodeID, "on network", relay.NetID)
 	logger.Log(1, r.Header.Get("user"), "created relay on node", relay.NodeID, "on network", relay.NetID)
+	relayedNodes, err := logic.GetNodesByAddress(relay.NetID, relay.RelayAddrs)
+	for _, node := range relayedNodes {
+		err = mq.NodeUpdate(&node)
+		if err != nil {
+			logger.Log(1, "error sending update to relayed node ", node.Address, "on network", relay.NetID, ": ", err.Error())
+		}
+	}
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)
 	runUpdates(&node, true)
 	runUpdates(&node, true)

+ 16 - 0
logic/nodes.go

@@ -12,6 +12,7 @@ import (
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/servercfg"
 	"github.com/gravitl/netmaker/servercfg"
 	"github.com/gravitl/netmaker/validation"
 	"github.com/gravitl/netmaker/validation"
 	"golang.org/x/crypto/bcrypt"
 	"golang.org/x/crypto/bcrypt"
@@ -429,6 +430,21 @@ func GetNodeByMacAddress(network string, macaddress string) (models.Node, error)
 	return node, nil
 	return node, nil
 }
 }
 
 
+// GetNodesByAddress - gets a node by mac address
+func GetNodesByAddress(network string, addresses []string) ([]models.Node, error) {
+	var nodes []models.Node
+	allnodes, err := GetAllNodes()
+	if err != nil {
+		return []models.Node{}, err
+	}
+	for _, node := range allnodes {
+		if node.Network == network && ncutils.StringSliceContains(addresses, node.Address) {
+			nodes = append(nodes, node)
+		}
+	}
+	return nodes, nil
+}
+
 // GetDeletedNodeByMacAddress - get a deleted node
 // GetDeletedNodeByMacAddress - get a deleted node
 func GetDeletedNodeByMacAddress(network string, macaddress string) (models.Node, error) {
 func GetDeletedNodeByMacAddress(network string, macaddress string) (models.Node, error) {
 
 

+ 9 - 0
logic/relay.go

@@ -51,6 +51,10 @@ func SetRelayedNodes(yesOrno string, networkName string, addrs []string) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	network, err := GetNetworkSettings(networkName)
+	if err != nil {
+		return err
+	}
 
 
 	for _, value := range collections {
 	for _, value := range collections {
 
 
@@ -63,6 +67,11 @@ func SetRelayedNodes(yesOrno string, networkName string, addrs []string) error {
 			for _, addr := range addrs {
 			for _, addr := range addrs {
 				if addr == node.Address || addr == node.Address6 {
 				if addr == node.Address || addr == node.Address6 {
 					node.IsRelayed = yesOrno
 					node.IsRelayed = yesOrno
+					if yesOrno == "yes" {
+						node.UDPHolePunch = "no"
+					} else {
+						node.UDPHolePunch = network.DefaultUDPHolePunch
+					}
 					data, err := json.Marshal(&node)
 					data, err := json.Marshal(&node)
 					if err != nil {
 					if err != nil {
 						return err
 						return err