mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 12:16:29 +08:00 
			
		
		
		
	Fix issue with netclient failing when interface doesnt exist, issue #221
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
| @@ -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 { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Emika
					Emika