Переглянути джерело

feat(go): sync from idp periodically;

Vishal Dalwadi 4 місяців тому
батько
коміт
939efa8f9b
5 змінених файлів з 40 додано та 0 видалено
  1. 1 0
      config/config.go
  2. 14 0
      pro/auth/sync.go
  3. 3 0
      pro/initialize.go
  4. 2 0
      scripts/netmaker.default.env
  5. 20 0
      servercfg/serverconf.go

+ 1 - 0
config/config.go

@@ -63,6 +63,7 @@ type ServerConfig struct {
 	FrontendURL                string        `yaml:"frontendurl"`
 	DisplayKeys                string        `yaml:"displaykeys"`
 	AzureTenant                string        `yaml:"azuretenant"`
+	IDPSyncInterval            string        `yaml:"idp_sync_interval"`
 	Telemetry                  string        `yaml:"telemetry"`
 	HostNetwork                string        `yaml:"hostnetwork"`
 	Server                     string        `yaml:"server"`

+ 14 - 0
pro/auth/sync.go

@@ -2,15 +2,29 @@ package auth
 
 import (
 	"github.com/gravitl/netmaker/database"
+	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/pro/idp"
 	"github.com/gravitl/netmaker/pro/idp/azure"
 	"github.com/gravitl/netmaker/pro/idp/google"
 	proLogic "github.com/gravitl/netmaker/pro/logic"
+	"github.com/gravitl/netmaker/servercfg"
 	"os"
+	"time"
 )
 
+func StartSyncHook() {
+	for range time.Tick(servercfg.GetIDPSyncInterval()) {
+		err := SyncFromIDP()
+		if err != nil {
+			logger.Log(0, "failed to sync from idp: ", err.Error())
+		} else {
+			logger.Log(0, "sync from idp complete")
+		}
+	}
+}
+
 func SyncFromIDP() error {
 	var idpClient idp.Client
 	var err error

+ 3 - 0
pro/initialize.go

@@ -89,6 +89,9 @@ func InitPro() {
 		} else {
 			slog.Error("no OAuth provider found or not configured, continuing without OAuth")
 		}
+
+		auth.StartSyncHook()
+
 		proLogic.LoadNodeMetricsToCache()
 		proLogic.InitFailOverCache()
 	})

+ 2 - 0
scripts/netmaker.default.env

@@ -102,3 +102,5 @@ STUN=true
 METRICS_PORT=51821
 # Metrics Collection interval in minutes
 PUBLISH_METRIC_INTERVAL=15
+# IDP Sync Interval with units.
+IDP_SYNC_INTERVAL=24h

+ 20 - 0
servercfg/serverconf.go

@@ -642,6 +642,26 @@ func GetAzureTenant() string {
 	return azureTenant
 }
 
+// GetIDPSyncInterval returns the interval at which the netmaker should sync
+// data from IDP.
+func GetIDPSyncInterval() time.Duration {
+	if os.Getenv("IDP_SYNC_INTERVAL") != "" {
+		syncInterval, err := time.ParseDuration(os.Getenv("IDP_SYNC_INTERVAL"))
+		if err != nil {
+			return 24 * time.Hour
+		}
+
+		return syncInterval
+	} else {
+		syncInterval, err := time.ParseDuration(config.Config.Server.IDPSyncInterval)
+		if err != nil {
+			return 24 * time.Hour
+		}
+
+		return syncInterval
+	}
+}
+
 // GetMqPassword - fetches the MQ password
 func GetMqPassword() string {
 	password := ""