mirror of
https://github.com/gravitl/netmaker.git
synced 2025-02-25 08:34:47 +08:00
fixing relay model
This commit is contained in:
parent
bfcc9c4c8a
commit
74b15a6a13
6 changed files with 52 additions and 65 deletions
|
@ -14,12 +14,12 @@ import (
|
|||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func GetPeersList(networkName string, excludeDoNotPropagate bool, relayedNodeAddr string) ([]models.Node, error) {
|
||||
func GetPeersList(networkName string, excludeRelayed bool, relayedNodeAddr string) ([]models.Node, error) {
|
||||
var peers []models.Node
|
||||
var relayNode models.Node
|
||||
var err error
|
||||
if relayedNodeAddr == "" {
|
||||
peers, err = GetNodePeers(networkName, excludeDoNotPropagate)
|
||||
peers, err = GetNodePeers(networkName, excludeRelayed)
|
||||
|
||||
} else {
|
||||
relayNode, err = GetNodeRelay(networkName, relayedNodeAddr)
|
||||
|
@ -37,7 +37,7 @@ func GetPeersList(networkName string, excludeDoNotPropagate bool, relayedNodeAdd
|
|||
return peers, err
|
||||
}
|
||||
|
||||
func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node, error) {
|
||||
func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error) {
|
||||
var peers []models.Node
|
||||
collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
|
||||
if err != nil {
|
||||
|
@ -63,7 +63,7 @@ func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node
|
|||
peer.EgressGatewayRanges = node.EgressGatewayRanges
|
||||
peer.IsEgressGateway = node.IsEgressGateway
|
||||
}
|
||||
allow := node.DoNotPropagate != "yes" || !excludeDoNotPropagate
|
||||
allow := node.IsRelayed != "yes" || !excludeRelayed
|
||||
|
||||
if node.Network == networkName && node.IsPending != "yes" && allow {
|
||||
peer = setPeerInfo(node)
|
||||
|
@ -93,13 +93,11 @@ func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node
|
|||
return peers, err
|
||||
}
|
||||
|
||||
|
||||
|
||||
func setPeerInfo(node models.Node) models.Node {
|
||||
var peer models.Node
|
||||
peer.RelayAddrs = node.RelayAddrs
|
||||
peer.IsRelay = node.IsRelay
|
||||
peer.DoNotPropagate = node.DoNotPropagate
|
||||
peer.IsRelayed = node.IsRelayed
|
||||
peer.PublicKey = node.PublicKey
|
||||
peer.Endpoint = node.Endpoint
|
||||
peer.LocalAddress = node.LocalAddress
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/gravitl/netmaker/functions"
|
||||
nodepb "github.com/gravitl/netmaker/grpc"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
|
@ -97,24 +98,10 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
relayupdate := false
|
||||
if node.IsRelay == "yes" && len(newnode.RelayAddrs) > 0 {
|
||||
for i, addr := range newnode.RelayAddrs {
|
||||
if addr != node.RelayAddrs[i] {
|
||||
relayupdate = true
|
||||
}
|
||||
}
|
||||
}
|
||||
err = node.Update(&newnode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if relayupdate {
|
||||
UpdateRelay(node.Network, node.RelayAddrs, newnode.RelayAddrs)
|
||||
if err = functions.NetworkNodesUpdatePullChanges(node.Network); err != nil {
|
||||
functions.PrintUserLog("netmaker", "error setting relay updates: " + err.Error(), 1)
|
||||
}
|
||||
}
|
||||
nodeData, err := json.Marshal(&newnode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -150,12 +137,12 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
|
|||
if node.IsServer == "yes" {
|
||||
SetNetworkServerPeers(macAndNetwork[1])
|
||||
}
|
||||
excludeDoNotPropagate := node.IsRelay != "yes"
|
||||
excludeIsRelayed := node.IsRelay != "yes"
|
||||
var relayedNode string
|
||||
if node.DoNotPropagate == "yes" {
|
||||
if node.IsRelayed == "yes" {
|
||||
relayedNode = node.Address
|
||||
}
|
||||
peers, err := GetPeersList(macAndNetwork[1], excludeDoNotPropagate, relayedNode)
|
||||
peers, err := GetPeersList(macAndNetwork[1], excludeIsRelayed, relayedNode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/functions"
|
||||
|
@ -45,7 +46,7 @@ func CreateRelay(relay models.RelayRequest) (models.Node, error) {
|
|||
return models.Node{}, err
|
||||
}
|
||||
node.IsRelay = "yes"
|
||||
node.RelayAddrs = relay.Addrs
|
||||
node.RelayAddrs = relay.RelayAddrs
|
||||
|
||||
key, err := functions.GetRecordKey(relay.NodeID, relay.NetID)
|
||||
if err != nil {
|
||||
|
@ -60,7 +61,7 @@ func CreateRelay(relay models.RelayRequest) (models.Node, error) {
|
|||
if err = database.Insert(key, string(nodeData), database.NODES_TABLE_NAME); err != nil {
|
||||
return models.Node{}, err
|
||||
}
|
||||
err = SetNodesDoNotPropagate("yes", node.Network, node.RelayAddrs)
|
||||
err = SetRelayedNodes("yes", node.Network, node.RelayAddrs)
|
||||
if err != nil {
|
||||
return node, err
|
||||
}
|
||||
|
@ -71,7 +72,7 @@ func CreateRelay(relay models.RelayRequest) (models.Node, error) {
|
|||
return node, nil
|
||||
}
|
||||
|
||||
func SetNodesDoNotPropagate(yesOrno string, networkName string, addrs []string) error {
|
||||
func SetRelayedNodes(yesOrno string, networkName string, addrs []string) error {
|
||||
|
||||
collections, err := database.FetchRecords(database.NODES_TABLE_NAME)
|
||||
if err != nil {
|
||||
|
@ -88,7 +89,7 @@ func SetNodesDoNotPropagate(yesOrno string, networkName string, addrs []string)
|
|||
if node.Network == networkName {
|
||||
for _, addr := range addrs {
|
||||
if addr == node.Address || addr == node.Address6 {
|
||||
node.DoNotPropagate = yesOrno
|
||||
node.IsRelayed = yesOrno
|
||||
data, err := json.Marshal(&node)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -105,7 +106,7 @@ func SetNodesDoNotPropagate(yesOrno string, networkName string, addrs []string)
|
|||
func ValidateRelay(relay models.RelayRequest) error {
|
||||
var err error
|
||||
//isIp := functions.IsIpCIDR(gateway.RangeString)
|
||||
empty := len(relay.Addrs) == 0
|
||||
empty := len(relay.RelayAddrs) == 0
|
||||
if empty {
|
||||
err = errors.New("IP Ranges Cannot Be Empty")
|
||||
}
|
||||
|
@ -114,14 +115,15 @@ func ValidateRelay(relay models.RelayRequest) error {
|
|||
|
||||
func UpdateRelay(network string, oldAddrs []string, newAddrs []string) {
|
||||
time.Sleep(time.Second / 4)
|
||||
err := SetNodesDoNotPropagate("no", network, oldAddrs)
|
||||
err := SetRelayedNodes("no", network, oldAddrs)
|
||||
if err != nil {
|
||||
functions.PrintUserLog("netmaker", err.Error(), 1)
|
||||
}
|
||||
err = SetNodesDoNotPropagate("yes", network, newAddrs)
|
||||
err = SetRelayedNodes("yes", network, newAddrs)
|
||||
if err != nil {
|
||||
functions.PrintUserLog("netmaker", err.Error(), 1)
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
||||
func deleteRelay(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
@ -144,7 +146,7 @@ func DeleteRelay(network, macaddress string) (models.Node, error) {
|
|||
if err != nil {
|
||||
return models.Node{}, err
|
||||
}
|
||||
err = SetNodesDoNotPropagate("no", node.Network, node.RelayAddrs)
|
||||
err = SetRelayedNodes("no", node.Network, node.RelayAddrs)
|
||||
if err != nil {
|
||||
return node, err
|
||||
}
|
||||
|
|
|
@ -52,9 +52,9 @@ type Node struct {
|
|||
CheckInInterval int32 `json:"checkininterval" bson:"checkininterval" yaml:"checkininterval"`
|
||||
Password string `json:"password" bson:"password" yaml:"password" validate:"required,min=6"`
|
||||
Network string `json:"network" bson:"network" yaml:"network" validate:"network_exists"`
|
||||
DoNotPropagate string `json:"donotpropagate" bson:"donotpropagate" yaml:"donotpropagate"`
|
||||
IsRelayed string `json:"isrelayed" bson:"isrelayed" yaml:"isrelayed"`
|
||||
IsPending string `json:"ispending" bson:"ispending" yaml:"ispending"`
|
||||
IsRelay string `json:"isrelay" bson:"isrelay" yaml:"isrelay"`
|
||||
IsRelay string `json:"isrelay" bson:"isrelay" yaml:"isrelay" validate:"checkyesorno"`
|
||||
IsEgressGateway string `json:"isegressgateway" bson:"isegressgateway" yaml:"isegressgateway"`
|
||||
IsIngressGateway string `json:"isingressgateway" bson:"isingressgateway" yaml:"isingressgateway"`
|
||||
EgressGatewayRanges []string `json:"egressgatewayranges" bson:"egressgatewayranges" yaml:"egressgatewayranges"`
|
||||
|
@ -87,9 +87,9 @@ func (node *Node) SetDefaulIsPending() {
|
|||
}
|
||||
}
|
||||
|
||||
func (node *Node) SetDefaultDoNotPropagate() {
|
||||
if node.DoNotPropagate == "" {
|
||||
node.DoNotPropagate = "no"
|
||||
func (node *Node) SetDefaultIsRelayed() {
|
||||
if node.IsRelayed == "" {
|
||||
node.IsRelayed = "no"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -284,7 +284,7 @@ func (node *Node) SetDefaults() {
|
|||
node.SetDefaultIngressGateway()
|
||||
node.SetDefaulIsPending()
|
||||
node.SetDefaultMTU()
|
||||
node.SetDefaultDoNotPropagate()
|
||||
node.SetDefaultIsRelayed()
|
||||
node.SetDefaultIsRelay()
|
||||
node.KeyUpdateTimeStamp = time.Now().Unix()
|
||||
}
|
||||
|
@ -430,8 +430,8 @@ func (newNode *Node) Fill(currentNode *Node) {
|
|||
if newNode.IsRelay == "" {
|
||||
newNode.IsRelay = currentNode.IsRelay
|
||||
}
|
||||
if newNode.DoNotPropagate == "" {
|
||||
newNode.DoNotPropagate = currentNode.DoNotPropagate
|
||||
if newNode.IsRelayed == "" {
|
||||
newNode.IsRelayed = currentNode.IsRelayed
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -132,5 +132,5 @@ type EgressGatewayRequest struct {
|
|||
type RelayRequest struct {
|
||||
NodeID string `json:"nodeid" bson:"nodeid"`
|
||||
NetID string `json:"netid" bson:"netid"`
|
||||
Addrs []string `json:"addrs" bson:"addrs"`
|
||||
RelayAddrs []string `json:"addrs" bson:"addrs"`
|
||||
}
|
Loading…
Reference in a new issue