@@ -12,6 +12,7 @@ import (
1212
1313 "github.com/flant/addon-operator/pkg/kube_config_manager/backend"
1414 "github.com/flant/addon-operator/pkg/kube_config_manager/config"
15+ kcmcontext "github.com/flant/addon-operator/pkg/kube_config_manager/context"
1516 "github.com/flant/addon-operator/pkg/utils"
1617 runtimeConfig "github.com/flant/shell-operator/pkg/config"
1718)
@@ -53,8 +54,9 @@ func NewKubeConfigManager(ctx context.Context, bk backend.ConfigHandler, runtime
5354 if err != nil {
5455 return err
5556 }
56- //nolint: revive,staticcheck // basic type is enough here
57- cctx = context .WithValue (cctx , "kube-config-manager-debug" , val )
57+
58+ cctx = kcmcontext .WithKubeConfigManagerDebug (cctx , val )
59+
5860 return nil
5961 },
6062 nil ,
@@ -241,84 +243,90 @@ func (kcm *KubeConfigManager) handleConfigEvent(obj config.Event) {
241243 }
242244
243245 default :
244- // some module values
245- modulesChanged := []string {}
246- modulesStateChanged := []string {}
247- moduleMaintenanceChanged := make (map [string ]utils.Maintenance )
248-
249- // module update
250246 kcm .m .Lock ()
251247 defer kcm .m .Unlock ()
248+
252249 moduleName := obj .Key
253250 moduleCfg := obj .Config .Modules [obj .Key ]
254- if obj .Op == config .EventDelete {
255- kcm .logger .Info ("Module section deleted" , slog .String ("moduleName" , moduleName ))
256- modulesChanged = append (modulesChanged , moduleName )
257- if kcm .currentConfig .Modules [moduleName ].GetEnabled () != "" && kcm .currentConfig .Modules [moduleName ].GetEnabled () != "n/d" {
258- modulesStateChanged = append (modulesStateChanged , moduleName )
259- }
260251
261- if kcm .currentConfig .Modules [moduleName ].GetMaintenanceState () == utils .NoResourceReconciliation {
262- moduleMaintenanceChanged [moduleName ] = utils .Managed
263- }
252+ switch obj .Op {
253+ case config .EventDelete :
254+ kcm .handleDeleteEvent (moduleName , moduleCfg )
255+ default :
256+ kcm .handleUpdateEvent (moduleName , moduleCfg )
257+ }
258+ }
259+ }
264260
265- moduleCfg .Reset ()
266- moduleCfg .Checksum = moduleCfg .ModuleConfig .Checksum ()
267- kcm .currentConfig .Modules [obj .Key ] = moduleCfg
268- kcm .configEventCh <- config.KubeConfigEvent {
269- Type : config .KubeConfigChanged ,
270- ModuleValuesChanged : modulesChanged ,
271- ModuleEnabledStateChanged : modulesStateChanged ,
272- ModuleMaintenanceChanged : moduleMaintenanceChanged ,
273- }
274- return
261+ func (kcm * KubeConfigManager ) handleDeleteEvent (moduleName string , cfg * config.ModuleKubeConfig ) {
262+ var modulesChanged []string
263+ var modulesStateChanged []string
264+ moduleMaintenanceChanged := make (map [string ]utils.Maintenance )
265+
266+ kcm .logger .Info ("module section deleted" , slog .String ("name" , moduleName ))
267+ modulesChanged = append (modulesChanged , moduleName )
268+ if kcm .currentConfig .Modules [moduleName ].GetEnabled () != "" && kcm .currentConfig .Modules [moduleName ].GetEnabled () != "n/d" {
269+ modulesStateChanged = append (modulesStateChanged , moduleName )
270+ }
271+
272+ if kcm .currentConfig .Modules [moduleName ].GetMaintenanceState () == utils .NoResourceReconciliation {
273+ moduleMaintenanceChanged [moduleName ] = utils .Managed
274+ }
275+
276+ cfg .Reset ()
277+ cfg .Checksum = cfg .ModuleConfig .Checksum ()
278+ kcm .currentConfig .Modules [moduleName ] = cfg
279+
280+ kcm .configEventCh <- config.KubeConfigEvent {
281+ Type : config .KubeConfigChanged ,
282+ ModuleValuesChanged : modulesChanged ,
283+ ModuleEnabledStateChanged : modulesStateChanged ,
284+ ModuleMaintenanceChanged : moduleMaintenanceChanged ,
285+ }
286+ }
287+
288+ func (kcm * KubeConfigManager ) handleUpdateEvent (moduleName string , cfg * config.ModuleKubeConfig ) {
289+ var modulesChanged []string
290+ var modulesStateChanged []string
291+ moduleMaintenanceChanged := make (map [string ]utils.Maintenance )
292+
293+ var changed bool
294+
295+ if currentCfg , has := kcm .currentConfig .Modules [moduleName ]; has {
296+ if currentCfg .Checksum != cfg .Checksum {
297+ changed = true
298+ modulesChanged = append (modulesChanged , moduleName )
275299 }
276- // Module section is changed if a new checksum doesn't equal to saved one and isn't in known checksums, or the module new state doesn't equal to the previous one.
277- if kcm .knownChecksums .HasEqualChecksum (moduleName , moduleCfg .Checksum ) {
278- // Remove known checksum, do not fire event on self-update.
279- kcm .knownChecksums .Remove (moduleName , moduleCfg .Checksum )
280- } else {
281- if currModuleCfg , has := kcm .currentConfig .Modules [moduleName ]; has {
282- if currModuleCfg .Checksum != moduleCfg .Checksum {
283- modulesChanged = append (modulesChanged , moduleName )
284- }
285300
286- if kcm .currentConfig .Modules [moduleName ].GetEnabled () != moduleCfg .GetEnabled () {
287- modulesStateChanged = append (modulesStateChanged , moduleName )
288- }
301+ if currentCfg .GetEnabled () != cfg .GetEnabled () {
302+ changed = true
303+ modulesStateChanged = append (modulesStateChanged , moduleName )
304+ }
289305
290- if kcm .currentConfig .Modules [moduleName ].GetMaintenanceState () != moduleCfg .GetMaintenanceState () {
291- moduleMaintenanceChanged [moduleName ] = moduleCfg .GetMaintenanceState ()
292- }
293- kcm .logger .Info ("Module section changed. Enabled flag transition." ,
294- slog .String ("moduleName" , moduleName ),
295- slog .String ("previous" , kcm .currentConfig .Modules [moduleName ].GetEnabled ()),
296- slog .String ("current" , moduleCfg .GetEnabled ()),
297- slog .String ("maintenanceFlag" , moduleCfg .GetMaintenanceState ().String ()))
298- } else {
299- modulesChanged = append (modulesChanged , moduleName )
300- if moduleCfg .GetEnabled () != "" && moduleCfg .GetEnabled () != "n/d" {
301- modulesStateChanged = append (modulesStateChanged , moduleName )
302- }
306+ if currentCfg .GetMaintenanceState () != cfg .GetMaintenanceState () {
307+ changed = true
308+ moduleMaintenanceChanged [moduleName ] = currentCfg .GetMaintenanceState ()
309+ }
310+ } else {
311+ changed = true
303312
304- if moduleCfg .GetMaintenanceState () == utils .NoResourceReconciliation {
305- moduleMaintenanceChanged [moduleName ] = utils .NoResourceReconciliation
306- }
307- kcm .logger .Info ("Module section added" ,
308- slog .String ("moduleName" , moduleName ),
309- slog .String ("enabledFlag" , moduleCfg .GetEnabled ()),
310- slog .String ("maintenanceFlag" , moduleCfg .GetMaintenanceState ().String ()))
311- }
313+ modulesChanged = append (modulesChanged , moduleName )
314+ if cfg .GetEnabled () != "" && cfg .GetEnabled () != "n/d" {
315+ modulesStateChanged = append (modulesStateChanged , moduleName )
312316 }
313317
314- if len (modulesChanged )+ len (modulesStateChanged )+ len (moduleMaintenanceChanged ) > 0 {
315- kcm .currentConfig .Modules [obj .Key ] = moduleCfg
316- kcm .configEventCh <- config.KubeConfigEvent {
317- Type : config .KubeConfigChanged ,
318- ModuleValuesChanged : modulesChanged ,
319- ModuleEnabledStateChanged : modulesStateChanged ,
320- ModuleMaintenanceChanged : moduleMaintenanceChanged ,
321- }
318+ if cfg .GetMaintenanceState () == utils .NoResourceReconciliation {
319+ moduleMaintenanceChanged [moduleName ] = utils .NoResourceReconciliation
320+ }
321+ }
322+
323+ if changed {
324+ kcm .currentConfig .Modules [moduleName ] = cfg
325+ kcm .configEventCh <- config.KubeConfigEvent {
326+ Type : config .KubeConfigChanged ,
327+ ModuleValuesChanged : modulesChanged ,
328+ ModuleEnabledStateChanged : modulesStateChanged ,
329+ ModuleMaintenanceChanged : moduleMaintenanceChanged ,
322330 }
323331 }
324332}
0 commit comments