Merge pull request #797 from gravitl/feature_v0.11.0_cleanup_env

adding random comms network name logic
This commit is contained in:
dcarns 2022-02-18 15:33:03 -05:00 committed by GitHub
commit 11b2e2c179
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 95 additions and 119 deletions

View file

@ -53,15 +53,12 @@ type ServerConfig struct {
MessageQueueBackend string `yaml:"messagequeuebackend"`
ClientMode string `yaml:"clientmode"`
DNSMode string `yaml:"dnsmode"`
SplitDNS string `yaml:"splitdns"`
DisableRemoteIPCheck string `yaml:"disableremoteipcheck"`
DisableDefaultNet string `yaml:"disabledefaultnet"`
GRPCSSL string `yaml:"grpcssl"`
Version string `yaml:"version"`
SQLConn string `yaml:"sqlconn"`
Platform string `yaml:"platform"`
Database string `yaml:"database"`
CheckinInterval string `yaml:"checkininterval"`
DefaultNodeLimit int32 `yaml:"defaultnodelimit"`
Verbosity int32 `yaml:"verbosity"`
ServerCheckinInterval int64 `yaml:"servercheckininterval"`
@ -78,6 +75,7 @@ type ServerConfig struct {
PortForwardServices string `yaml:"portforwardservices"`
HostNetwork string `yaml:"hostnetwork"`
CommsCIDR string `yaml:"commscidr"`
MQPort string `yaml:"mqport"`
}
// SQLConfig - Generic SQL Config

View file

@ -7,6 +7,7 @@ import (
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/serverctl"
"github.com/stretchr/testify/assert"
)
@ -300,4 +301,5 @@ func createNet() {
if err != nil {
logic.CreateNetwork(network)
}
serverctl.InitializeCommsNetwork()
}

View file

@ -49,12 +49,17 @@ func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models
netID := network.NetID
commsNetID, err := FetchCommsNetID()
if err != nil {
return models.AccessKey{}, errors.New("could not retrieve comms netid")
}
var accessToken models.AccessToken
s := servercfg.GetServerConfig()
servervals := models.ServerConfig{
GRPCConnString: s.GRPCConnString,
GRPCSSL: s.GRPCSSL,
CheckinInterval: s.CheckinInterval,
GRPCConnString: s.GRPCConnString,
GRPCSSL: s.GRPCSSL,
CommsNetwork: commsNetID,
}
accessToken.ServerConfig = servervals
accessToken.ClientConfig.Network = netID

View file

@ -8,7 +8,6 @@ import (
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
"github.com/txn2/txeh"
)
@ -39,9 +38,12 @@ func SetDNS() error {
if err != nil {
return err
}
/* if something goes wrong with server DNS, check here
// commented out bc we were not using IsSplitDNS
if servercfg.IsSplitDNS() {
err = SetCorefile(corefilestring)
}
*/
return err
}

View file

@ -72,3 +72,32 @@ func StoreJWTSecret(privateKey string) error {
}
return database.Insert("nm-jwt-secret", string(data), database.SERVERCONF_TABLE_NAME)
}
// FetchCommsNetID - fetches comms netid from db
func FetchCommsNetID() (string, error) {
var dbData string
var err error
var fetchedData = serverData{}
dbData, err = database.FetchRecord(database.SERVERCONF_TABLE_NAME, "nm-comms-id")
if err != nil {
return "", err
}
err = json.Unmarshal([]byte(dbData), &fetchedData)
if err != nil {
return "", err
}
return fetchedData.PrivateKey, nil
}
// StoreCommsNetID - stores server comms network netid if needed
func StoreCommsNetID(netid string) error {
var newData = serverData{}
var err error
var data []byte
newData.PrivateKey = netid
data, err = json.Marshal(&newData)
if err != nil {
return err
}
return database.Insert("nm-comms-id", string(data), database.SERVERCONF_TABLE_NAME)
}

View file

@ -12,7 +12,7 @@ type ClientConfig struct {
}
type ServerConfig struct {
GRPCConnString string `json:"grpcconn"`
GRPCSSL string `json:"grpcssl"`
CheckinInterval string `json:"checkininterval"`
GRPCConnString string `json:"grpcconn"`
GRPCSSL string `json:"grpcssl"`
CommsNetwork string `json:"commsnetwork"`
}

View file

@ -1,7 +1,6 @@
package command
import (
"strconv"
"strings"
"github.com/gravitl/netmaker/netclient/config"
@ -90,23 +89,6 @@ func Join(cfg config.ClientConfig, privateKey string) error {
return err
}
func getWindowsInterval() int {
interval := 15
networks, err := ncutils.GetSystemNetworks()
if err != nil {
return interval
}
cfg, err := config.ReadConfig(networks[0])
if err != nil {
return interval
}
netint, err := strconv.Atoi(cfg.Server.CheckinInterval)
if err == nil && netint != 0 {
interval = netint
}
return interval
}
// Leave - runs the leave command from cli
func Leave(cfg config.ClientConfig) error {
err := functions.LeaveNetwork(cfg.Network)

View file

@ -15,12 +15,6 @@ import (
"gopkg.in/yaml.v3"
)
// GlobalConfig - struct for handling IntClients currently
type GlobalConfig struct {
GRPCWireGuard string `yaml:"grpcwg"`
Client models.IntClient
}
// ClientConfig - struct for dealing with client configuration
type ClientConfig struct {
Server ServerConfig `yaml:"server"`
@ -34,12 +28,10 @@ type ClientConfig struct {
// ServerConfig - struct for dealing with the server information for a netclient
type ServerConfig struct {
CoreDNSAddr string `yaml:"corednsaddr"`
GRPCAddress string `yaml:"grpcaddress"`
AccessKey string `yaml:"accesskey"`
GRPCSSL string `yaml:"grpcssl"`
GRPCWireGuard string `yaml:"grpcwg"`
CheckinInterval string `yaml:"checkininterval"`
CoreDNSAddr string `yaml:"corednsaddr"`
GRPCAddress string `yaml:"grpcaddress"`
AccessKey string `yaml:"accesskey"`
GRPCSSL string `yaml:"grpcssl"`
}
// Write - writes the config of a client to disk
@ -183,7 +175,6 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
cfg.Server.AccessKey = accesstoken.ClientConfig.Key
cfg.Node.LocalRange = accesstoken.ClientConfig.LocalRange
cfg.Server.GRPCSSL = accesstoken.ServerConfig.GRPCSSL
cfg.Server.CheckinInterval = accesstoken.ServerConfig.CheckinInterval
if c.String("grpcserver") != "" {
cfg.Server.GRPCAddress = c.String("grpcserver")
}
@ -203,12 +194,6 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
if c.String("corednsaddr") != "" {
cfg.Server.CoreDNSAddr = c.String("corednsaddr")
}
if c.String("grpcwg") != "" {
cfg.Server.GRPCWireGuard = c.String("grpcwg")
}
if c.String("checkininterval") != "" {
cfg.Server.CheckinInterval = c.String("checkininterval")
}
} else {
cfg.Server.GRPCAddress = c.String("grpcserver")
@ -216,10 +201,8 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
cfg.Network = c.String("network")
cfg.Node.Network = c.String("network")
cfg.Node.LocalRange = c.String("localrange")
cfg.Server.GRPCWireGuard = c.String("grpcwg")
cfg.Server.GRPCSSL = c.String("grpcssl")
cfg.Server.CoreDNSAddr = c.String("corednsaddr")
cfg.Server.CheckinInterval = c.String("checkininterval")
}
cfg.Node.Name = c.String("name")
cfg.Node.Interface = c.String("interface")
@ -246,10 +229,6 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
cfg.Node.UDPHolePunch = c.String("udpholepunch")
cfg.Node.MTU = int32(c.Int("mtu"))
if cfg.Server.CheckinInterval == "" {
cfg.Server.CheckinInterval = "15"
}
return cfg, privateKey, nil
}

View file

@ -13,18 +13,13 @@ func InstallDaemon(cfg config.ClientConfig) error {
os := runtime.GOOS
var err error
interval := "15"
if cfg.Server.CheckinInterval != "" {
interval = cfg.Server.CheckinInterval
}
switch os {
case "windows":
err = SetupWindowsDaemon()
case "darwin":
err = SetupMacDaemon(interval)
err = SetupMacDaemon()
case "linux":
err = SetupSystemDDaemon(interval)
err = SetupSystemDDaemon()
case "freebsd":
err = SetupFreebsdDaemon()
default:

View file

@ -1,7 +1,6 @@
package daemon
import (
"fmt"
"log"
"os"
"path/filepath"
@ -14,7 +13,7 @@ const MAC_SERVICE_NAME = "com.gravitl.netclient"
const MAC_EXEC_DIR = "/usr/local/bin/"
// SetupMacDaemon - Creates a daemon service from the netclient under LaunchAgents for MacOS
func SetupMacDaemon(interval string) error {
func SetupMacDaemon() error {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
@ -34,7 +33,7 @@ func SetupMacDaemon(interval string) error {
if os.IsNotExist(errN) {
os.Mkdir("~/Library/LaunchAgents", 0755)
}
err = CreateMacService(MAC_SERVICE_NAME, interval)
err = CreateMacService(MAC_SERVICE_NAME)
if err != nil {
return err
}
@ -69,7 +68,7 @@ func StopLaunchD() {
}
// CreateMacService - Creates the mac service file for LaunchDaemons
func CreateMacService(servicename string, interval string) error {
func CreateMacService(servicename string) error {
_, err := os.Stat("/Library/LaunchDaemons")
if os.IsNotExist(err) {
os.Mkdir("/Library/LaunchDaemons", 0755)
@ -77,7 +76,7 @@ func CreateMacService(servicename string, interval string) error {
log.Println("couldnt find or create /Library/LaunchDaemons")
return err
}
daemonstring := MacDaemonString(interval)
daemonstring := MacDaemonString()
daemonbytes := []byte(daemonstring)
if !ncutils.FileExists("/Library/LaunchDaemons/com.gravitl.netclient.plist") {
@ -87,8 +86,8 @@ func CreateMacService(servicename string, interval string) error {
}
// MacDaemonString - the file contents for the mac netclient daemon service (launchdaemon)
func MacDaemonString(interval string) string {
return fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8'?>
func MacDaemonString() string {
return `<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\" >
<plist version='1.0'>
<dict>
@ -101,8 +100,6 @@ func MacDaemonString(interval string) string {
<key>StandardOutPath</key><string>/etc/netclient/com.gravitl.netclient.log</string>
<key>StandardErrorPath</key><string>/etc/netclient/com.gravitl.netclient.log</string>
<key>AbandonProcessGroup</key><true/>
<key>StartInterval</key>
<integer>%s</integer>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
@ -110,7 +107,7 @@ func MacDaemonString(interval string) string {
</dict>
</dict>
</plist>
`, interval)
`
}
// MacTemplateData - struct to represent the mac service

View file

@ -14,7 +14,7 @@ import (
const EXEC_DIR = "/sbin/"
// SetupSystemDDaemon - sets system daemon for supported machines
func SetupSystemDDaemon(interval string) error {
func SetupSystemDDaemon() error {
if ncutils.IsWindows() {
return nil

View file

@ -31,7 +31,8 @@ func GetServerConfig() config.ServerConfig {
cfg.CoreDNSAddr = GetCoreDNSAddr()
cfg.APIHost = GetAPIHost()
cfg.APIPort = GetAPIPort()
cfg.GRPCConnString = GetGRPCConnString()
cfg.APIPort = GetAPIPort()
cfg.MQPort = GetMQPort()
cfg.GRPCHost = GetGRPCHost()
cfg.GRPCPort = GetGRPCPort()
cfg.MasterKey = "(hidden)"
@ -39,8 +40,7 @@ func GetServerConfig() config.ServerConfig {
cfg.AllowedOrigin = GetAllowedOrigin()
cfg.RestBackend = "off"
cfg.NodeID = GetNodeID()
cfg.CheckinInterval = GetCheckinInterval()
cfg.ServerCheckinInterval = GetServerCheckinInterval()
cfg.MQPort = GetMQPort()
if IsRestBackend() {
cfg.RestBackend = "on"
}
@ -68,10 +68,6 @@ func GetServerConfig() config.ServerConfig {
if DisableRemoteIPCheck() {
cfg.DisableRemoteIPCheck = "on"
}
cfg.DisableDefaultNet = "off"
if DisableDefaultNet() {
cfg.DisableRemoteIPCheck = "on"
}
cfg.Database = GetDB()
cfg.Platform = GetPlatform()
cfg.Version = GetVersion()
@ -90,6 +86,7 @@ func GetServerConfig() config.ServerConfig {
cfg.Debug = GetDebug()
cfg.Telemetry = Telemetry()
cfg.ManageIPTables = ManageIPTables()
cfg.CommsCIDR = GetCommsCIDR()
services := strings.Join(GetPortForwardServiceList(), ",")
cfg.PortForwardServices = services
@ -177,17 +174,6 @@ func GetAPIPort() string {
return apiport
}
// GetCheckinInterval - get check in interval for nodes
func GetCheckinInterval() string {
seconds := "15"
if os.Getenv("CHECKIN_INTERVAL") != "" {
seconds = os.Getenv("CHECKIN_INTERVAL")
} else if config.Config.Server.CheckinInterval != "" {
seconds = config.Config.Server.CheckinInterval
}
return seconds
}
// GetDefaultNodeLimit - get node limit if one is set
func GetDefaultNodeLimit() int32 {
var limit int32
@ -254,6 +240,17 @@ func GetGRPCPort() string {
return grpcport
}
// GetMQPort - gets the mq port
func GetMQPort() string {
mqport := "1883"
if os.Getenv("MQ_PORT") != "" {
mqport = os.Getenv("MQ_PORT")
} else if config.Config.Server.MQPort != "" {
mqport = config.Config.Server.MQPort
}
return mqport
}
// GetGRPCPort - gets the grpc port
func GetCommsCIDR() string {
netrange := "172.242.0.0/16"
@ -455,21 +452,6 @@ func DisableRemoteIPCheck() bool {
return disabled
}
// DisableDefaultNet - disable default net
func DisableDefaultNet() bool {
disabled := false
if os.Getenv("DISABLE_DEFAULT_NET") != "" {
if os.Getenv("DISABLE_DEFAULT_NET") == "on" {
disabled = true
}
} else if config.Config.Server.DisableDefaultNet != "" {
if config.Config.Server.DisableDefaultNet == "on" {
disabled = true
}
}
return disabled
}
// GetPublicIP - gets public ip
func GetPublicIP() (string, error) {
@ -533,18 +515,7 @@ func GetSQLConn() string {
return sqlconn
}
// IsSplitDNS - checks if split dns is on
func IsSplitDNS() bool {
issplit := false
if os.Getenv("IS_SPLIT_DNS") == "yes" {
issplit = true
} else if config.Config.Server.SplitDNS == "yes" {
issplit = true
}
return issplit
}
// IsSplitDNS - checks if split dns is on
// IsHostNetwork - checks if running on host network
func IsHostNetwork() bool {
ishost := false
if os.Getenv("HOST_NETWORK") == "on" {

View file

@ -14,17 +14,19 @@ import (
"github.com/gravitl/netmaker/servercfg"
)
// COMMS_NETID - name of the comms network
var COMMS_NETID string
const (
// NETMAKER_BINARY_NAME - name of netmaker binary
NETMAKER_BINARY_NAME = "netmaker"
// COMMS_NETID - name of comms net
COMMS_NETID = "n37m8k3r"
)
// InitializeCommsNetwork - Check if comms network exists (for MQ, DNS, SSH traffic), if not, create
func InitializeCommsNetwork() error {
setCommsID()
_, err := logic.GetNetwork(COMMS_NETID)
if err != nil {
logger.Log(1, "comms net does not exist, creating")
@ -42,6 +44,20 @@ func InitializeCommsNetwork() error {
return nil
}
// SetJWTSecret - sets the jwt secret on server startup
func setCommsID() {
currentid, idErr := logic.FetchCommsNetID()
if idErr != nil {
commsid := logic.RandomString(8)
if err := logic.StoreCommsNetID(commsid); err != nil {
logger.FatalLog("something went wrong when configuring comms id")
}
COMMS_NETID = commsid
return
}
COMMS_NETID = currentid
}
// InitServerNetclient - intializes the server netclient
// 1. Check if config directory exists, if not attempt to make
// 2. Check current networks and run pull to get interface up to date in case of restart