mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
make defaul host failover and remote access gw on joining new network
This commit is contained in:
@@ -288,7 +288,7 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||
return
|
||||
}
|
||||
|
||||
go func() {
|
||||
defaultHosts := logic.GetDefaultHosts()
|
||||
for i := range defaultHosts {
|
||||
currHost := &defaultHosts[i]
|
||||
@@ -306,7 +306,12 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
|
||||
}); err != nil {
|
||||
logger.Log(0, r.Header.Get("user"), "failed to add host to network:", currHost.ID.String(), network.NetID, err.Error())
|
||||
}
|
||||
// make host failover
|
||||
logic.CreateFailOver(*newNode)
|
||||
// make host remote access gateway
|
||||
logic.CreateIngressGateway(network.NetID, newNode.ID.String(), models.IngressRequest{})
|
||||
}
|
||||
}()
|
||||
|
||||
logger.Log(1, r.Header.Get("user"), "created network", network.NetID)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
@@ -28,6 +28,10 @@ var (
|
||||
GetFailOverPeerIps = func(peer, node *models.Node) []net.IPNet {
|
||||
return []net.IPNet{}
|
||||
}
|
||||
|
||||
CreateFailOver = func(node models.Node) error {
|
||||
return nil
|
||||
}
|
||||
)
|
||||
|
||||
// GetPeerUpdateForHost - gets the consolidated peer update for the host from all networks
|
||||
|
@@ -46,27 +46,8 @@ func createfailOver(w http.ResponseWriter, r *http.Request) {
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||
return
|
||||
}
|
||||
if _, exists := proLogic.FailOverExists(node.Network); exists {
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("failover exists already in the network"), "badrequest"))
|
||||
return
|
||||
}
|
||||
host, err := logic.GetHost(node.HostID.String())
|
||||
err = proLogic.CreateFailOver(node)
|
||||
if err != nil {
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("error getting host"+err.Error()), "badrequest"))
|
||||
return
|
||||
}
|
||||
if host.OS != models.OS_Types.Linux {
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("only linux nodes can act as failovers"), "badrequest"))
|
||||
return
|
||||
}
|
||||
if node.IsRelayed {
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("cannot set relayed node as failover"), "badrequest"))
|
||||
return
|
||||
}
|
||||
node.IsFailOver = true
|
||||
err = logic.UpsertNode(&node)
|
||||
if err != nil {
|
||||
slog.Error("failed to upsert node", "node", node.ID.String(), "error", err)
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
||||
return
|
||||
}
|
||||
|
@@ -83,6 +83,7 @@ func InitPro() {
|
||||
})
|
||||
logic.ResetFailOver = proLogic.ResetFailOver
|
||||
logic.ResetFailedOverPeer = proLogic.ResetFailedOverPeer
|
||||
logic.CreateFailOver = proLogic.CreateFailOver
|
||||
logic.GetFailOverPeerIps = proLogic.GetFailOverPeerIps
|
||||
logic.DenyClientNodeAccess = proLogic.DenyClientNode
|
||||
logic.IsClientNodeAllowed = proLogic.IsClientNodeAllowed
|
||||
|
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/google/uuid"
|
||||
"github.com/gravitl/netmaker/logic"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"golang.org/x/exp/slog"
|
||||
)
|
||||
|
||||
func SetFailOverCtx(failOverNode, victimNode, peerNode models.Node) error {
|
||||
@@ -123,3 +124,26 @@ func GetFailOverPeerIps(peer, node *models.Node) []net.IPNet {
|
||||
}
|
||||
return allowedips
|
||||
}
|
||||
|
||||
func CreateFailOver(node models.Node) error {
|
||||
if _, exists := FailOverExists(node.Network); exists {
|
||||
return errors.New("failover already exists in the network")
|
||||
}
|
||||
host, err := logic.GetHost(node.HostID.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if host.OS != models.OS_Types.Linux {
|
||||
return err
|
||||
}
|
||||
if node.IsRelayed {
|
||||
return err
|
||||
}
|
||||
node.IsFailOver = true
|
||||
err = logic.UpsertNode(&node)
|
||||
if err != nil {
|
||||
slog.Error("failed to upsert node", "node", node.ID.String(), "error", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user