diff --git a/logger/logger.go b/logger/logger.go index 6ffd6ad0..b01ffc65 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -6,6 +6,7 @@ import ( "sort" "strconv" "strings" + "sync" "time" ) @@ -36,6 +37,9 @@ func ResetLogs() { // Log - handles adding logs func Log(verbosity int, message ...string) { + var mu sync.Mutex + mu.Lock() + defer mu.Unlock() var currentTime = time.Now() var currentMessage = makeString(message...) if int32(verbosity) <= getVerbose() && getVerbose() >= 0 { diff --git a/netclient/config/config.go b/netclient/config/config.go index fb602bfa..f27d98f6 100644 --- a/netclient/config/config.go +++ b/netclient/config/config.go @@ -119,7 +119,8 @@ func ModConfig(node *models.Node) error { modconfig.Node = (*node) modconfig.NetworkSettings = node.NetworkSettings - log.Printf("%v \n", modconfig) + log.Printf("%v \n", node.NetworkSettings) + log.Printf("%v \n", modconfig.NetworkSettings) err = Write(&modconfig, network) return err } diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 56b35265..07336940 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -59,10 +59,11 @@ func Daemon() error { // SetupMQTT creates a connection to broker and return client func SetupMQTT(cfg *config.ClientConfig) mqtt.Client { opts := mqtt.NewClientOptions() - for i, server := range cfg.Node.NetworkSettings.DefaultServerAddrs { + for _, server := range cfg.Node.NetworkSettings.DefaultServerAddrs { if server.Address != "" && server.IsLeader { - ncutils.Log(fmt.Sprintf("adding server (%d) to listen on network %s \n", (i + 1), cfg.Node.Network)) + ncutils.Log(fmt.Sprintf("adding server (%s) to listen on network %s \n", server.Address, cfg.Node.Network)) opts.AddBroker(server.Address + ":1883") + break } } opts.SetDefaultPublishHandler(All) diff --git a/netclient/functions/join.go b/netclient/functions/join.go index b37bf24c..7004941b 100644 --- a/netclient/functions/join.go +++ b/netclient/functions/join.go @@ -7,6 +7,7 @@ import ( "fmt" "log" "os/exec" + "runtime" "github.com/google/uuid" nodepb "github.com/gravitl/netmaker/grpc" @@ -101,8 +102,7 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { // make sure name is appropriate, if not, give blank name cfg.Node.Name = formatName(cfg.Node) // differentiate between client/server here - var node models.Node // fill this node with appropriate calls - postnode := &models.Node{ + var node = models.Node{ Password: cfg.Node.Password, ID: cfg.Node.ID, MacAddress: cfg.Node.MacAddress, @@ -124,45 +124,18 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { UDPHolePunch: cfg.Node.UDPHolePunch, } - if cfg.Node.IsServer != "yes" { - ncutils.Log("joining " + cfg.Network + " at " + cfg.Server.GRPCAddress) - var wcclient nodepb.NodeServiceClient + ncutils.Log("joining " + cfg.Network + " at " + cfg.Server.GRPCAddress) + var wcclient nodepb.NodeServiceClient - conn, err := grpc.Dial(cfg.Server.GRPCAddress, - ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL)) + conn, err := grpc.Dial(cfg.Server.GRPCAddress, + ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL)) - if err != nil { - log.Fatalf("Unable to establish client connection to "+cfg.Server.GRPCAddress+": %v", err) - } - defer conn.Close() - wcclient = nodepb.NewNodeServiceClient(conn) - - if err = config.ModConfig(postnode); err != nil { - return err - } - data, err := json.Marshal(postnode) - if err != nil { - return err - } - // Create node on server - res, err := wcclient.CreateNode( - context.TODO(), - &nodepb.Object{ - Data: string(data), - Type: nodepb.NODE_TYPE, - }, - ) - if err != nil { - return err - } - ncutils.PrintLog("node created on remote server...updating configs", 1) - - nodeData := res.Data - if err = json.Unmarshal([]byte(nodeData), &node); err != nil { - return err - } - log.Printf("%v \n", nodeData) + if err != nil { + log.Fatalf("Unable to establish client connection to "+cfg.Server.GRPCAddress+": %v", err) } + defer conn.Close() + wcclient = nodepb.NewNodeServiceClient(conn) + // log.Printf("%v \n", nodeData) // get free port based on returned default listen port node.ListenPort, err = ncutils.GetFreePort(node.ListenPort) @@ -183,33 +156,48 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { cfg.Node.IsStatic = "yes" } - if node.IsServer != "yes" { // == handle client side == - cfg.Node = node - err = config.ModConfig(&node) - if err != nil { - return err - } - err = wireguard.StorePrivKey(privateKey, cfg.Network) - if err != nil { - return err - } - if node.IsPending == "yes" { - ncutils.Log("Node is marked as PENDING.") - ncutils.Log("Awaiting approval from Admin before configuring WireGuard.") - if cfg.Daemon != "off" { - return daemon.InstallDaemon(cfg) - } - } - // pushing any local changes to server before starting wireguard - err = Push(cfg.Network) - if err != nil { - return err - } - // attempt to make backup - if err = config.SaveBackup(node.Network); err != nil { - ncutils.Log("failed to make backup, node will not auto restore if config is corrupted") + err = wireguard.StorePrivKey(privateKey, cfg.Network) + if err != nil { + return err + } + if node.IsPending == "yes" { + ncutils.Log("Node is marked as PENDING.") + ncutils.Log("Awaiting approval from Admin before configuring WireGuard.") + if cfg.Daemon != "off" { + return daemon.InstallDaemon(cfg) } } + data, err := json.Marshal(&node) + if err != nil { + return err + } + // Create node on server + res, err := wcclient.CreateNode( + context.TODO(), + &nodepb.Object{ + Data: string(data), + Type: nodepb.NODE_TYPE, + }, + ) + if err != nil { + return err + } + ncutils.PrintLog("node created on remote server...updating configs", 1) + + nodeData := res.Data + if err = json.Unmarshal([]byte(nodeData), &node); err != nil { + return err + } + node.OS = runtime.GOOS + cfg.Node = node + err = config.ModConfig(&node) + if err != nil { + return err + } + // attempt to make backup + if err = config.SaveBackup(node.Network); err != nil { + ncutils.Log("failed to make backup, node will not auto restore if config is corrupted") + } ncutils.Log("retrieving peers") peers, hasGateway, gateways, err := server.GetPeers(node.MacAddress, cfg.Network, cfg.Server.GRPCAddress, node.IsDualStack == "yes", node.IsIngressGateway == "yes", node.IsServer == "yes")