|
@@ -1,6 +1,7 @@
|
|
|
package logic
|
|
|
|
|
|
import (
|
|
|
+ "github.com/gravitl/netmaker/logger"
|
|
|
"github.com/gravitl/netmaker/logic"
|
|
|
"github.com/gravitl/netmaker/models"
|
|
|
)
|
|
@@ -14,6 +15,25 @@ func SetFailover(node *models.Node) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// ResetFailover - sets the failover node and wipes disconnected status
|
|
|
+func ResetFailover(network string) error {
|
|
|
+ nodes, err := logic.GetNetworkNodes(network)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, node := range nodes {
|
|
|
+ err = SetFailover(&node)
|
|
|
+ if err != nil {
|
|
|
+ logger.Log(2, "error setting failover for node", node.Name, ":", err.Error())
|
|
|
+ }
|
|
|
+ err = WipeFailover(node.ID)
|
|
|
+ if err != nil {
|
|
|
+ logger.Log(2, "error wiping failover for node", node.Name, ":", err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
// determineFailoverCandidate - returns a list of nodes that
|
|
|
// are suitable for relaying a given node
|
|
|
func determineFailoverCandidate(nodeToBeRelayed *models.Node) *models.Node {
|
|
@@ -63,3 +83,12 @@ func setFailoverNode(failoverNode, node *models.Node) error {
|
|
|
}
|
|
|
return logic.UpdateNode(&nodeToUpdate, node)
|
|
|
}
|
|
|
+
|
|
|
+func WipeFailover(nodeid string) error {
|
|
|
+ metrics, err := logic.GetMetrics(nodeid)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ metrics.NeedsFailover = make(map[string]string)
|
|
|
+ return logic.UpdateMetrics(nodeid, metrics)
|
|
|
+}
|