@@ -30,6 +30,7 @@ import (
3030 "github.com/flant/addon-operator/pkg/module_manager/models/moduleset"
3131 "github.com/flant/addon-operator/pkg/module_manager/scheduler"
3232 "github.com/flant/addon-operator/pkg/module_manager/scheduler/extenders"
33+ bootstrapped_extender "github.com/flant/addon-operator/pkg/module_manager/scheduler/extenders/bootstrapped"
3334 dynamic_extender "github.com/flant/addon-operator/pkg/module_manager/scheduler/extenders/dynamically_enabled"
3435 kube_config_extender "github.com/flant/addon-operator/pkg/module_manager/scheduler/extenders/kube_config"
3536 script_extender "github.com/flant/addon-operator/pkg/module_manager/scheduler/extenders/script_enabled"
@@ -56,6 +57,8 @@ const (
5657 moduleMaintenanceMetricName = "{PREFIX}mm_module_maintenance"
5758
5859 moduleManagerServiceName = "module-manager"
60+
61+ bootstrappedValueSection = "clusterIsBootstrapped"
5962)
6063
6164// ModulesState determines which modules should be enabled, disabled or reloaded.
@@ -377,12 +380,30 @@ func (mm *ModuleManager) Init(logger *log.Logger) error {
377380 return fmt .Errorf ("couldn't add scrpt_enabled extender: %w" , err )
378381 }
379382
380- // by this point we must have all required scheduler extenders attached
383+ bootstrappedExtender := bootstrapped_extender .NewExtender (func () (bool , error ) {
384+ value , ok := mm .global .GetValues (false )[bootstrappedValueSection ]
385+ if ! ok {
386+ return false , nil
387+ }
388+
389+ bootstrapped , ok := value .(bool )
390+ if ! ok {
391+ return false , errors .New ("bootstrapped value not boolean" )
392+ }
393+
394+ return bootstrapped , nil
395+ })
396+
397+ if err = mm .moduleScheduler .AddExtender (bootstrappedExtender ); err != nil {
398+ return fmt .Errorf ("couldn't add bootstrapped extender: %w" , err )
399+ }
400+
401+ // by this point, we must have all required scheduler extenders attached
381402 if err := mm .moduleScheduler .ApplyExtenders (app .AppliedExtenders ); err != nil {
382403 return fmt .Errorf ("couldn't apply extenders to the module scheduler: %w" , err )
383404 }
384405
385- return mm .registerModules (scriptEnabledExtender )
406+ return mm .registerModules (scriptEnabledExtender , bootstrappedExtender )
386407}
387408
388409func (mm * ModuleManager ) GetKubeConfigValid () bool {
@@ -1392,7 +1413,7 @@ func queueHasPendingModuleDeleteTask(q *queue.TaskQueue, moduleName string) bool
13921413} */
13931414
13941415// registerModules load all available modules from modules directory.
1395- func (mm * ModuleManager ) registerModules (scriptEnabledExtender * script_extender.Extender ) error {
1416+ func (mm * ModuleManager ) registerModules (scriptEnabledExtender * script_extender.Extender , bootstrappedExtender * bootstrapped_extender. Extender ) error {
13961417 if mm .ModulesDir == "" {
13971418 mm .logger .Warn ("empty modules directory is passed, no modules to load" )
13981419
@@ -1434,10 +1455,15 @@ func (mm *ModuleManager) registerModules(scriptEnabledExtender *script_extender.
14341455 mod .WithDependencies (dep )
14351456 set .Add (mod )
14361457
1437- if err : = mm .moduleScheduler .AddModuleVertex (mod ); err != nil {
1458+ if err = mm .moduleScheduler .AddModuleVertex (mod ); err != nil {
14381459 return fmt .Errorf ("add module vertex: %w" , err )
14391460 }
14401461
1462+ // functional modules require bootstrapped cluster
1463+ if ! mod .GetCritical () {
1464+ bootstrappedExtender .AddFunctionalModule (mod .GetName ())
1465+ }
1466+
14411467 scriptEnabledExtender .AddBasicModule (mod )
14421468
14431469 mm .SendModuleEvent (events.ModuleEvent {
@@ -1446,8 +1472,11 @@ func (mm *ModuleManager) registerModules(scriptEnabledExtender *script_extender.
14461472 })
14471473 }
14481474
1449- mm .logger .Debug ("Found modules" ,
1450- slog .Any ("modules" , set .NamesInOrder ()))
1475+ if err = mm .moduleScheduler .Initialize (); err != nil {
1476+ return fmt .Errorf ("initialize scheduler: %w" , err )
1477+ }
1478+
1479+ mm .logger .Debug ("Found modules" , slog .Any ("modules" , set .NamesInOrder ()))
14511480
14521481 mm .l .Lock ()
14531482 mm .modules = set
0 commit comments