mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
fixed duplicate interface issue
This commit is contained in:
@@ -433,18 +433,35 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
|
||||
Stdout: os.Stdout,
|
||||
Stderr: os.Stdout,
|
||||
}
|
||||
err = cmdIPDevLinkAdd.Run()
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
match := false
|
||||
addrs, _ := currentiface.Addrs()
|
||||
for _, a := range addrs {
|
||||
fmt.Println("Current address: " + a.String())
|
||||
fmt.Println("node.Address: " + node.Address)
|
||||
if strings.Contains(a.String(), node.Address){
|
||||
match = true
|
||||
}
|
||||
}
|
||||
if !match {
|
||||
err = cmdIPAddrAdd.Run()
|
||||
if err != nil {
|
||||
fmt.Println("Error adding address")
|
||||
//return err
|
||||
}
|
||||
|
||||
}
|
||||
var nodeport int
|
||||
nodeport = int(node.Listenport)
|
||||
|
||||
@@ -476,7 +493,7 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
|
||||
fmt.Println("Device does not exist: ")
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
log.Fatalf("Unknown config error: %v", err)
|
||||
fmt.Printf("This is inconvenient: %v", err)
|
||||
}
|
||||
}
|
||||
cmdIPLinkUp := &exec.Cmd {
|
||||
@@ -601,6 +618,32 @@ func CheckIn() error {
|
||||
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making furtherupdates.")
|
||||
return err
|
||||
}
|
||||
|
||||
newinterface := getNode().Interface
|
||||
readreq := &nodepb.ReadNodeReq{
|
||||
Macaddress: node.Macaddress,
|
||||
Group: node.Nodegroup,
|
||||
}
|
||||
readres, err := wcclient.ReadNode(ctx, readreq, grpc.Header(&header))
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v", err)
|
||||
} else {
|
||||
currentiface := readres.Node.Interface
|
||||
ifaceupdate := newinterface != currentiface
|
||||
fmt.Println("Is it time to update the interface? ")
|
||||
fmt.Println(ifaceupdate)
|
||||
if err != nil {
|
||||
log.Printf("Error retrieving interface: %v", err)
|
||||
}
|
||||
if ifaceupdate {
|
||||
err := DeleteInterface(currentiface)
|
||||
if err != nil {
|
||||
fmt.Println("ERROR DELETING INTERFACE: " + currentiface)
|
||||
}
|
||||
}
|
||||
err = setWGConfig()
|
||||
}
|
||||
|
||||
if checkinres.Checkinresponse.Needconfigupdate {
|
||||
fmt.Println("Server has requested that node update config.")
|
||||
fmt.Println("Updating config from remote server.")
|
||||
@@ -628,28 +671,21 @@ func CheckIn() error {
|
||||
fmt.Println("Node has requested to update remote config.")
|
||||
fmt.Println("Posting local config to remote server.")
|
||||
postnode := getNode()
|
||||
currentinterface := postnode.Interface
|
||||
|
||||
req := &nodepb.UpdateNodeReq{
|
||||
Node: &postnode,
|
||||
}
|
||||
res, err := wcclient.UpdateNode(ctx, req, grpc.Header(&header))
|
||||
res, err := wcclient.UpdateNode(ctx, req, grpc.Header(&header))
|
||||
if err != nil {
|
||||
return err
|
||||
log.Fatalf("Error: %v", err)
|
||||
}
|
||||
res.Node.Postchanges = "false"
|
||||
newinterface := res.Node.Interface
|
||||
err = modConfig(res.Node)
|
||||
if err != nil {
|
||||
return err
|
||||
log.Fatalf("Error: %v", err)
|
||||
}
|
||||
if currentinterface != newinterface {
|
||||
err := DeleteInterface(currentinterface)
|
||||
if err != nil {
|
||||
fmt.Println("ERROR DELETING INTERFACE: " + currentinterface)
|
||||
}
|
||||
}
|
||||
err = setWGConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -681,6 +717,23 @@ func CheckIn() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func needInterfaceUpdate(ctx context.Context, mac string, group string, iface string) (bool, string, error) {
|
||||
var header metadata.MD
|
||||
req := &nodepb.ReadNodeReq{
|
||||
Macaddress: mac,
|
||||
Group: group,
|
||||
}
|
||||
readres, err := wcclient.ReadNode(ctx, req, grpc.Header(&header))
|
||||
if err != nil {
|
||||
return false, "", err
|
||||
log.Fatalf("Error: %v", err)
|
||||
}
|
||||
oldiface := readres.Node.Interface
|
||||
|
||||
return iface != oldiface, oldiface, err
|
||||
}
|
||||
|
||||
func getNode() nodepb.Node {
|
||||
modcfg := config.Config
|
||||
modcfg.ReadConfig()
|
||||
|
Reference in New Issue
Block a user