diff --git a/pkg/addon-operator/converge/converge.go b/pkg/addon-operator/converge/converge.go index e7754e8be..d6e4a27b9 100644 --- a/pkg/addon-operator/converge/converge.go +++ b/pkg/addon-operator/converge/converge.go @@ -16,6 +16,9 @@ type ConvergeState struct { Activation string CRDsEnsured bool + onConvergeStart func() + onConvergeFinish func() + phaseMu sync.RWMutex phase ConvergePhase firstRunPhase FirstConvergePhase @@ -47,6 +50,14 @@ func NewConvergeState() *ConvergeState { } } +func (cs *ConvergeState) SetOnConvergeStart(callback func()) { + cs.onConvergeStart = callback +} + +func (cs *ConvergeState) SetOnConvergeFinish(callback func()) { + cs.onConvergeFinish = callback +} + func (cs *ConvergeState) SetFirstRunPhase(ph FirstConvergePhase) { cs.phaseMu.Lock() defer cs.phaseMu.Unlock() @@ -66,6 +77,14 @@ func (cs *ConvergeState) SetPhase(ph ConvergePhase) { cs.phaseMu.Lock() defer cs.phaseMu.Unlock() cs.phase = ph + + if ph == RunBeforeAll && cs.onConvergeStart != nil { + cs.onConvergeStart() + } + + if ph == StandBy && cs.onConvergeFinish != nil { + cs.onConvergeFinish() + } } func (cs *ConvergeState) GetPhase() ConvergePhase { diff --git a/pkg/addon-operator/operator.go b/pkg/addon-operator/operator.go index 372a14524..3c7880a19 100644 --- a/pkg/addon-operator/operator.go +++ b/pkg/addon-operator/operator.go @@ -105,6 +105,18 @@ func WithLogger(logger *log.Logger) Option { } } +func WithOnConvergeStart(callback func()) Option { + return func(operator *AddonOperator) { + operator.ConvergeState.SetOnConvergeStart(callback) + } +} + +func WithOnConvergeFinish(callback func()) Option { + return func(operator *AddonOperator) { + operator.ConvergeState.SetOnConvergeFinish(callback) + } +} + func NewAddonOperator(ctx context.Context, opts ...Option) *AddonOperator { cctx, cancel := context.WithCancel(ctx) @@ -657,7 +669,7 @@ func (op *AddonOperator) CreateAndStartQueuesForModuleHooks(moduleName string) { // log.Debugf("Queue '%s' started for module 'kubernetes' hook %s", hookBinding.Queue, hookName) // } // } - //} + // } } func (op *AddonOperator) CreateReloadModulesTasks(moduleNames []string, logLabels map[string]string, eventDescription string) []sh_task.Task {