From 248e6be0730874e34f3bad332e19a0167305a89d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?=
 <charles.edouard@nirmata.com>
Date: Tue, 6 Jun 2023 17:47:28 +0200
Subject: [PATCH] fix: error reported when sanity check fails (#7439)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
---
 cmd/kyverno/main.go   |  6 +-----
 pkg/utils/kube/crd.go | 16 ++++++++++------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/cmd/kyverno/main.go b/cmd/kyverno/main.go
index edd61745fa..dde52969a1 100644
--- a/cmd/kyverno/main.go
+++ b/cmd/kyverno/main.go
@@ -5,7 +5,6 @@ import (
 	"context"
 	"errors"
 	"flag"
-	"fmt"
 	"os"
 	"strings"
 	"sync"
@@ -62,10 +61,7 @@ func showWarnings(logger logr.Logger) {
 }
 
 func sanityChecks(apiserverClient apiserver.Interface) error {
-	if !kubeutils.CRDsInstalled(apiserverClient) {
-		return fmt.Errorf("CRDs not installed")
-	}
-	return nil
+	return kubeutils.CRDsInstalled(apiserverClient)
 }
 
 func createNonLeaderControllers(
diff --git a/pkg/utils/kube/crd.go b/pkg/utils/kube/crd.go
index ba1d6f699f..52ecc3d040 100644
--- a/pkg/utils/kube/crd.go
+++ b/pkg/utils/kube/crd.go
@@ -2,13 +2,15 @@ package kube
 
 import (
 	"context"
+	"fmt"
 
+	"go.uber.org/multierr"
 	apiserver "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 // CRDsInstalled checks if the Kyverno CRDs are installed or not
-func CRDsInstalled(apiserverClient apiserver.Interface) bool {
+func CRDsInstalled(apiserverClient apiserver.Interface) error {
 	kyvernoCRDs := []string{
 		"admissionreports.kyverno.io",
 		"backgroundscanreports.kyverno.io",
@@ -23,15 +25,17 @@ func CRDsInstalled(apiserverClient apiserver.Interface) bool {
 		"policyreports.wgpolicyk8s.io",
 		"updaterequests.kyverno.io",
 	}
+	var errs []error
 	for _, crd := range kyvernoCRDs {
-		if !isCRDInstalled(apiserverClient, crd) {
-			return false
+		err := isCRDInstalled(apiserverClient, crd)
+		if err != nil {
+			errs = append(errs, fmt.Errorf("failed to check CRD %s is installed: %s", crd, err))
 		}
 	}
-	return true
+	return multierr.Combine(errs...)
 }
 
-func isCRDInstalled(apiserverClient apiserver.Interface, kind string) bool {
+func isCRDInstalled(apiserverClient apiserver.Interface, kind string) error {
 	_, err := apiserverClient.ApiextensionsV1().CustomResourceDefinitions().Get(context.Background(), kind, metav1.GetOptions{})
-	return err == nil
+	return err
 }