mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 07:57:07 +00:00
38 lines
800 B
Go
38 lines
800 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"reflect"
|
||
|
)
|
||
|
|
||
|
// TODO: eventually move this in an util package
|
||
|
type startable interface {
|
||
|
Start(stopCh <-chan struct{})
|
||
|
}
|
||
|
|
||
|
type informer interface {
|
||
|
startable
|
||
|
WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
|
||
|
}
|
||
|
|
||
|
func startInformers[T startable](ctx context.Context, informers ...T) {
|
||
|
for i := range informers {
|
||
|
informers[i].Start(ctx.Done())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func waitForCacheSync(ctx context.Context, informers ...informer) bool {
|
||
|
ret := true
|
||
|
for i := range informers {
|
||
|
for _, result := range informers[i].WaitForCacheSync(ctx.Done()) {
|
||
|
ret = ret && result
|
||
|
}
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
func startInformersAndWaitForCacheSync(ctx context.Context, informers ...informer) bool {
|
||
|
startInformers(ctx, informers...)
|
||
|
return waitForCacheSync(ctx, informers...)
|
||
|
}
|