serverctl.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package serverctl
  2. import (
  3. "errors"
  4. "net"
  5. "os"
  6. "strings"
  7. "github.com/gravitl/netmaker/logger"
  8. "github.com/gravitl/netmaker/logic"
  9. "github.com/gravitl/netmaker/models"
  10. "github.com/gravitl/netmaker/netclient/ncutils"
  11. )
  12. const NETMAKER_BINARY_NAME = "netmaker"
  13. // InitServerNetclient - intializes the server netclient
  14. func InitServerNetclient() error {
  15. netclientDir := ncutils.GetNetclientPath()
  16. _, err := os.Stat(netclientDir + "/config")
  17. if os.IsNotExist(err) {
  18. os.MkdirAll(netclientDir+"/config", 0744)
  19. } else if err != nil {
  20. logger.Log(1, "could not find or create", netclientDir)
  21. return err
  22. }
  23. return nil
  24. }
  25. // SyncServerNetwork - ensures a wg interface and node exists for server
  26. func SyncServerNetwork(serverNode *models.Node) error {
  27. serverNetworkSettings, err := logic.GetNetwork(serverNode.Network)
  28. if err != nil {
  29. return err
  30. }
  31. localnets, err := net.Interfaces()
  32. if err != nil {
  33. return err
  34. }
  35. exists := false
  36. for _, localnet := range localnets {
  37. if serverNetworkSettings.DefaultInterface == localnet.Name {
  38. exists = true
  39. }
  40. }
  41. if !exists {
  42. err := logic.ServerJoin(&serverNetworkSettings)
  43. if err != nil {
  44. if err == nil {
  45. err = errors.New("network add failed for " + serverNetworkSettings.NetID)
  46. }
  47. if !strings.Contains(err.Error(), "macaddress_unique") { // ignore macaddress unique error throws
  48. logger.Log(1, "error adding network", serverNetworkSettings.NetID, "during sync:", err.Error())
  49. }
  50. }
  51. }
  52. for _, localnet := range localnets {
  53. if strings.Contains(localnet.Name, "nm-") {
  54. var exists = ""
  55. if serverNetworkSettings.DefaultInterface == localnet.Name {
  56. exists = serverNetworkSettings.NetID
  57. }
  58. if exists == "" {
  59. err := logic.DeleteNodeByID(serverNode, true)
  60. if err != nil {
  61. if err == nil {
  62. err = errors.New("network delete failed for " + exists)
  63. }
  64. logger.Log(1, "error removing network", exists, "during sync", err.Error())
  65. }
  66. }
  67. }
  68. }
  69. return nil
  70. }