mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-17 14:24:30 +08:00
redo register on pull
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package command
|
package command
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/ed25519"
|
||||||
|
"crypto/rand"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
@@ -8,6 +10,7 @@ import (
|
|||||||
"github.com/gravitl/netmaker/netclient/daemon"
|
"github.com/gravitl/netmaker/netclient/daemon"
|
||||||
"github.com/gravitl/netmaker/netclient/functions"
|
"github.com/gravitl/netmaker/netclient/functions"
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
|
"github.com/gravitl/netmaker/tls"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Join - join command to run from cli
|
// Join - join command to run from cli
|
||||||
@@ -78,7 +81,7 @@ func Pull(cfg *config.ClientConfig) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, network := range networks {
|
for _, network := range networks {
|
||||||
_, err = functions.Pull(network, true, true)
|
_, err = functions.Pull(network, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(1, "Error pulling network config for network: ", network, "\n", err.Error())
|
logger.Log(1, "Error pulling network config for network: ", network, "\n", err.Error())
|
||||||
} else {
|
} else {
|
||||||
@@ -87,7 +90,20 @@ func Pull(cfg *config.ClientConfig) error {
|
|||||||
}
|
}
|
||||||
err = nil
|
err = nil
|
||||||
} else {
|
} else {
|
||||||
_, err = functions.Pull(cfg.Network, true, true)
|
|
||||||
|
_, err = functions.Pull(cfg.Network, true)
|
||||||
|
_, newKey, kerr := ed25519.GenerateKey(rand.Reader)
|
||||||
|
if kerr == nil {
|
||||||
|
if kerr := tls.SaveKey(ncutils.GetNetclientPath(), "/client.key", newKey); err != nil {
|
||||||
|
logger.Log(0, "error saving key", kerr.Error())
|
||||||
|
} else {
|
||||||
|
if kerr = functions.RegisterWithServer(&newKey, cfg); err != nil {
|
||||||
|
logger.Log(0, "registration error", kerr.Error())
|
||||||
|
} else {
|
||||||
|
daemon.Restart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
logger.Log(1, "reset network and peer configs")
|
logger.Log(1, "reset network and peer configs")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@@ -236,7 +236,7 @@ func setupMQTT(cfg *config.ClientConfig, server string, publish bool) mqtt.Clien
|
|||||||
opts.SetResumeSubs(true)
|
opts.SetResumeSubs(true)
|
||||||
opts.SetConnectionLostHandler(func(c mqtt.Client, e error) {
|
opts.SetConnectionLostHandler(func(c mqtt.Client, e error) {
|
||||||
logger.Log(0, "detected broker connection lost, running pull for ", cfg.Node.Network)
|
logger.Log(0, "detected broker connection lost, running pull for ", cfg.Node.Network)
|
||||||
_, err := Pull(cfg.Node.Network, true, false)
|
_, err := Pull(cfg.Node.Network, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, "could not run pull, server unreachable: ", err.Error())
|
logger.Log(0, "could not run pull, server unreachable: ", err.Error())
|
||||||
logger.Log(0, "waiting to retry...")
|
logger.Log(0, "waiting to retry...")
|
||||||
@@ -250,7 +250,7 @@ func setupMQTT(cfg *config.ClientConfig, server string, publish bool) mqtt.Clien
|
|||||||
//if after 12 seconds, try a pull on the last try
|
//if after 12 seconds, try a pull on the last try
|
||||||
if time.Now().After(tperiod) {
|
if time.Now().After(tperiod) {
|
||||||
logger.Log(0, "running pull for ", cfg.Node.Network)
|
logger.Log(0, "running pull for ", cfg.Node.Network)
|
||||||
_, err := Pull(cfg.Node.Network, true, false)
|
_, err := Pull(cfg.Node.Network, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, "could not run pull, exiting ", cfg.Node.Network, " setup: ", err.Error())
|
logger.Log(0, "could not run pull, exiting ", cfg.Node.Network, " setup: ", err.Error())
|
||||||
return client
|
return client
|
||||||
@@ -263,7 +263,7 @@ func setupMQTT(cfg *config.ClientConfig, server string, publish bool) mqtt.Clien
|
|||||||
logger.Log(0, "could not connect to broker, exiting ", cfg.Node.Network, " setup: ", token.Error().Error())
|
logger.Log(0, "could not connect to broker, exiting ", cfg.Node.Network, " setup: ", token.Error().Error())
|
||||||
if strings.Contains(token.Error().Error(), "connectex") || strings.Contains(token.Error().Error(), "i/o timeout") {
|
if strings.Contains(token.Error().Error(), "connectex") || strings.Contains(token.Error().Error(), "i/o timeout") {
|
||||||
logger.Log(0, "connection issue detected.. pulling and restarting daemon")
|
logger.Log(0, "connection issue detected.. pulling and restarting daemon")
|
||||||
Pull(cfg.Node.Network, true, false)
|
Pull(cfg.Node.Network, true)
|
||||||
daemon.Restart()
|
daemon.Restart()
|
||||||
}
|
}
|
||||||
return client
|
return client
|
||||||
@@ -296,7 +296,7 @@ func initialPull(network string) {
|
|||||||
if !fileInfo.ModTime().IsZero() && time.Now().After(fileInfo.ModTime().Add(time.Minute)) {
|
if !fileInfo.ModTime().IsZero() && time.Now().After(fileInfo.ModTime().Add(time.Minute)) {
|
||||||
sleepTime := 2
|
sleepTime := 2
|
||||||
for {
|
for {
|
||||||
_, err := Pull(network, true, false)
|
_, err := Pull(network, true)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@@ -105,7 +105,7 @@ func Hello(nodeCfg *config.ClientConfig) {
|
|||||||
if err := publish(nodeCfg, fmt.Sprintf("ping/%s", nodeCfg.Node.ID), []byte(ncutils.Version), 0); err != nil {
|
if err := publish(nodeCfg, fmt.Sprintf("ping/%s", nodeCfg.Node.ID), []byte(ncutils.Version), 0); err != nil {
|
||||||
logger.Log(0, fmt.Sprintf("error publishing ping, %v", err))
|
logger.Log(0, fmt.Sprintf("error publishing ping, %v", err))
|
||||||
logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect")
|
logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect")
|
||||||
_, err := Pull(nodeCfg.Node.Network, true, false)
|
_, err := Pull(nodeCfg.Node.Network, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, "could not run pull on "+nodeCfg.Node.Network+", error: "+err.Error())
|
logger.Log(0, "could not run pull on "+nodeCfg.Node.Network+", error: "+err.Error())
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
package functions
|
package functions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ed25519"
|
|
||||||
"crypto/rand"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -14,16 +12,14 @@ import (
|
|||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/netclient/config"
|
"github.com/gravitl/netmaker/netclient/config"
|
||||||
"github.com/gravitl/netmaker/netclient/daemon"
|
|
||||||
"github.com/gravitl/netmaker/netclient/local"
|
"github.com/gravitl/netmaker/netclient/local"
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
"github.com/gravitl/netmaker/netclient/wireguard"
|
"github.com/gravitl/netmaker/netclient/wireguard"
|
||||||
"github.com/gravitl/netmaker/tls"
|
|
||||||
//homedir "github.com/mitchellh/go-homedir"
|
//homedir "github.com/mitchellh/go-homedir"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Pull - pulls the latest config from the server, if manual it will overwrite
|
// Pull - pulls the latest config from the server, if manual it will overwrite
|
||||||
func Pull(network string, iface bool, register bool) (*models.Node, error) {
|
func Pull(network string, iface bool) (*models.Node, error) {
|
||||||
cfg, err := config.ReadConfig(network)
|
cfg, err := config.ReadConfig(network)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -72,7 +68,7 @@ func Pull(network string, iface bool, register bool) (*models.Node, error) {
|
|||||||
} else {
|
} else {
|
||||||
if err = wireguard.SetWGConfig(network, true); err != nil {
|
if err = wireguard.SetWGConfig(network, true); err != nil {
|
||||||
if errors.Is(err, os.ErrNotExist) && !ncutils.IsFreeBSD() {
|
if errors.Is(err, os.ErrNotExist) && !ncutils.IsFreeBSD() {
|
||||||
return Pull(network, true, false)
|
return Pull(network, true)
|
||||||
} else {
|
} else {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -82,20 +78,5 @@ func Pull(network string, iface bool, register bool) (*models.Node, error) {
|
|||||||
if bkupErr != nil {
|
if bkupErr != nil {
|
||||||
logger.Log(0, "unable to update backup file")
|
logger.Log(0, "unable to update backup file")
|
||||||
}
|
}
|
||||||
//generate new private key and re-register with server
|
|
||||||
if register {
|
|
||||||
_, newKey, err := ed25519.GenerateKey(rand.Reader)
|
|
||||||
if err != nil {
|
|
||||||
return &resNode, err
|
|
||||||
}
|
|
||||||
if err := tls.SaveKey(ncutils.GetNetclientPath(), "/client.key", newKey); err != nil {
|
|
||||||
return &resNode, err
|
|
||||||
}
|
|
||||||
if err = RegisterWithServer(&newKey, cfg); err != nil {
|
|
||||||
return &resNode, err
|
|
||||||
}
|
|
||||||
daemon.Restart()
|
|
||||||
}
|
|
||||||
|
|
||||||
return &resNode, err
|
return &resNode, err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user