@@ -1096,7 +1096,7 @@ func mergeEnabled(enabledFlags ...*bool) bool {
1096
1096
return result
1097
1097
}
1098
1098
1099
- // PushDeleteModule push moduleDelete task for a module into the main queue
1099
+ // PushDeleteModule pushes moduleDelete task for a module into the main queue
1100
1100
func (mm * ModuleManager ) PushDeleteModule (moduleName string ) {
1101
1101
// check if there is already moduleDelete task in the main queue for the module
1102
1102
if queueHasPendingModuleDeleteTask (mm .dependencies .TaskQueues .GetMain (), moduleName ) {
@@ -1153,7 +1153,8 @@ func (mm *ModuleManager) AreModulesInited() bool {
1153
1153
return mm .modules .IsInited ()
1154
1154
}
1155
1155
1156
- // RegisterModule disables and deregisters modules' hooks, and reloads module config
1156
+ // RegisterModule checks if a module already exists and reapplies(reloads) its configuration.
1157
+ // If it's a new module - converges all modules
1157
1158
func (mm * ModuleManager ) RegisterModule (moduleSource , modulePath string ) error {
1158
1159
if ! mm .modules .IsInited () {
1159
1160
return moduleset .ErrNotInited
@@ -1169,7 +1170,7 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
1169
1170
return fmt .Errorf ("no module loader set" )
1170
1171
}
1171
1172
1172
- // get basic module
1173
+ // get basic module definition
1173
1174
basicModule , err := mm .moduleLoader .LoadModule (moduleSource , modulePath )
1174
1175
if err != nil {
1175
1176
return fmt .Errorf ("failed to get basic module's definition: %w" , err )
@@ -1187,7 +1188,7 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
1187
1188
1188
1189
basicModule .WithDependencies (dep )
1189
1190
1190
- // check if module is already in moduleset
1191
+ // check if module already exists
1191
1192
if mm .modules .Has (moduleName ) {
1192
1193
// if module is disabled in module manager
1193
1194
if ! mm .IsModuleEnabled (moduleName ) {
@@ -1204,22 +1205,34 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
1204
1205
}
1205
1206
1206
1207
if isEnabled {
1207
- // update modulemanager's state
1208
+ // add module to the enabled modules list
1208
1209
mm .AddEnabledModuleName (moduleName )
1209
- mm .AddEnabledModuleByConfigName (moduleName )
1210
- // enqueue module startup sequence if it is enabled
1211
- err := mm .PushRunModule (moduleName )
1212
- if err != nil {
1213
- return err
1210
+ for _ , enabledModule := range mm .enabledModules .GetAll () {
1211
+ ev := events.ModuleEvent {
1212
+ ModuleName : enabledModule ,
1213
+ EventType : events .ModuleEnabled ,
1214
+ }
1215
+ mm .SendModuleEvent (ev )
1216
+ // Run OnStartup and Kubernetes.Synchronization hooks
1217
+ // on application startup or if module become enabled.
1218
+ doModuleStartup := false
1219
+ if moduleName == enabledModule {
1220
+ doModuleStartup = true
1221
+ }
1222
+ newTask := sh_task .NewTask (task .ModuleRun ).
1223
+ WithQueueName ("main" ).
1224
+ WithMetadata (task.HookMetadata {
1225
+ EventDescription : "ModuleManager-Converge-All-Modules" ,
1226
+ ModuleName : moduleName ,
1227
+ DoModuleStartup : doModuleStartup ,
1228
+ IsReloadAll : true ,
1229
+ })
1230
+ newTask .SetProp ("triggered-by" , "ModuleManager" )
1231
+ mm .dependencies .TaskQueues .GetMain ().AddLast (newTask .WithQueuedAt (time .Now ()))
1214
1232
}
1215
- mm .SendModuleEvent (events.ModuleEvent {
1216
- ModuleName : moduleName ,
1217
- EventType : events .ModuleEnabled ,
1218
- })
1219
1233
}
1220
1234
return nil
1221
1235
}
1222
-
1223
1236
// module is enabled, disable its hooks
1224
1237
mm .DisableModuleHooks (moduleName )
1225
1238
@@ -1249,27 +1262,64 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
1249
1262
}
1250
1263
} else {
1251
1264
// modules is disabled - update modulemanager's state
1252
- mm .DeleteEnabledModuleName (moduleName )
1253
- // enqueue module delete sequence
1254
- mm .PushDeleteModule (moduleName )
1255
- // throw disable module event
1256
- mm .SendModuleEvent (events.ModuleEvent {
1265
+ ev := events.ModuleEvent {
1257
1266
ModuleName : moduleName ,
1258
1267
EventType : events .ModuleDisabled ,
1259
- })
1268
+ }
1269
+ mm .SendModuleEvent (ev )
1270
+ mm .PushDeleteModule (moduleName )
1271
+ // modules is disabled - update modulemanager's state
1272
+ mm .DeleteEnabledModuleName (moduleName )
1260
1273
}
1261
1274
return nil
1262
1275
}
1263
1276
1264
1277
// module doesn't exist
1265
1278
mm .modules .Add (basicModule )
1266
1279
1267
- // a new module requires to be registered without reloading the operator
1280
+ // a new module requires to be registered
1268
1281
mm .SendModuleEvent (events.ModuleEvent {
1269
- ModuleName : moduleName ,
1270
- EventType : events .ModuleRegistered ,
1271
- RegisterWithoutReload : true ,
1282
+ ModuleName : moduleName ,
1283
+ EventType : events .ModuleRegistered ,
1272
1284
})
1285
+
1286
+ // if module is disabled in the module kube config - exit
1287
+ if ! mm .dependencies .KubeConfigManager .IsModuleEnabled (moduleName ) {
1288
+ return nil
1289
+ }
1290
+ // if the module kube config has enabled true, check enable script
1291
+ isEnabled , err := basicModule .RunEnabledScript (mm .TempDir , mm .GetEnabledModuleNames (), map [string ]string {})
1292
+ if err != nil {
1293
+ return err
1294
+ }
1295
+
1296
+ if isEnabled {
1297
+ // add module to the enabled modules list
1298
+ mm .AddEnabledModuleName (moduleName )
1299
+ for _ , enabledModule := range mm .enabledModules .GetAll () {
1300
+ ev := events.ModuleEvent {
1301
+ ModuleName : enabledModule ,
1302
+ EventType : events .ModuleEnabled ,
1303
+ }
1304
+ mm .SendModuleEvent (ev )
1305
+ // Run OnStartup and Kubernetes.Synchronization hooks
1306
+ // on application startup or if module become enabled.
1307
+ doModuleStartup := false
1308
+ if moduleName == enabledModule {
1309
+ doModuleStartup = true
1310
+ }
1311
+ newTask := sh_task .NewTask (task .ModuleRun ).
1312
+ WithQueueName ("main" ).
1313
+ WithMetadata (task.HookMetadata {
1314
+ EventDescription : "ModuleManager-Converge-All-Modules" ,
1315
+ ModuleName : moduleName ,
1316
+ DoModuleStartup : doModuleStartup ,
1317
+ IsReloadAll : true ,
1318
+ })
1319
+ newTask .SetProp ("triggered-by" , "ModuleManager" )
1320
+ mm .dependencies .TaskQueues .GetMain ().AddLast (newTask .WithQueuedAt (time .Now ()))
1321
+ }
1322
+ }
1273
1323
return nil
1274
1324
}
1275
1325
0 commit comments