added ability to remove local instance of netmaker

This commit is contained in:
0xdcarns 2021-10-20 09:22:05 -04:00
parent dc29e92b0b
commit 51c1973b21
7 changed files with 58 additions and 19 deletions

View file

@ -344,14 +344,14 @@ func DeleteNetwork(network string) error {
servers, err := logic.GetSortedNetworkServerNodes(network) servers, err := logic.GetSortedNetworkServerNodes(network)
if err == nil { if err == nil {
for _, s := range servers { for _, s := range servers {
if err = logic.DeleteNode(s.ID, true); err != nil { if err = logic.DeleteNode(&s, true); err != nil {
functions.PrintUserLog("[netmaker]", "could not removed server "+s.Name+" before deleting network "+network, 2) functions.PrintUserLog("", "could not removed server "+s.Name+" before deleting network "+network, 2)
} else { } else {
functions.PrintUserLog("[netmaker]", "removed server "+s.Name+" before deleting network "+network, 2) functions.PrintUserLog("", "removed server "+s.Name+" before deleting network "+network, 2)
} }
} }
} else { } else {
functions.PrintUserLog("[netmaker]", "could not remove servers before deleting network "+network, 1) functions.PrintUserLog("", "could not remove servers before deleting network "+network, 1)
} }
return database.DeleteRecord(database.NETWORKS_TABLE_NAME, network) return database.DeleteRecord(database.NETWORKS_TABLE_NAME, network)
} }

View file

@ -24,7 +24,7 @@ import (
func PrintUserLog(username string, message string, loglevel int) { func PrintUserLog(username string, message string, loglevel int) {
log.SetFlags(log.Flags() &^ (log.Llongfile | log.Lshortfile)) log.SetFlags(log.Flags() &^ (log.Llongfile | log.Lshortfile))
if int32(loglevel) <= servercfg.GetVerbose() && servercfg.GetVerbose() != 0 { if int32(loglevel) <= servercfg.GetVerbose() && servercfg.GetVerbose() != 0 {
log.Println(username, message) log.Println("[netmaker]", username, message)
} }
} }

View file

@ -80,7 +80,7 @@ func GetPeers(node models.Node) ([]models.Node, error) {
func IsLeader(node *models.Node) bool { func IsLeader(node *models.Node) bool {
nodes, err := GetSortedNetworkServerNodes(node.Network) nodes, err := GetSortedNetworkServerNodes(node.Network)
if err != nil { if err != nil {
functions.PrintUserLog("[netmaker]", "ERROR: COULD NOT RETRIEVE SERVER NODES. THIS WILL BREAK HOLE PUNCHING.", 0) functions.PrintUserLog("", "ERROR: COULD NOT RETRIEVE SERVER NODES. THIS WILL BREAK HOLE PUNCHING.", 0)
return false return false
} }
for _, n := range nodes { for _, n := range nodes {

View file

@ -8,9 +8,10 @@ import (
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/gravitl/netmaker/servercfg"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/servercfg"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes" "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
) )
@ -239,7 +240,7 @@ func ServerLeave(mac string, network string) error {
return err return err
} }
serverNode.SetID() serverNode.SetID()
return DeleteNode(serverNode.ID, true) return DeleteNode(&serverNode, true)
} }
// GetServerPeers - gets peers of server // GetServerPeers - gets peers of server

View file

@ -45,8 +45,10 @@ func SetNetworkServerPeers(node *models.Node) {
} }
// DeleteNode - deletes a node from database or moves into delete nodes table // DeleteNode - deletes a node from database or moves into delete nodes table
func DeleteNode(key string, exterminate bool) error { func DeleteNode(node *models.Node, exterminate bool) error {
var err error var err error
node.SetID()
var key = node.ID
if !exterminate { if !exterminate {
args := strings.Split(key, "###") args := strings.Split(key, "###")
node, err := GetNode(args[0], args[1]) node, err := GetNode(args[0], args[1])
@ -67,13 +69,13 @@ func DeleteNode(key string, exterminate bool) error {
Log(err.Error(), 2) Log(err.Error(), 2)
} }
} }
if err := database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil { if err = database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil {
return err return err
} }
if servercfg.IsDNSMode() { if servercfg.IsDNSMode() {
err = dnslogic.SetDNS() err = dnslogic.SetDNS()
} }
return err return removeLocalServer(node)
} }
// CreateNode - creates a node in database // CreateNode - creates a node in database

View file

@ -313,3 +313,47 @@ func setWGKeyConfig(node models.Node) error {
return setWGConfig(node, node.Network, false) return setWGConfig(node, node.Network, false)
} }
func removeLocalServer(node *models.Node) error {
var ifacename = node.Interface
var err error
if ifacename != "" {
if !ncutils.IsKernel() {
if err = RemoveConf(ifacename, true); err == nil {
Log("removed WireGuard interface: "+ifacename, 1)
}
} else {
ipExec, err := exec.LookPath("ip")
if err != nil {
return err
}
out, err := ncutils.RunCmd(ipExec+" link del "+ifacename, false)
dontprint := strings.Contains(out, "does not exist") || strings.Contains(out, "Cannot find device")
if err != nil && !dontprint {
Log("error running command: "+ipExec+" link del "+ifacename, 1)
Log(out, 1)
}
if node.PostDown != "" {
runcmds := strings.Split(node.PostDown, "; ")
_ = ncutils.RunCmds(runcmds, false)
}
}
}
home := ncutils.GetNetclientPathSpecific()
if ncutils.FileExists(home + "netconfig-" + node.Network) {
_ = os.Remove(home + "netconfig-" + node.Network)
}
if ncutils.FileExists(home + "nettoken-" + node.Network) {
_ = os.Remove(home + "nettoken-" + node.Network)
}
if ncutils.FileExists(home + "secret-" + node.Network) {
_ = os.Remove(home + "secret-" + node.Network)
}
if ncutils.FileExists(home + "wgkey-" + node.Network) {
_ = os.Remove(home + "wgkey-" + node.Network)
}
if ncutils.FileExists(home + "nm-" + node.Network + ".conf") {
_ = os.Remove(home + "nm-" + node.Network + ".conf")
}
return err
}

View file

@ -12,7 +12,6 @@ import (
"strings" "strings"
nodepb "github.com/gravitl/netmaker/grpc" nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/auth" "github.com/gravitl/netmaker/netclient/auth"
"github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/config"
@ -206,13 +205,6 @@ func LeaveNetwork(network string) error {
ncutils.PrintLog("removed machine from "+node.Network+" network on remote server", 1) ncutils.PrintLog("removed machine from "+node.Network+" network on remote server", 1)
} }
} }
} else { // handle server side
node.SetID()
if err = logic.DeleteNode(node.ID, true); err != nil {
ncutils.PrintLog("error removing server on network "+node.Network, 1)
} else {
ncutils.PrintLog("removed netmaker server instance on "+node.Network, 1)
}
} }
return RemoveLocalInstance(cfg, network) return RemoveLocalInstance(cfg, network)
} }