server_util.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package controller
  2. import (
  3. "github.com/gravitl/netmaker/logger"
  4. "github.com/gravitl/netmaker/logic"
  5. "github.com/gravitl/netmaker/models"
  6. "github.com/gravitl/netmaker/serverctl"
  7. )
  8. func runServerPeerUpdate() error {
  9. var serverData = models.ServerUpdateData{
  10. UpdatePeers: true,
  11. }
  12. serverctl.Push(serverData)
  13. var settings, err = serverctl.Pop()
  14. if err != nil {
  15. logger.Log(1, "error during pop,", err.Error())
  16. return err
  17. }
  18. return handlePeerUpdate(&settings.ServerNode)
  19. }
  20. func runServerUpdateIfNeeded(shouldPeersUpdate bool, serverNode models.Node) error {
  21. // check if a peer/server update is needed
  22. var serverData = models.ServerUpdateData{
  23. UpdatePeers: shouldPeersUpdate,
  24. ServerNode: serverNode,
  25. }
  26. serverctl.Push(serverData)
  27. return handleServerUpdate()
  28. }
  29. func handleServerUpdate() error {
  30. var settings, settingsErr = serverctl.Pop()
  31. if settingsErr != nil {
  32. return settingsErr
  33. }
  34. var currentServerNodeID, err = logic.GetNetworkServerNodeID(settings.ServerNode.Network)
  35. if err != nil {
  36. return err
  37. }
  38. // ensure server client is available
  39. if settings.UpdatePeers || (settings.ServerNode.ID == currentServerNodeID) {
  40. err = serverctl.SyncServerNetwork(&settings.ServerNode)
  41. if err != nil {
  42. logger.Log(1, "failed to sync,", settings.ServerNode.Network, ", error:", err.Error())
  43. }
  44. }
  45. // if peers should update, update peers on network
  46. if settings.UpdatePeers {
  47. if err = handlePeerUpdate(&settings.ServerNode); err != nil {
  48. return err
  49. }
  50. logger.Log(1, "updated peers on network:", settings.ServerNode.Network)
  51. }
  52. // if the server node had an update, run the update function
  53. if settings.ServerNode.ID == currentServerNodeID {
  54. if err = logic.ServerUpdate(&settings.ServerNode); err != nil {
  55. return err
  56. }
  57. logger.Log(1, "server node:", settings.ServerNode.ID, "was updated")
  58. }
  59. return nil
  60. }
  61. // tells server to update it's peers
  62. func handlePeerUpdate(node *models.Node) error {
  63. logger.Log(1, "updating peers on network:", node.Network)
  64. var currentServerNodeID, err = logic.GetNetworkServerNodeID(node.Network)
  65. if err != nil {
  66. return err
  67. }
  68. var currentServerNode, currErr = logic.GetNodeByID(currentServerNodeID)
  69. if currErr != nil {
  70. return currErr
  71. }
  72. logic.SetNetworkServerPeers(&currentServerNode)
  73. logger.Log(1, "finished a peer update for network,", currentServerNode.Network)
  74. return nil
  75. }