mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-29 14:12:23 +08:00
Move public IP services handling to a map-based approach to work for daemon (multiple network configs) and CLI-based setting of the IP services.
This commit is contained in:
@@ -6,13 +6,14 @@ import (
|
||||
"crypto/x509/pkix"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"log"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"github.com/gravitl/netmaker/netclient/global_settings"
|
||||
"github.com/urfave/cli/v2"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
@@ -233,6 +234,9 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
|
||||
cfg.Server.API = c.String("apiserver")
|
||||
}
|
||||
cfg.PublicIPService = c.String("publicipservice")
|
||||
// populate the map as we're not running as a daemon so won't be building the map otherwise
|
||||
// (and the map will be used by GetPublicIP()).
|
||||
global_settings.PublicIPServices[cfg.Network] = cfg.PublicIPService
|
||||
cfg.Node.Name = c.String("name")
|
||||
cfg.Node.Interface = c.String("interface")
|
||||
cfg.Node.Password = c.String("password")
|
||||
|
@@ -97,6 +97,9 @@ func startGoRoutines(wg *sync.WaitGroup) context.CancelFunc {
|
||||
logger.Log(0, "failed to start ", cfg.Node.Interface, "wg interface", err.Error())
|
||||
}
|
||||
server := cfg.Server.Server
|
||||
if cfg.PublicIPService != "" {
|
||||
config.PublicIPServices[server] = cfg.PublicIPService
|
||||
}
|
||||
if !serverSet[server] {
|
||||
// == subscribe to all nodes for each on machine ==
|
||||
serverSet[server] = true
|
||||
|
@@ -85,7 +85,7 @@ func JoinNetwork(cfg *config.ClientConfig, privateKey string) error {
|
||||
if cfg.Node.IsLocal == "yes" && cfg.Node.LocalAddress != "" {
|
||||
cfg.Node.Endpoint = cfg.Node.LocalAddress
|
||||
} else {
|
||||
cfg.Node.Endpoint, err = ncutils.GetPublicIP(cfg.PublicIPService)
|
||||
cfg.Node.Endpoint, err = ncutils.GetPublicIP()
|
||||
}
|
||||
if err != nil || cfg.Node.Endpoint == "" {
|
||||
logger.Log(0, "network:", cfg.Network, "error setting cfg.Node.Endpoint.")
|
||||
|
@@ -44,7 +44,7 @@ func checkin() {
|
||||
nodeCfg.Network = network
|
||||
nodeCfg.ReadConfig()
|
||||
if nodeCfg.Node.IsStatic != "yes" {
|
||||
extIP, err := ncutils.GetPublicIP(nodeCfg.PublicIPService)
|
||||
extIP, err := ncutils.GetPublicIP()
|
||||
if err != nil {
|
||||
logger.Log(1, "error encountered checking public ip addresses: ", err.Error())
|
||||
}
|
||||
|
5
netclient/global_settings/globalsettings.go
Normal file
5
netclient/global_settings/globalsettings.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package global_settings
|
||||
|
||||
// globalsettings - settings that are global in nature. Avoids circular dependencies between config loading and usage.
|
||||
|
||||
var PublicIPServices map[string]string
|
@@ -6,6 +6,7 @@ import (
|
||||
"encoding/gob"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gravitl/netmaker/netclient/global_settings"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
@@ -126,14 +127,15 @@ func IsEmptyRecord(err error) bool {
|
||||
}
|
||||
|
||||
// GetPublicIP - gets public ip
|
||||
func GetPublicIP(publicIpService string) (string, error) {
|
||||
func GetPublicIP() (string, error) {
|
||||
|
||||
iplist := []string{"https://ip.server.gravitl.com", "https://ifconfig.me", "https://api.ipify.org", "https://ipinfo.io/ip"}
|
||||
if publicIpService != "" {
|
||||
logger.Log(3, "User (config file) provided public IP service is", publicIpService)
|
||||
|
||||
for network, ipService := range global_settings.PublicIPServices {
|
||||
logger.Log(3, "User provided public IP service defined for network", network, "is", ipService)
|
||||
|
||||
// prepend the user-specified service so it's checked first
|
||||
iplist = append([]string{publicIpService}, iplist...)
|
||||
iplist = append([]string{ipService}, iplist...)
|
||||
}
|
||||
|
||||
endpoint := ""
|
||||
|
Reference in New Issue
Block a user