fixing relay model

This commit is contained in:
afeiszli 2021-09-18 10:33:14 -04:00
parent bfcc9c4c8a
commit 74b15a6a13
6 changed files with 52 additions and 65 deletions

View file

@ -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

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}
}

View file

@ -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"`
}