NET-725: Failovers (#2685)

* api to  to get host relayed from client

* add auto relay to api host

* add peer nat type

* set pro field on signal

* rm net check on relay me handler

* return success response

* re-establish failover logic

* set failOver ctx

* failOver with peer pub key

* failovered peer updates

* failover handlers, reset failovered peer on deletion

* rm unused funcs

* initialize failover handler on EE

* ignore failover node on signal

* failover changes

* set host id on signal

* extend signal model to include node ids

* add backwards compatibility

* add failover as node api

* set json response on failover handers

* add failover field to api node

* fix signal data check

* initialize failover peer map

* reset failovered status when relayed or deleted

* add failover info to api node

* reset network failover

* only proceed furtuer if failover exists in the network

* set failOver node defaults

* cannot set failover node as relayed

* debug log

* debug log

* debug changes

* debug changes

* debug changes

* revert debug changes

* don't add peers to idmap when removed

* reset failed Over

* fix static checks

* rm debug log

* add check for linux host
This commit is contained in:
Abhishek K
2023-11-29 20:10:07 +04:00
committed by GitHub
parent 5efa52279d
commit b78cc0a8a1
24 changed files with 434 additions and 262 deletions

View File

@@ -8,7 +8,6 @@ import (
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
)
// GetInternetGateways - gets all the nodes that are internet gateways
@@ -168,9 +167,6 @@ func CreateIngressGateway(netid string, nodeid string, ingress models.IngressReq
node.IngressGatewayRange6 = network.AddressRange6
node.IngressDNS = ingress.ExtclientDNS
node.SetLastModified()
if ingress.Failover && servercfg.IsPro {
node.Failover = true
}
err = UpsertNode(&node)
if err != nil {
return models.Node{}, err
@@ -199,35 +195,33 @@ func GetIngressGwUsers(node models.Node) (models.IngressGwUsers, error) {
}
// DeleteIngressGateway - deletes an ingress gateway
func DeleteIngressGateway(nodeid string) (models.Node, bool, []models.ExtClient, error) {
func DeleteIngressGateway(nodeid string) (models.Node, []models.ExtClient, error) {
removedClients := []models.ExtClient{}
node, err := GetNodeByID(nodeid)
if err != nil {
return models.Node{}, false, removedClients, err
return models.Node{}, removedClients, err
}
clients, err := GetExtClientsByID(nodeid, node.Network)
if err != nil && !database.IsEmptyRecord(err) {
return models.Node{}, false, removedClients, err
return models.Node{}, removedClients, err
}
removedClients = clients
// delete ext clients belonging to ingress gateway
if err = DeleteGatewayExtClients(node.ID.String(), node.Network); err != nil {
return models.Node{}, false, removedClients, err
return models.Node{}, removedClients, err
}
logger.Log(3, "deleting ingress gateway")
wasFailover := node.Failover
node.LastModified = time.Now()
node.IsIngressGateway = false
node.IngressGatewayRange = ""
node.Failover = false
err = UpsertNode(&node)
if err != nil {
return models.Node{}, wasFailover, removedClients, err
return models.Node{}, removedClients, err
}
err = SetNetworkNodesLastModified(node.Network)
return node, wasFailover, removedClients, err
return node, removedClients, err
}
// DeleteGatewayExtClients - deletes ext clients based on gateway (mac) of ingress node and network