mirror of
https://github.com/gravitl/netmaker.git
synced 2025-02-24 16:12:59 +08:00
added local range logic
This commit is contained in:
parent
685689df1d
commit
72206817bb
3 changed files with 38 additions and 7 deletions
|
@ -227,7 +227,7 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
if servercfg.IsClientMode() != "off" {
|
||||
var success bool
|
||||
success, err = serverctl.AddNetwork(network.NetID)
|
||||
success, err = serverctl.AddNetwork(&network)
|
||||
if err != nil || !success {
|
||||
logic.DeleteNetwork(network.NetID)
|
||||
if err == nil {
|
||||
|
|
|
@ -26,9 +26,9 @@ const KUBERNETES_LISTEN_PORT = 31821
|
|||
const KUBERNETES_SERVER_MTU = 1024
|
||||
|
||||
// ServerJoin - responsible for joining a server to a network
|
||||
func ServerJoin(network string, serverID string, privateKey string) error {
|
||||
func ServerJoin(networkSettings *models.Network, serverID string) error {
|
||||
|
||||
if network == "" {
|
||||
if networkSettings == nil || networkSettings.NetID == "" {
|
||||
return errors.New("no network provided")
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,15 @@ func ServerJoin(network string, serverID string, privateKey string) error {
|
|||
}
|
||||
|
||||
if node.Endpoint == "" {
|
||||
if node.IsLocal == "yes" {
|
||||
var localAddr, localErr = getServerLocalIP(networkSettings)
|
||||
if localErr != nil {
|
||||
logger.Log(1, "could not acquire local address", localErr.Error())
|
||||
} else {
|
||||
node.LocalAddress = localAddr
|
||||
node.LocalRange = networkSettings.LocalRange
|
||||
}
|
||||
}
|
||||
if node.IsLocal == "yes" && node.LocalAddress != "" {
|
||||
node.Endpoint = node.LocalAddress
|
||||
} else {
|
||||
|
@ -65,6 +74,8 @@ func ServerJoin(network string, serverID string, privateKey string) error {
|
|||
}
|
||||
}
|
||||
|
||||
var privateKey = ""
|
||||
|
||||
// Generate and set public/private WireGuard Keys
|
||||
if privateKey == "" {
|
||||
wgPrivatekey, err := wgtypes.GeneratePrivateKey()
|
||||
|
@ -76,7 +87,7 @@ func ServerJoin(network string, serverID string, privateKey string) error {
|
|||
node.PublicKey = wgPrivatekey.PublicKey().String()
|
||||
}
|
||||
|
||||
node.Network = network
|
||||
node.Network = networkSettings.NetID
|
||||
|
||||
logger.Log(2, "adding a server instance on network", node.Network)
|
||||
err = CreateNode(node)
|
||||
|
@ -421,3 +432,23 @@ func checkNodeActions(node *models.Node) string {
|
|||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// best effort, or get public ip
|
||||
func getServerLocalIP(networkSettings *models.Network) (string, error) {
|
||||
var networkCIDR = networkSettings.AddressRange
|
||||
var currentAddresses, err = net.InterfaceAddrs()
|
||||
if err != nil { // attempt to use public IP
|
||||
return "", err
|
||||
}
|
||||
var _, currentCIDR, cidrErr = net.ParseCIDR(networkCIDR)
|
||||
if cidrErr != nil {
|
||||
return "", err
|
||||
}
|
||||
for _, address := range currentAddresses {
|
||||
if currentCIDR.Contains(net.IP(address.Network())) {
|
||||
logger.Log(1, "setting local ip", address.String())
|
||||
return address.String(), nil
|
||||
}
|
||||
}
|
||||
return "", errors.New("could not find local ip")
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ func SyncNetworks(servernets []models.Network) error {
|
|||
}
|
||||
}
|
||||
if !exists {
|
||||
success, err := AddNetwork(servernet.NetID)
|
||||
success, err := AddNetwork(&servernet)
|
||||
if err != nil || !success {
|
||||
if err == nil {
|
||||
err = errors.New("network add failed for " + servernet.NetID)
|
||||
|
@ -139,7 +139,7 @@ func SyncNetworks(servernets []models.Network) error {
|
|||
}
|
||||
|
||||
// AddNetwork - add a network to server in client mode
|
||||
func AddNetwork(network string) (bool, error) {
|
||||
var err = logic.ServerJoin(network, servercfg.GetNodeID(), "")
|
||||
func AddNetwork(networkSettings *models.Network) (bool, error) {
|
||||
var err = logic.ServerJoin(networkSettings, servercfg.GetNodeID())
|
||||
return true, err
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue