mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
make defaul host failover and remote access gw on joining new network
This commit is contained in:
@@ -288,25 +288,30 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
|
|||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
go func() {
|
||||||
defaultHosts := logic.GetDefaultHosts()
|
defaultHosts := logic.GetDefaultHosts()
|
||||||
for i := range defaultHosts {
|
for i := range defaultHosts {
|
||||||
currHost := &defaultHosts[i]
|
currHost := &defaultHosts[i]
|
||||||
newNode, err := logic.UpdateHostNetwork(currHost, network.NetID, true)
|
newNode, err := logic.UpdateHostNetwork(currHost, network.NetID, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, r.Header.Get("user"), "failed to add host to network:", currHost.ID.String(), network.NetID, err.Error())
|
logger.Log(0, r.Header.Get("user"), "failed to add host to network:", currHost.ID.String(), network.NetID, err.Error())
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
||||||
return
|
return
|
||||||
|
}
|
||||||
|
logger.Log(1, "added new node", newNode.ID.String(), "to host", currHost.Name)
|
||||||
|
if err = mq.HostUpdate(&models.HostUpdate{
|
||||||
|
Action: models.JoinHostToNetwork,
|
||||||
|
Host: *currHost,
|
||||||
|
Node: *newNode,
|
||||||
|
}); 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, "added new node", newNode.ID.String(), "to host", currHost.Name)
|
}()
|
||||||
if err = mq.HostUpdate(&models.HostUpdate{
|
|
||||||
Action: models.JoinHostToNetwork,
|
|
||||||
Host: *currHost,
|
|
||||||
Node: *newNode,
|
|
||||||
}); err != nil {
|
|
||||||
logger.Log(0, r.Header.Get("user"), "failed to add host to network:", currHost.ID.String(), network.NetID, err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Log(1, r.Header.Get("user"), "created network", network.NetID)
|
logger.Log(1, r.Header.Get("user"), "created network", network.NetID)
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
@@ -28,6 +28,10 @@ var (
|
|||||||
GetFailOverPeerIps = func(peer, node *models.Node) []net.IPNet {
|
GetFailOverPeerIps = func(peer, node *models.Node) []net.IPNet {
|
||||||
return []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
|
// 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"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, exists := proLogic.FailOverExists(node.Network); exists {
|
err = proLogic.CreateFailOver(node)
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("failover exists already in the network"), "badrequest"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
host, err := logic.GetHost(node.HostID.String())
|
|
||||||
if err != nil {
|
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"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@@ -83,6 +83,7 @@ func InitPro() {
|
|||||||
})
|
})
|
||||||
logic.ResetFailOver = proLogic.ResetFailOver
|
logic.ResetFailOver = proLogic.ResetFailOver
|
||||||
logic.ResetFailedOverPeer = proLogic.ResetFailedOverPeer
|
logic.ResetFailedOverPeer = proLogic.ResetFailedOverPeer
|
||||||
|
logic.CreateFailOver = proLogic.CreateFailOver
|
||||||
logic.GetFailOverPeerIps = proLogic.GetFailOverPeerIps
|
logic.GetFailOverPeerIps = proLogic.GetFailOverPeerIps
|
||||||
logic.DenyClientNodeAccess = proLogic.DenyClientNode
|
logic.DenyClientNodeAccess = proLogic.DenyClientNode
|
||||||
logic.IsClientNodeAllowed = proLogic.IsClientNodeAllowed
|
logic.IsClientNodeAllowed = proLogic.IsClientNodeAllowed
|
||||||
|
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/gravitl/netmaker/logic"
|
"github.com/gravitl/netmaker/logic"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
|
"golang.org/x/exp/slog"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetFailOverCtx(failOverNode, victimNode, peerNode models.Node) error {
|
func SetFailOverCtx(failOverNode, victimNode, peerNode models.Node) error {
|
||||||
@@ -123,3 +124,26 @@ func GetFailOverPeerIps(peer, node *models.Node) []net.IPNet {
|
|||||||
}
|
}
|
||||||
return allowedips
|
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