mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-16 13:51:42 +08:00
began refactor
This commit is contained in:
@@ -1,51 +1,17 @@
|
||||
package serverctl
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
"github.com/gravitl/netmaker/logic"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"github.com/gravitl/netmaker/servercfg"
|
||||
)
|
||||
|
||||
// GetServerWGConf - gets the server WG configuration
|
||||
func GetServerWGConf() (models.IntClient, error) {
|
||||
var server models.IntClient
|
||||
collection, err := database.FetchRecords(database.INT_CLIENTS_TABLE_NAME)
|
||||
if err != nil {
|
||||
return models.IntClient{}, errors.New("could not find comms server")
|
||||
}
|
||||
for _, value := range collection {
|
||||
json.Unmarshal([]byte(value), &server)
|
||||
if server.Network == "comms" && server.IsServer == "yes" {
|
||||
return server, nil
|
||||
}
|
||||
}
|
||||
return models.IntClient{}, errors.New("could not find comms server")
|
||||
}
|
||||
|
||||
// FileExists - checks if local file exists
|
||||
func FileExists(f string) bool {
|
||||
info, err := os.Stat(f)
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
return !info.IsDir()
|
||||
}
|
||||
|
||||
// RemoveNetwork - removes a network locally on server
|
||||
func RemoveNetwork(network string) (bool, error) {
|
||||
err := logic.ServerLeave(network)
|
||||
return true, err
|
||||
}
|
||||
|
||||
// InitServerNetclient - intializes the server netclient
|
||||
func InitServerNetclient() error {
|
||||
netclientDir := ncutils.GetNetclientPath()
|
||||
@@ -59,78 +25,42 @@ func InitServerNetclient() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// HandleContainedClient - function for checkins on server
|
||||
func HandleContainedClient() error {
|
||||
servernets, err := logic.GetNetworks()
|
||||
if err != nil && !database.IsEmptyRecord(err) {
|
||||
// SyncServerNetwork - ensures a wg interface and node exists for server
|
||||
func SyncServerNetwork(serverNode *models.Node) error {
|
||||
serverNetworkSettings, err := logic.GetNetwork(serverNode.Network)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(servernets) > 0 {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, serverNet := range servernets {
|
||||
var serverID, err = logic.GetNetworkServerNodeID(serverNet.NetID)
|
||||
if err != nil {
|
||||
logger.Log(1, "error occurred during server checkin:", err.Error())
|
||||
continue
|
||||
}
|
||||
err = logic.ServerCheckin(serverID, servercfg.GetNodeID(), serverNet.NetID)
|
||||
if err != nil {
|
||||
logger.Log(1, "error occurred during server checkin:", err.Error())
|
||||
} else {
|
||||
logger.Log(3, "completed peers check of network", serverNet.NetID)
|
||||
}
|
||||
}
|
||||
syncErr := SyncNetworks(servernets[:])
|
||||
if syncErr != nil {
|
||||
logger.Log(1, "error syncing networks:", syncErr.Error())
|
||||
syncErr = nil
|
||||
}
|
||||
// logger.Log("completed a checkin call", 3)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SyncNetworks - syncs the networks for servers
|
||||
func SyncNetworks(servernets []models.Network) error {
|
||||
|
||||
localnets, err := net.Interfaces()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// check networks to join
|
||||
for _, servernet := range servernets {
|
||||
exists := false
|
||||
for _, localnet := range localnets {
|
||||
if servernet.DefaultInterface == localnet.Name {
|
||||
exists = true
|
||||
}
|
||||
exists := false
|
||||
for _, localnet := range localnets {
|
||||
if serverNetworkSettings.DefaultInterface == localnet.Name {
|
||||
exists = true
|
||||
}
|
||||
if !exists {
|
||||
success, err := AddNetwork(&servernet)
|
||||
if err != nil || !success {
|
||||
if err == nil {
|
||||
err = errors.New("network add failed for " + servernet.NetID)
|
||||
}
|
||||
if !strings.Contains(err.Error(), "macaddress_unique") { // ignore macaddress unique error throws
|
||||
logger.Log(1, "error adding network", servernet.NetID, "during sync:", err.Error())
|
||||
}
|
||||
}
|
||||
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())
|
||||
}
|
||||
}
|
||||
}
|
||||
// check networks to leave
|
||||
for _, localnet := range localnets {
|
||||
if strings.Contains(localnet.Name, "nm-") {
|
||||
var exists = ""
|
||||
for _, servernet := range servernets {
|
||||
if servernet.DefaultInterface == localnet.Name {
|
||||
exists = servernet.NetID
|
||||
}
|
||||
if serverNetworkSettings.DefaultInterface == localnet.Name {
|
||||
exists = serverNetworkSettings.NetID
|
||||
}
|
||||
if exists == "" {
|
||||
success, err := RemoveNetwork(exists)
|
||||
if err != nil || !success {
|
||||
err := logic.DeleteNodeByID(serverNode, true)
|
||||
if err != nil {
|
||||
if err == nil {
|
||||
err = errors.New("network delete failed for " + exists)
|
||||
}
|
||||
@@ -139,12 +69,5 @@ func SyncNetworks(servernets []models.Network) error {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddNetwork - add a network to server in client mode
|
||||
func AddNetwork(networkSettings *models.Network) (bool, error) {
|
||||
var err = logic.ServerJoin(networkSettings, servercfg.GetNodeID())
|
||||
return true, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user