commands.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package command
  2. import (
  3. "crypto/ed25519"
  4. "crypto/rand"
  5. "fmt"
  6. "strings"
  7. "github.com/gravitl/netmaker/logger"
  8. "github.com/gravitl/netmaker/netclient/config"
  9. "github.com/gravitl/netmaker/netclient/daemon"
  10. "github.com/gravitl/netmaker/netclient/functions"
  11. "github.com/gravitl/netmaker/netclient/ncutils"
  12. "github.com/gravitl/netmaker/tls"
  13. )
  14. // Join - join command to run from cli
  15. func Join(cfg *config.ClientConfig, privateKey string) error {
  16. var err error
  17. //join network
  18. err = functions.JoinNetwork(cfg, privateKey)
  19. if err != nil {
  20. if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
  21. logger.Log(0, "error installing: ", err.Error())
  22. err = functions.WipeLocal(cfg)
  23. if err != nil {
  24. logger.Log(1, "error removing artifacts: ", err.Error())
  25. }
  26. if cfg.Daemon != "off" {
  27. if ncutils.IsLinux() {
  28. err = daemon.RemoveSystemDServices()
  29. }
  30. if err != nil {
  31. logger.Log(1, "error removing services: ", err.Error())
  32. }
  33. if ncutils.IsFreeBSD() {
  34. daemon.RemoveFreebsdDaemon()
  35. }
  36. }
  37. }
  38. if err != nil && strings.Contains(err.Error(), "ALREADY_INSTALLED") {
  39. logger.Log(0, err.Error())
  40. err = nil
  41. }
  42. return err
  43. }
  44. logger.Log(1, "joined", cfg.Network)
  45. return err
  46. }
  47. // Leave - runs the leave command from cli
  48. func Leave(cfg *config.ClientConfig) error {
  49. err := functions.LeaveNetwork(cfg.Network)
  50. if err != nil {
  51. logger.Log(1, "error attempting to leave network "+cfg.Network)
  52. } else {
  53. logger.Log(0, "success")
  54. }
  55. return err
  56. }
  57. // Pull - runs pull command from cli
  58. func Pull(cfg *config.ClientConfig) error {
  59. var err error
  60. var networks = []string{}
  61. if cfg.Network == "all" {
  62. logger.Log(0, "No network selected. Running Pull for all networks.")
  63. networks, err = ncutils.GetSystemNetworks()
  64. if err != nil {
  65. logger.Log(1, "Error retrieving networks. Exiting.")
  66. return err
  67. }
  68. } else {
  69. networks = append(networks, cfg.Network)
  70. }
  71. var currentServers = make(map[string]config.ClientConfig)
  72. for _, network := range networks {
  73. currCfg, err := config.ReadConfig(network)
  74. if err != nil {
  75. logger.Log(1, "could not read config when pulling for network", network)
  76. continue
  77. }
  78. _, err = functions.Pull(network, true)
  79. if err != nil {
  80. logger.Log(1, "error pulling network config for network: ", network, "\n", err.Error())
  81. } else {
  82. logger.Log(1, "pulled network config for "+network)
  83. }
  84. currentServers[currCfg.Server.Server] = *currCfg
  85. }
  86. //generate new client key if one doesn' exist
  87. var private *ed25519.PrivateKey
  88. private, err = tls.ReadKeyFromFile(ncutils.GetNetclientPath() + ncutils.GetSeparator() + "client.key")
  89. if err != nil {
  90. _, newKey, err := ed25519.GenerateKey(rand.Reader)
  91. if err != nil {
  92. return err
  93. }
  94. if err := tls.SaveKeyToFile(ncutils.GetNetclientPath(), ncutils.GetSeparator()+"client.key", newKey); err != nil {
  95. return err
  96. }
  97. private = &newKey
  98. }
  99. // re-register with server -- get new certs for broker
  100. for _, clientCfg := range currentServers {
  101. if err = functions.RegisterWithServer(private, &clientCfg); err != nil {
  102. logger.Log(0, "registration error", err.Error())
  103. } else {
  104. daemon.Restart()
  105. }
  106. }
  107. logger.Log(1, "reset network", cfg.Network, "and peer configs")
  108. return err
  109. }
  110. // List - runs list command from cli
  111. func List(cfg config.ClientConfig) error {
  112. _, err := functions.List(cfg.Network)
  113. return err
  114. }
  115. // Uninstall - runs uninstall command from cli
  116. func Uninstall() error {
  117. logger.Log(0, "uninstalling netclient...")
  118. err := functions.Uninstall()
  119. logger.Log(0, "uninstalled netclient")
  120. return err
  121. }
  122. // Daemon - runs the daemon
  123. func Daemon() error {
  124. err := functions.Daemon()
  125. return err
  126. }
  127. // Install - installs binary and daemon
  128. func Install() error {
  129. return functions.Install()
  130. }
  131. // Connect - re-instates a connection of a node
  132. func Connect(cfg config.ClientConfig) error {
  133. networkName := cfg.Network
  134. if networkName == "" {
  135. networkName = cfg.Node.Network
  136. }
  137. if networkName == "all" {
  138. return fmt.Errorf("no network specified")
  139. }
  140. return functions.Connect(networkName)
  141. }
  142. // Disconnect - disconnects a connection of a node
  143. func Disconnect(cfg config.ClientConfig) error {
  144. networkName := cfg.Network
  145. if networkName == "" {
  146. networkName = cfg.Node.Network
  147. }
  148. if networkName == "all" {
  149. return fmt.Errorf("no network specified")
  150. }
  151. return functions.Disconnect(networkName)
  152. }