Browse Source

Fixed client and server issues with updates and dns before db connect

worker-9 4 years ago
parent
commit
fb5f08be5a
4 changed files with 22 additions and 34 deletions
  1. 4 7
      controllers/nodeHttpController.go
  2. 2 2
      main.go
  3. 3 2
      models/node.go
  4. 13 23
      netclient/wireguard/kernel.go

+ 4 - 7
controllers/nodeHttpController.go

@@ -198,7 +198,7 @@ func authorize(networkCheck bool, authNetwork string, next http.Handler) http.Ha
 				isAuthorized = true
 				r.Header.Set("ismasterkey", "yes")
 			} else {
-                                r.Header.Set("ismasterkey", "")
+				r.Header.Set("ismasterkey", "")
 				mac, _, err := functions.VerifyToken(authToken)
 				if err != nil {
 					errorResponse = models.ErrorResponse{
@@ -320,7 +320,7 @@ func getAllNodes(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 	var nodes []models.Node
-	if user.IsAdmin  || r.Header.Get("ismasterkey") == "yes" {
+	if user.IsAdmin || r.Header.Get("ismasterkey") == "yes" {
 		nodes, err = models.GetAllNodes()
 		if err != nil {
 			returnErrorResponse(w, r, formatError(err, "internal"))
@@ -706,8 +706,8 @@ func CreateIngressGateway(netid string, macaddress string) (models.Node, error)
 		}
 	}
 	node.SetLastModified()
-        node.PostUp = postUpCmd
-        node.PostDown = postDownCmd
+	node.PostUp = postUpCmd
+	node.PostDown = postDownCmd
 	key, err := functions.GetRecordKey(node.MacAddress, node.Network)
 	if err != nil {
 		return models.Node{}, err
@@ -788,9 +788,6 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	if err = SetNetworkNodesLastModified(node.Network); err != nil {
-		log.Println(err)
-	}
 	if servercfg.IsDNSMode() {
 		err = SetDNS()
 	}

+ 2 - 2
main.go

@@ -23,7 +23,6 @@ import (
 
 //Start MongoDB Connection and start API Request Handler
 func main() {
-	checkModes() // check which flags are set and if root or not
 	initialize() // initial db and grpc server
 	defer database.Database.Close()
 	startControllers() // start the grpc or rest endpoints
@@ -46,6 +45,7 @@ func checkModes() { // Client Mode Prereq Check
 	if uid != 0 {
 		log.Fatal("To run in client mode requires root privileges. Either disable client mode or run with sudo.")
 	}
+	database.InitializeDatabase()
 
 	if servercfg.IsDNSMode() {
 		err := functions.SetDNSDir()
@@ -57,7 +57,7 @@ func checkModes() { // Client Mode Prereq Check
 }
 
 func initialize() {
-	database.InitializeDatabase()
+	checkModes() // check which flags are set and if root or not
 	if servercfg.IsGRPCWireGuard() {
 		if err := serverctl.InitServerWireGuard(); err != nil {
 			log.Fatal(err)

+ 3 - 2
models/node.go

@@ -15,6 +15,7 @@ import (
 
 const charset = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 const TEN_YEARS_IN_SECONDS = 300000000
+
 var seededRand *rand.Rand = rand.New(
 	rand.NewSource(time.Now().UnixNano()))
 
@@ -264,16 +265,16 @@ func (newNode *Node) Fill(currentNode *Node) {
 }
 
 func (currentNode *Node) Update(newNode *Node) error {
-        newNode.Fill(currentNode)
+	newNode.Fill(currentNode)
 	if err := newNode.Validate(true); err != nil {
 		return err
 	}
 	newNode.SetID()
 	if newNode.ID == currentNode.ID {
+		newNode.SetLastModified()
 		if data, err := json.Marshal(newNode); err != nil {
 			return err
 		} else {
-			newNode.SetLastModified()
 			if err = database.Insert(newNode.ID, string(data), database.NODES_TABLE_NAME); err == nil {
 				if network, err := GetNetwork(newNode.Network); err == nil {
 					err = network.SetNetworkNodesLastModified()

+ 13 - 23
netclient/wireguard/kernel.go

@@ -1,7 +1,6 @@
 package wireguard
 
 import (
-	"github.com/davecgh/go-spew/spew"
 	"context"
 	"crypto/tls"
 	"errors"
@@ -14,6 +13,8 @@ import (
 	"strconv"
 	"strings"
 
+	"github.com/davecgh/go-spew/spew"
+
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/auth"
@@ -203,30 +204,19 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
 		Stdout: os.Stdout,
 		Stderr: os.Stdout,
 	}
+	cmdIPLinkDelete := exec.Command("ip", "link", "delete", "dev", ifacename)
 
-	currentiface, err := net.InterfaceByName(ifacename)
-
-	if err != nil {
-		err = cmdIPDevLinkAdd.Run()
-		if err != nil && !strings.Contains(err.Error(), "exists") {
-			fmt.Println("Error creating interface")
-			//fmt.Println(err.Error())
-			//return err
-		}
+	delErr := cmdIPLinkDelete.Run()
+	addLinkErr := cmdIPDevLinkAdd.Run()
+	addErr := cmdIPAddrAdd.Run()
+	if delErr != nil {
+		log.Println(delErr)
 	}
-	match := false
-	addrs, _ := currentiface.Addrs()
-	for _, a := range addrs {
-		if strings.Contains(a.String(), node.Address) {
-			match = true
-		}
+	if addLinkErr != nil {
+		log.Println(addLinkErr)
 	}
-	if !match {
-		err = cmdIPAddrAdd.Run()
-		if err != nil {
-			fmt.Println("Error adding address")
-			//return err
-		}
+	if addErr != nil {
+		log.Println(addErr)
 	}
 	var nodeport int
 	nodeport = int(node.Listenport)
@@ -267,7 +257,7 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
 		}
 	}
 	//=========DNS Setup==========\\
-	log.Println("NODECFG.DNS:",nodecfg.DNS)
+	log.Println("NODECFG.DNS:", nodecfg.DNS)
 	if nodecfg.DNS == "on" {
 		_ = local.UpdateDNS(ifacename, network, nameserver)
 	}