Преглед на файлове

client infrastructure to support updates

Matthew R. Kasun преди 3 години
родител
ревизия
a99f01ccd0
променени са 2 файла, в които са добавени 68 реда и са изтрити 27 реда
  1. 34 0
      netclient/functions/clientconfig.go
  2. 34 27
      netclient/functions/daemon.go

+ 34 - 0
netclient/functions/clientconfig.go

@@ -0,0 +1,34 @@
+package functions
+
+import (
+	"github.com/gravitl/netmaker/logger"
+	"github.com/gravitl/netmaker/netclient/config"
+	"github.com/gravitl/netmaker/netclient/ncutils"
+)
+
+var updateRequired = false
+
+// UpdateClientConfig - function is called on daemon start to update clientConfig if required
+// Usage :  set update required to true and and update logic to function
+func UpdateClientConfig() {
+	if !updateRequired {
+		return
+	}
+	networks, _ := ncutils.GetSystemNetworks()
+	if len(networks) == 0 {
+		return
+	}
+	for _, network := range networks {
+		cfg := config.ClientConfig{}
+		cfg.Network = network
+		cfg.ReadConfig()
+		//update any new fields
+		logger.Log(0, "updating clientConfig for network", cfg.Network)
+		//insert update logic here
+		if err := config.Write(&cfg, cfg.Network); err != nil {
+			logger.Log(0, "failed to update clientConfig for ", cfg.Network, err.Error())
+		}
+	}
+	//reset so future calls will return immediately
+	updateRequired = false
+}

+ 34 - 27
netclient/functions/daemon.go

@@ -41,36 +41,43 @@ type cachedMessage struct {
 
 // Daemon runs netclient daemon from command line
 func Daemon() error {
+	UpdateClientConfig()
 	if err := ncutils.SavePID(); err != nil {
 		return err
-	}
-	// set ipforwarding on startup
-	err := local.SetIPForwarding()
-	if err != nil {
-		logger.Log(0, err.Error())
-	}
+		serverSet := make(map[string]bool)
+		// == initial pull of all networks ==
+		networks, _ := ncutils.GetSystemNetworks()
+		if len(networks) == 0 {
+			return errors.New("no networks")
+		}
+		// set ipforwarding on startup
+		err := local.SetIPForwarding()
+		if err != nil {
+			logger.Log(0, err.Error())
+		}
 
-	// == add waitgroup and cancel for checkin routine ==
-	wg := sync.WaitGroup{}
-	quit := make(chan os.Signal, 1)
-	reset := make(chan os.Signal, 1)
-	signal.Notify(quit, syscall.SIGTERM, os.Interrupt)
-	signal.Notify(reset, syscall.SIGHUP)
-	cancel := startServerGoRoutines(&wg)
-	for {
-		select {
-		case <-quit:
-			cancel()
-			logger.Log(0, "shutting down netclient daemon")
-			wg.Wait()
-			logger.Log(0, "shutdown complete")
-			return nil
-		case <-reset:
-			logger.Log(0, "received reset")
-			cancel()
-			wg.Wait()
-			logger.Log(0, "restarting daemon")
-			cancel = startServerGoRoutines(&wg)
+		// == add waitgroup and cancel for checkin routine ==
+		wg := sync.WaitGroup{}
+		quit := make(chan os.Signal, 1)
+		reset := make(chan os.Signal, 1)
+		signal.Notify(quit, syscall.SIGTERM, os.Interrupt)
+		signal.Notify(reset, syscall.SIGHUP)
+		cancel := startServerGoRoutines(&wg)
+		for {
+			select {
+			case <-quit:
+				cancel()
+				logger.Log(0, "shutting down netclient daemon")
+				wg.Wait()
+				logger.Log(0, "shutdown complete")
+				return nil
+			case <-reset:
+				logger.Log(0, "received reset")
+				cancel()
+				wg.Wait()
+				logger.Log(0, "restarting daemon")
+				cancel = startServerGoRoutines(&wg)
+			}
 		}
 	}
 }