server_util.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. }
  25. if serverNode.IsServer == "yes" {
  26. serverData.ServerNode = *serverNode
  27. }
  28. serverctl.Push(serverData)
  29. return handleServerUpdate()
  30. }
  31. func handleServerUpdate() error {
  32. var settings, settingsErr = serverctl.Pop()
  33. if settingsErr != nil {
  34. return settingsErr
  35. }
  36. var currentServerNodeID, err = logic.GetNetworkServerNodeID(settings.ServerNode.Network)
  37. if err != nil {
  38. return err
  39. }
  40. // ensure server client is available
  41. if settings.UpdatePeers || (settings.ServerNode.ID == currentServerNodeID) {
  42. err = serverctl.SyncServerNetwork(&settings.ServerNode)
  43. if err != nil {
  44. logger.Log(1, "failed to sync,", settings.ServerNode.Network, ", error:", err.Error())
  45. }
  46. }
  47. // if peers should update, update peers on network
  48. if settings.UpdatePeers {
  49. if err = handlePeerUpdate(&settings.ServerNode); err != nil {
  50. return err
  51. }
  52. logger.Log(1, "updated peers on network:", settings.ServerNode.Network)
  53. }
  54. // if the server node had an update, run the update function
  55. if settings.ServerNode.ID == currentServerNodeID {
  56. if err = logic.ServerUpdate(&settings.ServerNode); err != nil {
  57. return err
  58. }
  59. logger.Log(1, "server node:", settings.ServerNode.ID, "was updated")
  60. }
  61. return nil
  62. }
  63. // tells server to update it's peers
  64. func handlePeerUpdate(node *models.Node) error {
  65. logger.Log(1, "updating peers on network:", node.Network)
  66. var currentServerNodeID, err = logic.GetNetworkServerNodeID(node.Network)
  67. if err != nil {
  68. return err
  69. }
  70. var currentServerNode, currErr = logic.GetNodeByID(currentServerNodeID)
  71. if currErr != nil {
  72. return currErr
  73. }
  74. logic.SetNetworkServerPeers(&currentServerNode)
  75. logger.Log(1, "finished a peer update for network,", currentServerNode.Network)
  76. return nil
  77. }