fix publish peers

This commit is contained in:
Matthew R Kasun
2022-01-18 22:32:12 +00:00
parent 2f0f0f9c4d
commit e7b9715cf7
2 changed files with 54 additions and 5 deletions

View File

@@ -10,6 +10,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"
"github.com/gravitl/netmaker/servercfg" "github.com/gravitl/netmaker/servercfg"
) )
@@ -85,6 +86,10 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// notify other nodes on network of new peer
if err := mq.NewPeer(node); err != nil {
logger.Log(0, "failed to inform peers of new node "+err.Error())
}
return response, nil return response, nil
} }

View File

@@ -4,7 +4,9 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"net"
"sort" "sort"
"strconv"
"strings" "strings"
"time" "time"
@@ -14,6 +16,7 @@ import (
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg" "github.com/gravitl/netmaker/servercfg"
"github.com/gravitl/netmaker/validation" "github.com/gravitl/netmaker/validation"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
) )
// GetNetworkNodes - gets the nodes of a network // GetNetworkNodes - gets the nodes of a network
@@ -74,7 +77,7 @@ func UncordonNode(nodeid string) (models.Node, error) {
node.SetLastModified() node.SetLastModified()
node.IsPending = "no" node.IsPending = "no"
node.PullChanges = "yes" node.PullChanges = "yes"
data, err := json.Marshal(&node) data, err := json.Marshal(&node)
if err != nil { if err != nil {
return node, err return node, err
} }
@@ -83,11 +86,52 @@ func UncordonNode(nodeid string) (models.Node, error) {
return node, err return node, err
} }
// GetPeers - gets the peers of a given node // GetWGNodePeers - gets the wg peers of a given node
func GetPeers(node *models.Node) ([]models.Node, error) { func GetWGNodePeers(node *models.Node) ([]wgtypes.PeerConfig, error){
if IsLeader(node) { var peers []wgtypes.PeerConfig
SetNetworkServerPeers(node) var peerData wgtypes.PeerConfig
nodes, err := GetPeers(node)
if err != nil {
return peers, err
} }
logger.Log(0, "the peers of " + node.Name + " are:")
for _, peer := range nodes {
logger.Log(0, "peer: " + peer.Name)
}
for _, peer := range nodes {
//this should not happen but it does
if peer.Name == node.Name {
logger.Log(0, "GetPeers returned me " + node.Name)
continue
}
pubkey, err :=wgtypes.ParseKey(peer.PublicKey)
if err != nil {
logger.Log(0, "ParseKey failed " +err.Error())
continue
}
endpoint := peer.Endpoint + ":" + strconv.Itoa(int(peer.ListenPort))
address, err := net.ResolveUDPAddr("udp", endpoint)
if err != nil {
logger.Log(0, "could not resolve endpoint " + err.Error())
continue
}
///Persitent Keepalive
//Allowed IPs
peerData = wgtypes.PeerConfig{
PublicKey: pubkey,
Endpoint: address,
}
peers = append (peers, peerData)
}
return peers, nil
}
// GetPeers - gets a list of nodes that are peers of a given node
func GetPeers(node *models.Node) ([]models.Node, error) {
//if IsLeader(node) {
// logger.Log(0, node.Name + " is a leader")
// SetNetworkServerPeers(node)
//}
excludeIsRelayed := node.IsRelay != "yes" excludeIsRelayed := node.IsRelay != "yes"
var relayedNode string var relayedNode string
if node.IsRelayed == "yes" { if node.IsRelayed == "yes" {