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

This commit is contained in:
Emika 2021-08-11 17:20:25 -06:00
parent 80dd97455e
commit fa5de4e777
2 changed files with 14 additions and 6 deletions

View file

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

View file

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