Browse Source

Merge branch 'develop' of https://github.com/gravitl/netmaker into hotfix_v0.8.4_netclient_dns

afeiszli 3 years ago
parent
commit
8a1b7d558b

+ 4 - 4
controllers/networkHttpController.go

@@ -344,14 +344,14 @@ func DeleteNetwork(network string) error {
 		servers, err := logic.GetSortedNetworkServerNodes(network)
 		if err == nil {
 			for _, s := range servers {
-				if err = logic.DeleteNode(s.ID, true); err != nil {
-					functions.PrintUserLog("[netmaker]", "could not removed server "+s.Name+" before deleting network "+network, 2)
+				if err = logic.DeleteNode(&s, true); err != nil {
+					functions.PrintUserLog("", "could not removed server "+s.Name+" before deleting network "+network, 2)
 				} 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 {
-			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)
 	}

+ 1 - 1
database/sqlite.go

@@ -30,7 +30,7 @@ var SQLITE_FUNCTIONS = map[string]interface{}{
 func initSqliteDB() error {
 	// == create db file if not present ==
 	if _, err := os.Stat("data"); os.IsNotExist(err) {
-		os.Mkdir("data", 0644)
+		os.Mkdir("data", 0744)
 	}
 	dbFilePath := filepath.Join("data", dbFilename)
 	if _, err := os.Stat(dbFilePath); os.IsNotExist(err) {

+ 1 - 1
functions/helpers.go

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

+ 1 - 1
logic/nodes.go

@@ -80,7 +80,7 @@ func GetPeers(node models.Node) ([]models.Node, error) {
 func IsLeader(node *models.Node) bool {
 	nodes, err := GetSortedNetworkServerNodes(node.Network)
 	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
 	}
 	for _, n := range nodes {

+ 3 - 2
logic/server.go

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

+ 5 - 3
logic/util.go

@@ -45,8 +45,10 @@ func SetNetworkServerPeers(node *models.Node) {
 }
 
 // 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
+	node.SetID()
+	var key = node.ID
 	if !exterminate {
 		args := strings.Split(key, "###")
 		node, err := GetNode(args[0], args[1])
@@ -67,13 +69,13 @@ func DeleteNode(key string, exterminate bool) error {
 			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
 	}
 	if servercfg.IsDNSMode() {
 		err = dnslogic.SetDNS()
 	}
-	return err
+	return removeLocalServer(node)
 }
 
 // CreateNode - creates a node in database

+ 44 - 0
logic/wireguard.go

@@ -313,3 +313,47 @@ func setWGKeyConfig(node models.Node) error {
 
 	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
+}

+ 0 - 3
netclient/command/commands.go

@@ -27,9 +27,6 @@ func Join(cfg config.ClientConfig, privateKey string) error {
 
 	var err error
 	err = functions.JoinNetwork(cfg, privateKey)
-	if err != nil && cfg.Node.IsServer != "yes" { // make sure server side is cleaned up
-		return err
-	}
 	if err != nil && !cfg.DebugJoin {
 		if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
 			ncutils.PrintLog("error installing: "+err.Error(), 1)

+ 16 - 9
netclient/daemon/systemd.go

@@ -112,16 +112,23 @@ func RemoveSystemDServices() error {
 		if err != nil {
 			log.Println(err)
 		}
-		_, err = ncutils.RunCmd("systemctl disable netclient.service", true)
-		_, err = ncutils.RunCmd("systemctl disable netclient.timer", true)
-		err = os.Remove("/etc/systemd/system/netclient.service")
-		err = os.Remove("/etc/systemd/system/netclient.timer")
-		if err != nil {
-			log.Println("Error removing file. Please investigate.")
-			log.Println(err)
+		ncutils.RunCmd("systemctl disable netclient.service", false)
+		ncutils.RunCmd("systemctl disable netclient.timer", false)
+		if ncutils.FileExists("/etc/systemd/system/netclient.service") {
+			err = os.Remove("/etc/systemd/system/netclient.service")
+			if err != nil {
+				ncutils.Log("Error removing /etc/systemd/system/netclient.service. Please investigate.")
+			}
+		}
+		if ncutils.FileExists("/etc/systemd/system/netclient.timer") {
+			err = os.Remove("/etc/systemd/system/netclient.timer")
+			if err != nil {
+				ncutils.Log("Error removing /etc/systemd/system/netclient.timer. Please investigate.")
+			}
 		}
-		_, _ = ncutils.RunCmd("systemctl daemon-reload", true)
-		_, _ = ncutils.RunCmd("systemctl reset-failed", true)
+		ncutils.RunCmd("systemctl daemon-reload", false)
+		ncutils.RunCmd("systemctl reset-failed", false)
+		ncutils.Log("removed systemd remnants if any existed")
 	}
 	return nil
 }

+ 0 - 8
netclient/functions/common.go

@@ -12,7 +12,6 @@ import (
 	"strings"
 
 	nodepb "github.com/gravitl/netmaker/grpc"
-	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/auth"
 	"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)
 			}
 		}
-	} 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)
 }