From bd87d5e9b064a5528de485c8956e4d6b24e2bcd8 Mon Sep 17 00:00:00 2001 From: Mikhail Scherba Date: Tue, 19 Dec 2023 10:05:33 +0300 Subject: [PATCH] add a flag to events Signed-off-by: Mikhail Scherba --- .../kube_config_manager.go | 9 ++++ .../models/modules/events/events.go | 3 ++ pkg/module_manager/module_manager.go | 50 +++++++++++++++++-- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/pkg/kube_config_manager/kube_config_manager.go b/pkg/kube_config_manager/kube_config_manager.go index 7324f5540..802235cdf 100644 --- a/pkg/kube_config_manager/kube_config_manager.go +++ b/pkg/kube_config_manager/kube_config_manager.go @@ -72,6 +72,15 @@ func NewKubeConfigManager(ctx context.Context, bk backend.ConfigHandler, runtime } } +func (kcm *KubeConfigManager) IsModuleEnabled(moduleName string) bool { + moduleConfig, found := kcm.currentConfig.Modules[moduleName] + if !found { + return false + } + + return *moduleConfig.IsEnabled +} + func (kcm *KubeConfigManager) Init() error { kcm.logEntry.Debug("Init: KubeConfigManager") diff --git a/pkg/module_manager/models/modules/events/events.go b/pkg/module_manager/models/modules/events/events.go index 170c62625..5f2f3cd06 100644 --- a/pkg/module_manager/models/modules/events/events.go +++ b/pkg/module_manager/models/modules/events/events.go @@ -15,4 +15,7 @@ const ( type ModuleEvent struct { ModuleName string EventType ModuleEventType + + // an option for registering a module without reload + Reregister bool } diff --git a/pkg/module_manager/module_manager.go b/pkg/module_manager/module_manager.go index 7a3fe4fe4..af1fe7f70 100644 --- a/pkg/module_manager/module_manager.go +++ b/pkg/module_manager/module_manager.go @@ -65,6 +65,7 @@ type DirectoryConfig struct { type KubeConfigManager interface { SaveConfigValues(key string, values utils.Values) error + IsModuleEnabled(moduleName string) bool } // ModuleManagerDependencies pass dependencies for ModuleManager @@ -1093,9 +1094,32 @@ func (mm *ModuleManager) ReregisterModule(moduleName, modulePath string) error { // check if module exists if mm.modules.Has(mod.GetName()) { - // if it's disabled - update its configuration and exit + // if module is disabled in module manager if !mm.IsModuleEnabled(mod.GetName()) { + // and disabled in the module kube config - update and exit + if !mm.dependencies.KubeConfigManager.IsModuleEnabled(mod.GetName()) { + mm.modules.Add(mod) + return nil + } + // if the module kube config has enabled true, check enable scripts mm.modules.Add(mod) + module := mm.GetModule(mod.GetName()) + isEnabled, err := module.RunEnabledScript(mm.TempDir, mm.GetEnabledModuleNames(), map[string]string{}) + if err != nil { + return err + } + + if isEnabled { + mm.AddEnabledModuleName(mod.GetName()) + mm.AddEnabledModuleByConfigName(mod.GetName()) + // enqueue module startup sequence if it is enabled + mm.RerunModule(mod.GetName()) + mm.moduleEventC <- events.ModuleEvent{ + ModuleName: mod.GetName(), + EventType: events.ModuleEnabled, + } + } + return nil } @@ -1114,8 +1138,25 @@ func (mm *ModuleManager) ReregisterModule(moduleName, modulePath string) error { // upsert a new module in the moduleset mm.modules.Add(mod) - // launch module rerun sequence - mm.RerunModule(mod.GetName()) + // get new module version + module = mm.GetModule(mod.GetName()) + + // check if module is enabled via enabled scripts + isEnabled, err := module.RunEnabledScript(mm.TempDir, mm.GetEnabledModuleNames(), map[string]string{}) + if err != nil { + return err + } + + if isEnabled { + // enqueue module startup sequence if it is enabled + mm.RerunModule(mod.GetName()) + } else { + // throw disable module event + mm.moduleEventC <- events.ModuleEvent{ + ModuleName: mod.GetName(), + EventType: events.ModuleDisabled, + } + } return nil } @@ -1123,10 +1164,11 @@ func (mm *ModuleManager) ReregisterModule(moduleName, modulePath string) error { // module doesn't exist mm.modules.Add(mod) - // new module requires to be registered + // a new module requires to be registered, possibly fast mm.moduleEventC <- events.ModuleEvent{ ModuleName: mod.GetName(), EventType: events.ModuleRegistered, + Reregister: true, } return nil