Browse Source

added logs

0xdcarns 3 years ago
parent
commit
a5495300d0
7 changed files with 81 additions and 21 deletions
  1. 28 1
      controllers/node.go
  2. 15 3
      controllers/node_grpc.go
  3. 6 0
      controllers/relay.go
  4. 17 5
      controllers/server_util.go
  5. 3 0
      logic/server.go
  6. 7 0
      models/structs.go
  7. 5 12
      serverctl/serverq.go

+ 28 - 1
controllers/node.go

@@ -403,6 +403,11 @@ func createNode(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		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)
 	logger.Log(1, r.Header.Get("user"), "created new node", node.Name, "on network", node.Network)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	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) {
 func uncordonNode(w http.ResponseWriter, r *http.Request) {
 	var params = mux.Vars(r)
 	var params = mux.Vars(r)
 	w.Header().Set("Content-Type", "application/json")
 	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 {
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		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)
 	logger.Log(1, r.Header.Get("user"), "uncordoned node", node.Name)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode("SUCCESS")
 	json.NewEncoder(w).Encode("SUCCESS")
@@ -439,6 +448,9 @@ func createEgressGateway(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		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)
 	logger.Log(1, r.Header.Get("user"), "created egress gateway on node", gateway.NodeID, "on network", gateway.NetID)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)
@@ -454,6 +466,9 @@ func deleteEgressGateway(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		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)
 	logger.Log(1, r.Header.Get("user"), "deleted egress gateway", nodeid, "on network", netid)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)
@@ -471,6 +486,7 @@ func createIngressGateway(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		return
 	}
 	}
+
 	logger.Log(1, r.Header.Get("user"), "created ingress gateway on node", nodeid, "on network", netid)
 	logger.Log(1, r.Header.Get("user"), "created ingress gateway on node", nodeid, "on network", netid)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)
@@ -485,6 +501,7 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		return
 	}
 	}
+
 	logger.Log(1, r.Header.Get("user"), "deleted ingress gateway", nodeid)
 	logger.Log(1, r.Header.Get("user"), "deleted ingress gateway", nodeid)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)
@@ -529,6 +546,8 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
 		newNode.PostUp = node.PostUp
 		newNode.PostUp = node.PostUp
 	}
 	}
 
 
+	var shouldPeersUpdate = logic.ShouldPeersUpdate(&node, &newNode)
+
 	err = logic.UpdateNode(&node, &newNode)
 	err = logic.UpdateNode(&node, &newNode)
 	if err != nil {
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		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..
 	if servercfg.IsDNSMode() { // TODO check when this should be updated..
 		err = logic.SetDNS()
 		err = logic.SetDNS()
 	}
 	}
+
+	err = runServerUpdateIfNeeded(shouldPeersUpdate, &newNode)
 	if err != nil {
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		return
@@ -572,6 +593,12 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 		return
 		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"])
 	logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"])
 	returnSuccessResponse(w, r, nodeid+" deleted.")
 	returnSuccessResponse(w, r, nodeid+" deleted.")
 }
 }

+ 15 - 3
controllers/node_grpc.go

@@ -86,6 +86,11 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
 		return nil, err
 		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
 	return response, nil
 }
 }
 
 
@@ -106,6 +111,7 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
 		newnode.PostDown = node.PostDown
 		newnode.PostDown = node.PostDown
 		newnode.PostUp = node.PostUp
 		newnode.PostUp = node.PostUp
 	}
 	}
+	var shouldPeersUpdate = logic.ShouldPeersUpdate(&node, &newnode)
 
 
 	err = logic.UpdateNode(&node, &newnode)
 	err = logic.UpdateNode(&node, &newnode)
 	if err != nil {
 	if err != nil {
@@ -119,6 +125,10 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
 	if errN != nil {
 	if errN != nil {
 		return nil, err
 		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{
 	return &nodepb.Object{
 		Data: string(nodeData),
 		Data: string(nodeData),
 		Type: nodepb.NODE_TYPE,
 		Type: nodepb.NODE_TYPE,
@@ -138,6 +148,11 @@ func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object)
 		return nil, err
 		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{
 	return &nodepb.Object{
 		Data: "success",
 		Data: "success",
 		Type: nodepb.STRING_TYPE,
 		Type: nodepb.STRING_TYPE,
@@ -152,9 +167,6 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
 		return nil, err
 		return nil, err
 	}
 	}
 
 
-	if node.IsServer == "yes" && logic.IsLeader(&node) {
-		logic.SetNetworkServerPeers(&node)
-	}
 	excludeIsRelayed := node.IsRelay != "yes"
 	excludeIsRelayed := node.IsRelay != "yes"
 	var relayedNode string
 	var relayedNode string
 	if node.IsRelayed == "yes" {
 	if node.IsRelayed == "yes" {

+ 6 - 0
controllers/relay.go

@@ -26,6 +26,9 @@ func createRelay(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		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)
 	logger.Log(1, r.Header.Get("user"), "created relay on node", relay.NodeID, "on network", relay.NetID)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)
@@ -41,6 +44,9 @@ func deleteRelay(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		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)
 	logger.Log(1, r.Header.Get("user"), "deleted egress gateway", nodeid, "on network", netid)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(node)
 	json.NewEncoder(w).Encode(node)

+ 17 - 5
controllers/server_util.go

@@ -7,13 +7,25 @@ import (
 	"github.com/gravitl/netmaker/serverctl"
 	"github.com/gravitl/netmaker/serverctl"
 )
 )
 
 
-func runServerUpdateIfNeeded(currentNode *models.Node, newNode *models.Node) error {
+func runServerPeerUpdate() error {
+	var serverData = models.ServerUpdateData{
+		UpdatePeers: true,
+	}
+	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
 	// check if a peer/server update is needed
-	var serverData = serverctl.ServerUpdateData{
-		UpdatePeers: logic.ShouldPeersUpdate(currentNode, newNode),
+	var serverData = models.ServerUpdateData{
+		UpdatePeers: shouldPeersUpdate,
 	}
 	}
-	if currentNode.IsServer == "yes" {
-		serverData.ServerNode = *currentNode
+	if serverNode.IsServer == "yes" {
+		serverData.ServerNode = *serverNode
 	}
 	}
 	serverctl.Push(serverData)
 	serverctl.Push(serverData)
 
 

+ 3 - 0
logic/server.go

@@ -17,6 +17,7 @@ import (
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 )
 
 
+// == Public ==
 // == Join, Checkin, and Leave for Server ==
 // == Join, Checkin, and Leave for Server ==
 
 
 // KUBERNETES_LISTEN_PORT - starting port for Kubernetes in order to use NodePort range
 // KUBERNETES_LISTEN_PORT - starting port for Kubernetes in order to use NodePort range
@@ -366,6 +367,8 @@ func checkNodeActions(node *models.Node) string {
 	return ""
 	return ""
 }
 }
 
 
+// == Private ==
+
 func serverPull(serverNode *models.Node, onErr bool) error {
 func serverPull(serverNode *models.Node, onErr bool) error {
 
 
 	var err error
 	var err error

+ 7 - 0
models/structs.go

@@ -156,3 +156,10 @@ type RelayRequest struct {
 	NetID      string   `json:"netid" bson:"netid"`
 	NetID      string   `json:"netid" bson:"netid"`
 	RelayAddrs []string `json:"relayaddrs" bson:"relayaddrs"`
 	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"`
+}

+ 5 - 12
serverctl/serverq.go

@@ -7,30 +7,23 @@ import (
 )
 )
 
 
 // ServerQueue - holds data to be updated across the server
 // ServerQueue - holds data to be updated across the server
-var ServerQueue chan ServerUpdateData
+var ServerQueue chan models.ServerUpdateData
 
 
 func init() {
 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
 // Push - Pushes ServerUpdateData to be used later
-func Push(serverData ServerUpdateData) {
+func Push(serverData models.ServerUpdateData) {
 	ServerQueue <- serverData
 	ServerQueue <- serverData
 }
 }
 
 
 // Pop - fetches first available data from queue
 // Pop - fetches first available data from queue
-func Pop() (ServerUpdateData, error) {
+func Pop() (models.ServerUpdateData, error) {
 	select {
 	select {
 	case serverData := <-ServerQueue:
 	case serverData := <-ServerQueue:
 		return serverData, nil
 		return serverData, nil
 	default:
 	default:
-		return ServerUpdateData{}, fmt.Errorf("empty server queue")
+		return models.ServerUpdateData{}, fmt.Errorf("empty server queue")
 	}
 	}
 }
 }