diff --git a/netclient/functions/checkin.go b/netclient/functions/checkin.go index 1ca0f339..112b9eb3 100644 --- a/netclient/functions/checkin.go +++ b/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) diff --git a/netclient/wireguard/kernel.go b/netclient/wireguard/kernel.go index 944b5ec2..b48b1ddb 100644 --- a/netclient/wireguard/kernel.go +++ b/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 {