Browse Source

Fix issue with netclient failing when interface doesnt exist, issue #221

Emika 4 years ago
parent
commit
fa5de4e777
2 changed files with 14 additions and 6 deletions
  1. 7 1
      netclient/functions/checkin.go
  2. 7 5
      netclient/wireguard/kernel.go

+ 7 - 1
netclient/functions/checkin.go

@@ -6,6 +6,7 @@ import (
 	"errors"
 	"log"
 	"strings"
+	"os"
 
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/models"
@@ -226,7 +227,12 @@ func Pull(network string, manual bool) (*models.Node, error) {
 		}
 	} else {
 		if err = wireguard.SetWGConfig(network, true); err != nil {
-			return nil, err
+			if errors.Is(err, os.ErrNotExist) {
+				log.Println("readding interface")
+				return Pull(network, true)
+			} else {
+				return nil, err
+			}
 		}
 	}
 	setDNS(&resNode, servercfg, &cfg.Node)

+ 7 - 5
netclient/wireguard/kernel.go

@@ -234,7 +234,7 @@ func SetWGConfig(network string, peerupdate bool) error {
 		return err
 	}
 	if peerupdate {
-		SetPeers(nodecfg.Interface, nodecfg.PersistentKeepalive, peers)
+		err = SetPeers(nodecfg.Interface, nodecfg.PersistentKeepalive, peers)
 	} else {
 		err = InitWireguard(&nodecfg, privkey, peers, hasGateway, gateways)
 	}
@@ -245,22 +245,22 @@ func SetWGConfig(network string, peerupdate bool) error {
 	return err
 }
 
-func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
+func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
 
 	client, err := wgctrl.New()
 	if err != nil {
 		log.Println("failed to start wgctrl")
-		return
+		return err
 	}
 	device, err := client.Device(iface)
 	if err != nil {
 		log.Println("failed to parse interface")
-		return
+		return err
 	}
 	devicePeers := device.Peers
 	if len(devicePeers) > 1 && len(peers) == 0 {
 		log.Println("no peers pulled")
-		return
+		return err
 	}
 
 	for _, peer := range peers {
@@ -316,6 +316,8 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
 			}
 		}
 	}
+	
+	return nil
 }
 
 func StorePrivKey(key string, network string) error {