ext client logic for peer updates

This commit is contained in:
afeiszli
2022-02-06 13:06:07 -05:00
parent 62d0a6a83a
commit f6b1711439
3 changed files with 47 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ import (
"github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/mq"
"github.com/skip2/go-qrcode" "github.com/skip2/go-qrcode"
) )
@@ -238,6 +239,10 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
return return
} }
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
err = mq.PublishExtPeerUpdate(nodeid)
if err != nil {
logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error())
}
} }
func updateExtClient(w http.ResponseWriter, r *http.Request) { func updateExtClient(w http.ResponseWriter, r *http.Request) {
@@ -289,6 +294,13 @@ func deleteExtClient(w http.ResponseWriter, r *http.Request) {
returnErrorResponse(w, r, formatError(err, "internal")) returnErrorResponse(w, r, formatError(err, "internal"))
return return
} }
/*
// we dont currently have logic to get the nodeid when we delete ext clients, apparently
err = mq.PublishExtPeerUpdate(nodeid)
if err != nil {
logger.Log("error setting ext peers on " + nodeid + ": " + err.Error())
}
*/
logger.Log(1, r.Header.Get("user"), logger.Log(1, r.Header.Get("user"),
"Deleted extclient client", params["clientid"], "from network", params["network"]) "Deleted extclient client", params["clientid"], "from network", params["network"])
returnSuccessResponse(w, r, params["clientid"]+" deleted.") returnSuccessResponse(w, r, params["clientid"]+" deleted.")

View File

@@ -601,6 +601,16 @@ func GetNetworkServerLocal(network string) (models.Node, error) {
return models.Node{}, errors.New("could not find node for local server") return models.Node{}, errors.New("could not find node for local server")
} }
// IsLocalServer - get network server node ID if exists
func IsLocalServer(node *models.Node) bool {
var islocal bool
local, err := GetNetworkServerLocal(node.Network)
if err != nil {
return islocal
}
return node.ID != "" && local.ID == node.ID
}
// validateServer - make sure servers dont change port or address // validateServer - make sure servers dont change port or address
func validateServer(currentNode, newNode *models.Node) bool { func validateServer(currentNode, newNode *models.Node) bool {
return (newNode.Address == currentNode.Address && return (newNode.Address == currentNode.Address &&

View File

@@ -133,6 +133,31 @@ func PublishPeerUpdate(newNode *models.Node) error {
return nil return nil
} }
// PublishPeerUpdate --- deterines and publishes a peer update to all the peers of a node
func PublishExtPeerUpdate(nodeid string) error {
node, err := logic.GetNodeByID(nodeid)
if logic.IsLocalServer(&node) {
if err = logic.ServerUpdate(&node, false); err != nil {
logger.Log(1, "server node:", node.ID, "failed to update peers with ext clients")
return err
} else {
return nil
}
}
if !servercfg.IsMessageQueueBackend() {
return nil
}
peerUpdate, err := logic.GetPeerUpdate(&node)
if err != nil {
return err
}
data, err := json.Marshal(&peerUpdate)
if err != nil {
return err
}
return publish(&node, fmt.Sprintf("peers/%s/%s", node.Network, node.ID), data)
}
// GetID -- decodes a message queue topic and returns the embedded node.ID // GetID -- decodes a message queue topic and returns the embedded node.ID
func GetID(topic string) (string, error) { func GetID(topic string) (string, error) {
parts := strings.Split(topic, "/") parts := strings.Split(topic, "/")