From a5495300d0e5485f24fa85c0da266ff14187071c Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Tue, 18 Jan 2022 09:06:43 -0500 Subject: [PATCH] added logs --- controllers/node.go | 29 ++++++++++++++++++++++++++++- controllers/node_grpc.go | 18 +++++++++++++++--- controllers/relay.go | 6 ++++++ controllers/server_util.go | 24 ++++++++++++++++++------ logic/server.go | 3 +++ models/structs.go | 7 +++++++ serverctl/serverq.go | 17 +++++------------ 7 files changed, 82 insertions(+), 22 deletions(-) diff --git a/controllers/node.go b/controllers/node.go index bb65d655..65b8f0b4 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -403,6 +403,11 @@ func createNode(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + + if err = runServerPeerUpdate(); err != nil { + logger.Log(1, "internal error when approving node:", node.ID) + } + logger.Log(1, r.Header.Get("user"), "created new node", node.Name, "on network", node.Network) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) @@ -413,11 +418,15 @@ func createNode(w http.ResponseWriter, r *http.Request) { func uncordonNode(w http.ResponseWriter, r *http.Request) { var params = mux.Vars(r) w.Header().Set("Content-Type", "application/json") - node, err := logic.UncordonNode(params["nodeid"]) + var nodeid = params["nodeid"] + node, err := logic.UncordonNode(nodeid) if err != nil { returnErrorResponse(w, r, formatError(err, "internal")) return } + if err = runServerPeerUpdate(); err != nil { + logger.Log(1, "internal error when approving node:", nodeid) + } logger.Log(1, r.Header.Get("user"), "uncordoned node", node.Name) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode("SUCCESS") @@ -439,6 +448,9 @@ func createEgressGateway(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + if err = runServerPeerUpdate(); err != nil { + logger.Log(1, "internal error when setting peers after creating egress on node:", gateway.NodeID) + } logger.Log(1, r.Header.Get("user"), "created egress gateway on node", gateway.NodeID, "on network", gateway.NetID) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) @@ -454,6 +466,9 @@ func deleteEgressGateway(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + if err = runServerPeerUpdate(); err != nil { + logger.Log(1, "internal error when setting peers after removing egress on node:", nodeid) + } logger.Log(1, r.Header.Get("user"), "deleted egress gateway", nodeid, "on network", netid) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) @@ -471,6 +486,7 @@ func createIngressGateway(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + logger.Log(1, r.Header.Get("user"), "created ingress gateway on node", nodeid, "on network", netid) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) @@ -485,6 +501,7 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + logger.Log(1, r.Header.Get("user"), "deleted ingress gateway", nodeid) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) @@ -529,6 +546,8 @@ func updateNode(w http.ResponseWriter, r *http.Request) { newNode.PostUp = node.PostUp } + var shouldPeersUpdate = logic.ShouldPeersUpdate(&node, &newNode) + err = logic.UpdateNode(&node, &newNode) if err != nil { returnErrorResponse(w, r, formatError(err, "internal")) @@ -545,6 +564,8 @@ func updateNode(w http.ResponseWriter, r *http.Request) { if servercfg.IsDNSMode() { // TODO check when this should be updated.. err = logic.SetDNS() } + + err = runServerUpdateIfNeeded(shouldPeersUpdate, &newNode) if err != nil { returnErrorResponse(w, r, formatError(err, "internal")) return @@ -572,6 +593,12 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { return } + err = runServerPeerUpdate() + if err != nil { + returnErrorResponse(w, r, formatError(err, "internal")) + return + } + logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"]) returnSuccessResponse(w, r, nodeid+" deleted.") } diff --git a/controllers/node_grpc.go b/controllers/node_grpc.go index f606a187..64974524 100644 --- a/controllers/node_grpc.go +++ b/controllers/node_grpc.go @@ -86,6 +86,11 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object) return nil, err } + err = runServerPeerUpdate() + if err != nil { + logger.Log(1, "internal error when setting peers after node,", node.ID, "was created (gRPC)") + } + return response, nil } @@ -106,6 +111,7 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object) newnode.PostDown = node.PostDown newnode.PostUp = node.PostUp } + var shouldPeersUpdate = logic.ShouldPeersUpdate(&node, &newnode) err = logic.UpdateNode(&node, &newnode) if err != nil { @@ -119,6 +125,10 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object) if errN != nil { return nil, err } + err = runServerUpdateIfNeeded(shouldPeersUpdate, &models.Node{}) + if err != nil { + logger.Log(1, "could not update peers on gRPC after node,", newnode.ID, "updated (gRPC)") + } return &nodepb.Object{ Data: string(nodeData), Type: nodepb.NODE_TYPE, @@ -138,6 +148,11 @@ func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object) return nil, err } + err = runServerPeerUpdate() + if err != nil { + logger.Log(1, "internal error when setting peers after deleting node:", node.ID, "over gRPC") + } + return &nodepb.Object{ Data: "success", Type: nodepb.STRING_TYPE, @@ -152,9 +167,6 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (* return nil, err } - if node.IsServer == "yes" && logic.IsLeader(&node) { - logic.SetNetworkServerPeers(&node) - } excludeIsRelayed := node.IsRelay != "yes" var relayedNode string if node.IsRelayed == "yes" { diff --git a/controllers/relay.go b/controllers/relay.go index 00cb236a..1ccba9c5 100644 --- a/controllers/relay.go +++ b/controllers/relay.go @@ -26,6 +26,9 @@ func createRelay(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + if err = runServerPeerUpdate(); err != nil { + logger.Log(1, "internal error when creating relay on node:", relay.NodeID) + } logger.Log(1, r.Header.Get("user"), "created relay on node", relay.NodeID, "on network", relay.NetID) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) @@ -41,6 +44,9 @@ func deleteRelay(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) return } + if err = runServerPeerUpdate(); err != nil { + logger.Log(1, "internal error when deleting relay on node:", nodeid) + } logger.Log(1, r.Header.Get("user"), "deleted egress gateway", nodeid, "on network", netid) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) diff --git a/controllers/server_util.go b/controllers/server_util.go index bbbdf766..d9b7ed6d 100644 --- a/controllers/server_util.go +++ b/controllers/server_util.go @@ -7,13 +7,25 @@ import ( "github.com/gravitl/netmaker/serverctl" ) -func runServerUpdateIfNeeded(currentNode *models.Node, newNode *models.Node) error { - // check if a peer/server update is needed - var serverData = serverctl.ServerUpdateData{ - UpdatePeers: logic.ShouldPeersUpdate(currentNode, newNode), +func runServerPeerUpdate() error { + var serverData = models.ServerUpdateData{ + UpdatePeers: true, } - if currentNode.IsServer == "yes" { - serverData.ServerNode = *currentNode + serverctl.Push(serverData) + var settings, err = serverctl.Pop() + if err != nil { + return err + } + return handlePeerUpdate(&settings.ServerNode) +} + +func runServerUpdateIfNeeded(shouldPeersUpdate bool, serverNode *models.Node) error { + // check if a peer/server update is needed + var serverData = models.ServerUpdateData{ + UpdatePeers: shouldPeersUpdate, + } + if serverNode.IsServer == "yes" { + serverData.ServerNode = *serverNode } serverctl.Push(serverData) diff --git a/logic/server.go b/logic/server.go index 2c3b3f85..15550f5a 100644 --- a/logic/server.go +++ b/logic/server.go @@ -17,6 +17,7 @@ import ( "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) +// == Public == // == Join, Checkin, and Leave for Server == // KUBERNETES_LISTEN_PORT - starting port for Kubernetes in order to use NodePort range @@ -366,6 +367,8 @@ func checkNodeActions(node *models.Node) string { return "" } +// == Private == + func serverPull(serverNode *models.Node, onErr bool) error { var err error diff --git a/models/structs.go b/models/structs.go index a0a0ea2d..fe49e2fe 100644 --- a/models/structs.go +++ b/models/structs.go @@ -156,3 +156,10 @@ type RelayRequest struct { NetID string `json:"netid" bson:"netid"` RelayAddrs []string `json:"relayaddrs" bson:"relayaddrs"` } + +// ServerUpdateData - contains data to configure server +// and if it should set peers +type ServerUpdateData struct { + UpdatePeers bool `json:"updatepeers" bson:"updatepeers"` + ServerNode Node `json:"servernode" bson:"servernode"` +} diff --git a/serverctl/serverq.go b/serverctl/serverq.go index 796b8b84..132846d7 100644 --- a/serverctl/serverq.go +++ b/serverctl/serverq.go @@ -7,30 +7,23 @@ import ( ) // ServerQueue - holds data to be updated across the server -var ServerQueue chan ServerUpdateData +var ServerQueue chan models.ServerUpdateData func init() { - ServerQueue = make(chan ServerUpdateData, 100) -} - -// ServerUpdateData - contains data to configure server -// and if it should set peers -type ServerUpdateData struct { - UpdatePeers bool `json:"updatepeers" bson:"updatepeers"` - ServerNode models.Node `json:"servernode" bson:"servernode"` + ServerQueue = make(chan models.ServerUpdateData, 100) } // Push - Pushes ServerUpdateData to be used later -func Push(serverData ServerUpdateData) { +func Push(serverData models.ServerUpdateData) { ServerQueue <- serverData } // Pop - fetches first available data from queue -func Pop() (ServerUpdateData, error) { +func Pop() (models.ServerUpdateData, error) { select { case serverData := <-ServerQueue: return serverData, nil default: - return ServerUpdateData{}, fmt.Errorf("empty server queue") + return models.ServerUpdateData{}, fmt.Errorf("empty server queue") } }