serverctl.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package serverctl
  2. import (
  3. "errors"
  4. "net"
  5. "os"
  6. "strings"
  7. "github.com/gravitl/netmaker/database"
  8. "github.com/gravitl/netmaker/logger"
  9. "github.com/gravitl/netmaker/logic"
  10. "github.com/gravitl/netmaker/models"
  11. "github.com/gravitl/netmaker/netclient/ncutils"
  12. "github.com/gravitl/netmaker/servercfg"
  13. )
  14. const (
  15. // NETMAKER_BINARY_NAME - name of netmaker binary
  16. NETMAKER_BINARY_NAME = "netmaker"
  17. // COMMS_NETID - name of comms net
  18. COMMS_NETID = "n37m8k3r"
  19. )
  20. // InitializeCommsNetwork - Check if comms network exists (for MQ, DNS, SSH traffic), if not, create
  21. func InitializeCommsNetwork() error {
  22. _, err := logic.GetNetwork(COMMS_NETID)
  23. if err != nil {
  24. logger.Log(1, "comms net does not exist, creating")
  25. var network models.Network
  26. network.NetID = COMMS_NETID
  27. network.AddressRange = servercfg.GetCommsCIDR()
  28. network.IsHubAndSpoke = "yes"
  29. network.IsComms = "yes"
  30. return logic.CreateNetwork(network)
  31. } else {
  32. SyncServerNetwork(COMMS_NETID)
  33. }
  34. logger.Log(1, "comms network initialized")
  35. return nil
  36. }
  37. // InitServerNetclient - intializes the server netclient
  38. // 1. Check if config directory exists, if not attempt to make
  39. // 2. Check current networks and run pull to get interface up to date in case of restart
  40. func InitServerNetclient() error {
  41. netclientDir := ncutils.GetNetclientPath()
  42. _, err := os.Stat(netclientDir + "/config")
  43. if os.IsNotExist(err) {
  44. os.MkdirAll(netclientDir+"/config", 0700)
  45. } else if err != nil {
  46. logger.Log(1, "could not find or create", netclientDir)
  47. return err
  48. }
  49. var networks, netsErr = logic.GetNetworks()
  50. if netsErr == nil || database.IsEmptyRecord(netsErr) {
  51. for _, network := range networks {
  52. var currentServerNode, nodeErr = logic.GetNetworkServerLocal(network.NetID)
  53. if nodeErr == nil {
  54. if err = logic.ServerPull(&currentServerNode, true); err != nil {
  55. logger.Log(1, "failed pull for network", network.NetID, ", on server node", currentServerNode.ID)
  56. }
  57. }
  58. }
  59. }
  60. return nil
  61. }
  62. // SyncServerNetwork - ensures a wg interface and node exists for server
  63. func SyncServerNetwork(network string) error {
  64. serverNetworkSettings, err := logic.GetNetwork(network)
  65. if err != nil {
  66. return err
  67. }
  68. localnets, err := net.Interfaces()
  69. if err != nil {
  70. return err
  71. }
  72. ifaceExists := false
  73. for _, localnet := range localnets {
  74. if serverNetworkSettings.DefaultInterface == localnet.Name {
  75. ifaceExists = true
  76. }
  77. }
  78. serverNode, err := logic.GetNetworkServerLocal(network)
  79. if !ifaceExists && (err == nil && serverNode.ID != "") {
  80. return logic.ServerUpdate(&serverNode, true)
  81. } else if !ifaceExists {
  82. _, err := logic.ServerJoin(&serverNetworkSettings)
  83. if err != nil {
  84. if err == nil {
  85. err = errors.New("network add failed for " + serverNetworkSettings.NetID)
  86. }
  87. if !strings.Contains(err.Error(), "macaddress_unique") { // ignore macaddress unique error throws
  88. logger.Log(1, "error adding network", serverNetworkSettings.NetID, "during sync:", err.Error())
  89. }
  90. }
  91. }
  92. // remove networks locally that do not exist in database
  93. /*
  94. for _, localnet := range localnets {
  95. if strings.Contains(localnet.Name, "nm-") {
  96. var exists = ""
  97. if serverNetworkSettings.DefaultInterface == localnet.Name {
  98. exists = serverNetworkSettings.NetID
  99. }
  100. if exists == "" {
  101. err := logic.DeleteNodeByID(serverNode, true)
  102. if err != nil {
  103. if err == nil {
  104. err = errors.New("network delete failed for " + exists)
  105. }
  106. logger.Log(1, "error removing network", exists, "during sync", err.Error())
  107. }
  108. }
  109. }
  110. }
  111. */
  112. return nil
  113. }