commands.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package command
  2. import (
  3. "strconv"
  4. "strings"
  5. "github.com/gravitl/netmaker/netclient/config"
  6. "github.com/gravitl/netmaker/netclient/daemon"
  7. "github.com/gravitl/netmaker/netclient/functions"
  8. "github.com/gravitl/netmaker/netclient/ncutils"
  9. "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
  10. )
  11. // JoinCommsNetwork -- Join the message queue comms network
  12. func JoinCommsNetwork(cfg config.ClientConfig) error {
  13. key, err := wgtypes.GeneratePrivateKey()
  14. if err != nil {
  15. return err
  16. }
  17. if err := functions.JoinNetwork(cfg, key.PublicKey().String()); err != nil {
  18. return err
  19. }
  20. return nil
  21. }
  22. // Join - join command to run from cli
  23. func Join(cfg config.ClientConfig, privateKey string) error {
  24. var err error
  25. //check if comms network exists
  26. var commsCfg config.ClientConfig
  27. commsCfg.Network = ncutils.COMMS_NETWORK_NAME
  28. commsCfg.ReadConfig()
  29. if commsCfg.Node.Name == "" {
  30. if err := JoinCommsNetwork(commsCfg); err != nil {
  31. ncutils.Log("could not join comms network " + err.Error())
  32. return err
  33. }
  34. }
  35. //ensure comms network is reachable
  36. if err := functions.PingServer(&commsCfg); err != nil {
  37. if err := functions.LeaveNetwork(commsCfg.Network); err != nil {
  38. ncutils.Log("could not leave comms network " + err.Error())
  39. return err
  40. }
  41. if err := JoinCommsNetwork(commsCfg); err != nil {
  42. ncutils.Log("could not join comms network " + err.Error())
  43. return err
  44. }
  45. }
  46. //join network
  47. err = functions.JoinNetwork(cfg, privateKey)
  48. if err != nil && !cfg.DebugOn {
  49. if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
  50. ncutils.PrintLog("error installing: "+err.Error(), 1)
  51. err = functions.LeaveNetwork(cfg.Network)
  52. if err != nil {
  53. err = functions.WipeLocal(cfg.Network)
  54. if err != nil {
  55. ncutils.PrintLog("error removing artifacts: "+err.Error(), 1)
  56. }
  57. }
  58. if cfg.Daemon != "off" {
  59. if ncutils.IsLinux() {
  60. err = daemon.RemoveSystemDServices()
  61. }
  62. if err != nil {
  63. ncutils.PrintLog("error removing services: "+err.Error(), 1)
  64. }
  65. if ncutils.IsFreeBSD() {
  66. daemon.RemoveFreebsdDaemon()
  67. }
  68. }
  69. } else {
  70. ncutils.PrintLog("success", 0)
  71. }
  72. if err != nil && strings.Contains(err.Error(), "ALREADY_INSTALLED") {
  73. ncutils.PrintLog(err.Error(), 0)
  74. err = nil
  75. }
  76. return err
  77. }
  78. ncutils.PrintLog("joined "+cfg.Network, 1)
  79. /*
  80. if ncutils.IsWindows() {
  81. ncutils.PrintLog("setting up WireGuard app", 0)
  82. time.Sleep(time.Second >> 1)
  83. functions.Pull(cfg.Network, true)
  84. }
  85. */
  86. return err
  87. }
  88. func getWindowsInterval() int {
  89. interval := 15
  90. networks, err := ncutils.GetSystemNetworks()
  91. if err != nil {
  92. return interval
  93. }
  94. cfg, err := config.ReadConfig(networks[0])
  95. if err != nil {
  96. return interval
  97. }
  98. netint, err := strconv.Atoi(cfg.Server.CheckinInterval)
  99. if err == nil && netint != 0 {
  100. interval = netint
  101. }
  102. return interval
  103. }
  104. // Leave - runs the leave command from cli
  105. func Leave(cfg config.ClientConfig) error {
  106. err := functions.LeaveNetwork(cfg.Network)
  107. if err != nil {
  108. ncutils.PrintLog("error attempting to leave network "+cfg.Network, 1)
  109. } else {
  110. ncutils.PrintLog("success", 0)
  111. }
  112. return err
  113. }
  114. // Pull - runs pull command from cli
  115. func Pull(cfg config.ClientConfig) error {
  116. var err error
  117. if cfg.Network == "all" {
  118. ncutils.PrintLog("No network selected. Running Pull for all networks.", 0)
  119. networks, err := ncutils.GetSystemNetworks()
  120. if err != nil {
  121. ncutils.PrintLog("Error retrieving networks. Exiting.", 1)
  122. return err
  123. }
  124. for _, network := range networks {
  125. _, err = functions.Pull(network, true)
  126. if err != nil {
  127. ncutils.PrintLog("Error pulling network config for network: "+network+"\n"+err.Error(), 1)
  128. } else {
  129. ncutils.PrintLog("pulled network config for "+network, 1)
  130. }
  131. }
  132. err = nil
  133. } else {
  134. _, err = functions.Pull(cfg.Network, true)
  135. }
  136. ncutils.PrintLog("reset network and peer configs", 1)
  137. if err == nil {
  138. ncutils.PrintLog("reset network and peer configs", 1)
  139. ncutils.PrintLog("success", 1)
  140. } else {
  141. ncutils.PrintLog("error occurred pulling configs from server", 1)
  142. }
  143. return err
  144. }
  145. // List - runs list command from cli
  146. func List(cfg config.ClientConfig) error {
  147. err := functions.List(cfg.Network)
  148. return err
  149. }
  150. // Uninstall - runs uninstall command from cli
  151. func Uninstall() error {
  152. ncutils.PrintLog("uninstalling netclient...", 0)
  153. err := functions.Uninstall()
  154. ncutils.PrintLog("uninstalled netclient", 0)
  155. return err
  156. }
  157. func Daemon() error {
  158. err := functions.Daemon()
  159. return err
  160. }