diff --git a/controllers/node.go b/controllers/node.go index 602c0294..460b84df 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -2,6 +2,7 @@ package controller import ( "encoding/json" + "fmt" "net/http" "strings" @@ -584,6 +585,10 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "badrequest")) return } + if isServer(&node) { + returnErrorResponse(w, r, formatError(fmt.Errorf("cannot delete server node"), "badrequest")) + return + } err = logic.DeleteNodeByID(&node, false) if err != nil { returnErrorResponse(w, r, formatError(err, "internal")) diff --git a/mq/mq.go b/mq/mq.go index 7d32bf81..6aa24a6d 100644 --- a/mq/mq.go +++ b/mq/mq.go @@ -15,6 +15,7 @@ import ( "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/servercfg" + "github.com/gravitl/netmaker/serverctl" ) const KEEPALIVE_TIMEOUT = 10 //timeout in seconds @@ -214,6 +215,10 @@ func Keepalive(ctx context.Context) { } else { logger.Log(2, "keepalive sent for network", network.NetID) } + err = serverctl.SyncServerNetwork(&serverNode) + if err != nil { + logger.Log(1, "error syncing server network", err.Error()) + } } client.Disconnect(MQ_DISCONNECT) } diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 341d8430..ed6a20db 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -15,7 +15,6 @@ import ( "time" mqtt "github.com/eclipse/paho.mqtt.golang" - "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/netclient/auth" "github.com/gravitl/netmaker/netclient/config" @@ -78,16 +77,17 @@ func SetupMQTT(cfg *config.ClientConfig) mqtt.Client { for { //if after 12 seconds, try a gRPC pull on the last try if time.Now().After(tperiod) { + ncutils.Log("running pull for " + cfg.Node.Network) _, err := Pull(cfg.Node.Network, true) if err != nil { - log.Fatal(0, "could not connect to broker, exiting ...", err.Error()) + log.Fatal("[netclient] could not run pull, exiting ...", err.Error()) } time.Sleep(2 * time.Second) } if token := client.Connect(); token.Wait() && token.Error() != nil { - logger.Log(1, "unable to connect to broker, retrying ...") + ncutils.Log("unable to connect to broker, retrying ...") if time.Now().After(tperiod) { - log.Fatal(0, "could not connect to broker, exiting ...", token.Error()) + log.Fatal("[netclient] could not connect to broker, exiting ...", token.Error()) } } else { break @@ -103,22 +103,28 @@ func MessageQueue(ctx context.Context, network string) { var cfg config.ClientConfig cfg.Network = network cfg.ReadConfig() - ncutils.Log("daemon started for network:" + network) + ncutils.Log("pulling latest config for " + cfg.Network) + _, err := Pull(cfg.Network, true) + if err != nil { + log.Fatal("[netclient] ", err.Error()) + } + time.Sleep(2 * time.Second) + ncutils.Log("daemon started for network: " + network) client := SetupMQTT(&cfg) if cfg.DebugOn { if token := client.Subscribe("#", 0, nil); token.Wait() && token.Error() != nil { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } ncutils.Log("subscribed to all topics for debugging purposes") } if token := client.Subscribe(fmt.Sprintf("update/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, mqtt.MessageHandler(NodeUpdate)); token.Wait() && token.Error() != nil { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } 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 { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } 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)) @@ -130,7 +136,7 @@ func MessageQueue(ctx context.Context, network string) { } if server.Address != "" { if token := client.Subscribe("serverkeepalive/"+id, 0, mqtt.MessageHandler(ServerKeepAlive)); token.Wait() && token.Error() != nil { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } if cfg.DebugOn { ncutils.Log("subscribed to server keepalives for server " + id) @@ -347,13 +353,13 @@ func Resubscribe(client mqtt.Client, cfg *config.ClientConfig) error { client.Disconnect(250) client = SetupMQTT(cfg) if token := client.Subscribe(fmt.Sprintf("update/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, NodeUpdate); token.Wait() && token.Error() != nil { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } if cfg.DebugOn { ncutils.Log("subscribed to node updates for node " + cfg.Node.Name + " update/" + cfg.Node.ID) } if token := client.Subscribe(fmt.Sprintf("peers/%s/%s", cfg.Node.Network, cfg.Node.ID), 0, UpdatePeers); token.Wait() && token.Error() != nil { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } var id string for _, server := range cfg.NetworkSettings.DefaultServerAddrs { @@ -362,7 +368,7 @@ func Resubscribe(client mqtt.Client, cfg *config.ClientConfig) error { } if server.Address != "" { if token := client.Subscribe("serverkeepalive/"+id, 0, mqtt.MessageHandler(ServerKeepAlive)); token.Wait() && token.Error() != nil { - log.Fatal(token.Error()) + log.Fatal("[netclient] ", token.Error()) } if cfg.DebugOn { ncutils.Log("subscribed to server keepalives for server " + id)