diff --git a/cmd/background-controller/main.go b/cmd/background-controller/main.go index 69d801765f..95944d8dc8 100644 --- a/cmd/background-controller/main.go +++ b/cmd/background-controller/main.go @@ -220,7 +220,7 @@ func main() { nil, ) // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(signalCtx, kyvernoInformer, kubeKyvernoInformer, cacheInformer) { + if !internal.StartInformersAndWaitForCacheSync(signalCtx, logger, kyvernoInformer, kubeKyvernoInformer, cacheInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } @@ -258,7 +258,7 @@ func main() { os.Exit(1) } // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(signalCtx, kyvernoInformer, kubeInformer) { + if !internal.StartInformersAndWaitForCacheSync(signalCtx, logger, kyvernoInformer, kubeInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } diff --git a/cmd/cleanup-controller/main.go b/cmd/cleanup-controller/main.go index 1c6693d9a2..0d55e0ba1d 100644 --- a/cmd/cleanup-controller/main.go +++ b/cmd/cleanup-controller/main.go @@ -158,7 +158,7 @@ func main() { cleanup.Workers, ) // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(ctx, kyvernoInformer, kubeInformer, kubeKyvernoInformer) { + if !internal.StartInformersAndWaitForCacheSync(ctx, logger, kyvernoInformer, kubeInformer, kubeKyvernoInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } @@ -188,7 +188,7 @@ func main() { polLister := kyvernoInformer.Kyverno().V2alpha1().CleanupPolicies().Lister() nsLister := kubeInformer.Core().V1().Namespaces().Lister() // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(ctx, kubeKyvernoInformer, kubeInformer, kyvernoInformer) { + if !internal.StartInformersAndWaitForCacheSync(ctx, logger, kubeKyvernoInformer, kubeInformer, kyvernoInformer) { os.Exit(1) } // create handlers diff --git a/cmd/internal/informer.go b/cmd/internal/informer.go index e8452be09b..f29ee09557 100644 --- a/cmd/internal/informer.go +++ b/cmd/internal/informer.go @@ -3,6 +3,8 @@ package internal import ( "context" "reflect" + + "github.com/go-logr/logr" ) type startable interface { @@ -20,25 +22,31 @@ func StartInformers[T startable](ctx context.Context, informers ...T) { } } -func WaitForCacheSync(ctx context.Context, informers ...informer) bool { +func WaitForCacheSync(ctx context.Context, logger logr.Logger, informers ...informer) bool { ret := true for i := range informers { - for _, result := range informers[i].WaitForCacheSync(ctx.Done()) { + for t, result := range informers[i].WaitForCacheSync(ctx.Done()) { + if !result { + logger.Error(nil, "failed to wait for cache sync", "type", t) + } ret = ret && result } } return ret } -func CheckCacheSync[T comparable](status map[T]bool) bool { +func CheckCacheSync[T comparable](logger logr.Logger, status map[T]bool) bool { ret := true - for _, s := range status { - ret = ret && s + for t, result := range status { + if !result { + logger.Error(nil, "failed to wait for cache sync", "type", t) + } + ret = ret && result } return ret } -func StartInformersAndWaitForCacheSync(ctx context.Context, informers ...informer) bool { +func StartInformersAndWaitForCacheSync(ctx context.Context, logger logr.Logger, informers ...informer) bool { StartInformers(ctx, informers...) - return WaitForCacheSync(ctx, informers...) + return WaitForCacheSync(ctx, logger, informers...) } diff --git a/cmd/kyverno/main.go b/cmd/kyverno/main.go index 635bc634c3..0dbad73e06 100644 --- a/cmd/kyverno/main.go +++ b/cmd/kyverno/main.go @@ -385,7 +385,7 @@ func main() { openApiManager, ) // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(signalCtx, kyvernoInformer, kubeInformer, kubeKyvernoInformer, cacheInformer) { + if !internal.StartInformersAndWaitForCacheSync(signalCtx, logger, kyvernoInformer, kubeInformer, kubeKyvernoInformer, cacheInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } @@ -433,7 +433,7 @@ func main() { os.Exit(1) } // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(signalCtx, kyvernoInformer, kubeInformer, kubeKyvernoInformer) { + if !internal.StartInformersAndWaitForCacheSync(signalCtx, logger, kyvernoInformer, kubeInformer, kubeKyvernoInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } @@ -524,7 +524,7 @@ func main() { ) // start informers and wait for cache sync // we need to call start again because we potentially registered new informers - if !internal.StartInformersAndWaitForCacheSync(signalCtx, kyvernoInformer, kubeInformer, kubeKyvernoInformer, cacheInformer) { + if !internal.StartInformersAndWaitForCacheSync(signalCtx, logger, kyvernoInformer, kubeInformer, kubeKyvernoInformer, cacheInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } diff --git a/cmd/reports-controller/main.go b/cmd/reports-controller/main.go index 6c43b9ca75..07d47ce37c 100644 --- a/cmd/reports-controller/main.go +++ b/cmd/reports-controller/main.go @@ -305,7 +305,7 @@ func main() { } } // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(ctx, kyvernoInformer, kubeKyvernoInformer, cacheInformer) { + if !internal.StartInformersAndWaitForCacheSync(ctx, logger, kyvernoInformer, kubeKyvernoInformer, cacheInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } @@ -356,12 +356,12 @@ func main() { os.Exit(1) } // start informers and wait for cache sync - if !internal.StartInformersAndWaitForCacheSync(ctx, kyvernoInformer, kubeInformer, kubeKyvernoInformer) { + if !internal.StartInformersAndWaitForCacheSync(ctx, logger, kyvernoInformer, kubeInformer, kubeKyvernoInformer) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) } internal.StartInformers(ctx, metadataInformer) - if !internal.CheckCacheSync(metadataInformer.WaitForCacheSync(ctx.Done())) { + if !internal.CheckCacheSync(logger, metadataInformer.WaitForCacheSync(ctx.Done())) { logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync") os.Exit(1) }