diff --git a/netclient/command/commands.go b/netclient/command/commands.go index 4b07c26f..6128b257 100644 --- a/netclient/command/commands.go +++ b/netclient/command/commands.go @@ -7,16 +7,11 @@ import ( "github.com/gravitl/netmaker/netclient/daemon" "github.com/gravitl/netmaker/netclient/functions" "github.com/gravitl/netmaker/netclient/ncutils" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) // JoinCommsNetwork -- Join the message queue comms network func JoinCommsNetwork(cfg config.ClientConfig) error { - key, err := wgtypes.GeneratePrivateKey() - if err != nil { - return err - } - if err := functions.JoinNetwork(cfg, key.PublicKey().String()); err != nil { + if err := functions.JoinNetwork(cfg, "", true); err != nil { return err } return nil @@ -28,26 +23,32 @@ func Join(cfg config.ClientConfig, privateKey string) error { //check if comms network exists var commsCfg config.ClientConfig commsCfg.Network = cfg.Server.CommsNetwork + commsCfg.Node.Network = cfg.Server.CommsNetwork + commsCfg.Server.AccessKey = cfg.Server.AccessKey + commsCfg.Server.GRPCAddress = cfg.Server.GRPCAddress + commsCfg.Server.GRPCSSL = cfg.Server.GRPCSSL + commsCfg.Server.CoreDNSAddr = cfg.Server.CoreDNSAddr commsCfg.ReadConfig() if commsCfg.Node.Name == "" { if err := JoinCommsNetwork(commsCfg); err != nil { ncutils.Log("could not join comms network " + err.Error()) return err } - } - //ensure comms network is reachable - if err := functions.PingServer(&commsCfg); err != nil { - if err := functions.LeaveNetwork(commsCfg.Network); err != nil { - ncutils.Log("could not leave comms network " + err.Error()) - return err - } - if err := JoinCommsNetwork(commsCfg); err != nil { - ncutils.Log("could not join comms network " + err.Error()) - return err + } else { // check if comms is currently reachable + if err := functions.PingServer(&commsCfg); err != nil { + if err := functions.LeaveNetwork(commsCfg.Network); err != nil { + ncutils.Log("could not leave comms network " + err.Error()) + return err + } + if err := JoinCommsNetwork(commsCfg); err != nil { + ncutils.Log("could not join comms network " + err.Error()) + return err + } } } + //join network - err = functions.JoinNetwork(cfg, privateKey) + err = functions.JoinNetwork(cfg, privateKey, false) if err != nil && !cfg.DebugOn { if !strings.Contains(err.Error(), "ALREADY_INSTALLED") { ncutils.PrintLog("error installing: "+err.Error(), 1) diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 3857cff8..ca9303ca 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -126,7 +126,16 @@ func setupMQTT(publish bool, networkName string) mqtt.Client { opts.SetWriteTimeout(time.Minute) opts.SetOnConnectHandler(func(client mqtt.Client) { if !publish { - SetSubscriptions(client, cfg) + networks, err := ncutils.GetSystemNetworks() + if err != nil { + ncutils.Log("error retriving networks " + err.Error()) + } + for _, network := range networks { + var currConf config.ClientConfig + currConf.Network = network + currConf.ReadConfig() + SetSubscriptions(client, &currConf) + } } }) opts.SetOrderMatters(true) @@ -182,29 +191,20 @@ func SetSubscriptions(client mqtt.Client, cfg *config.ClientConfig) { } ncutils.Log("subscribed to all topics for debugging purposes") } - networks, err := ncutils.GetSystemNetworks() - if err != nil { - ncutils.Log("error retriving networks " + err.Error()) - } - for _, network := range networks { - var cfg config.ClientConfig - cfg.Network = network - cfg.ReadConfig() - if token := client.Subscribe(fmt.Sprintf("update/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, mqtt.MessageHandler(NodeUpdate)); token.Wait() && token.Error() != nil { - ncutils.Log(token.Error().Error()) - return - } - if cfg.DebugOn { - ncutils.Log(fmt.Sprintf("subscribed to node updates for node %s update/%s/%s", cfg.Node.Name, cfg.Node.Network, cfg.Node.ID)) - } - if token := client.Subscribe(fmt.Sprintf("peers/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, mqtt.MessageHandler(UpdatePeers)); token.Wait() && token.Error() != nil { - ncutils.Log(token.Error().Error()) - return - } - if cfg.DebugOn { - ncutils.Log(fmt.Sprintf("subscribed to peer updates for node %s peers/%s/%s", cfg.Node.Name, cfg.Node.Network, cfg.Node.ID)) - } + if token := client.Subscribe(fmt.Sprintf("update/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, mqtt.MessageHandler(NodeUpdate)); token.Wait() && token.Error() != nil { + ncutils.Log(token.Error().Error()) + return + } + if cfg.DebugOn { + ncutils.Log(fmt.Sprintf("subscribed to node updates for node %s update/%s/%s", cfg.Node.Name, cfg.Node.Network, cfg.Node.ID)) + } + if token := client.Subscribe(fmt.Sprintf("peers/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, mqtt.MessageHandler(UpdatePeers)); token.Wait() && token.Error() != nil { + ncutils.Log(token.Error().Error()) + return + } + if cfg.DebugOn { + ncutils.Log(fmt.Sprintf("subscribed to peer updates for node %s peers/%s/%s", cfg.Node.Name, cfg.Node.Network, cfg.Node.ID)) } } diff --git a/netclient/functions/join.go b/netclient/functions/join.go index e5226811..5274d682 100644 --- a/netclient/functions/join.go +++ b/netclient/functions/join.go @@ -25,7 +25,7 @@ import ( ) // JoinNetwork - helps a client join a network -func JoinNetwork(cfg config.ClientConfig, privateKey string) error { +func JoinNetwork(cfg config.ClientConfig, privateKey string, iscomms bool) error { if cfg.Node.Network == "" { return errors.New("no network provided") } @@ -250,16 +250,18 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { } } - if cfg.Daemon != "off" { - err = daemon.InstallDaemon(cfg) - } - if err != nil { - return err - } else { - daemon.Restart() + if !iscomms { + if cfg.Daemon != "off" { + err = daemon.InstallDaemon(cfg) + } + if err != nil { + return err + } else { + daemon.Restart() + } } - return err + return nil } // format name appropriately. Set to blank on failure