server_util.go 2.1 KB

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