| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | package serverctlimport (	"errors"	"net"	"os"	"strings"	"github.com/gravitl/netmaker/logger"	"github.com/gravitl/netmaker/logic"	"github.com/gravitl/netmaker/models"	"github.com/gravitl/netmaker/netclient/ncutils")// InitServerNetclient - intializes the server netclientfunc InitServerNetclient() error {	netclientDir := ncutils.GetNetclientPath()	_, err := os.Stat(netclientDir + "/config")	if os.IsNotExist(err) {		os.MkdirAll(netclientDir+"/config", 0744)	} else if err != nil {		logger.Log(1, "could not find or create", netclientDir)		return err	}	return nil}// SyncServerNetwork - ensures a wg interface and node exists for serverfunc SyncServerNetwork(serverNode *models.Node) error {	serverNetworkSettings, err := logic.GetNetwork(serverNode.Network)	if err != nil {		return err	}	localnets, err := net.Interfaces()	if err != nil {		return err	}	exists := false	for _, localnet := range localnets {		if serverNetworkSettings.DefaultInterface == localnet.Name {			exists = true		}	}	if !exists {		err := logic.ServerJoin(&serverNetworkSettings)		if err != nil {			if err == nil {				err = errors.New("network add failed for " + serverNetworkSettings.NetID)			}			if !strings.Contains(err.Error(), "macaddress_unique") { // ignore macaddress unique error throws				logger.Log(1, "error adding network", serverNetworkSettings.NetID, "during sync:", err.Error())			}		}	}	for _, localnet := range localnets {		if strings.Contains(localnet.Name, "nm-") {			var exists = ""			if serverNetworkSettings.DefaultInterface == localnet.Name {				exists = serverNetworkSettings.NetID			}			if exists == "" {				err := logic.DeleteNodeByID(serverNode, true)				if err != nil {					if err == nil {						err = errors.New("network delete failed for " + exists)					}					logger.Log(1, "error removing network", exists, "during sync", err.Error())				}			}		}	}	return nil}
 |