From 717291f1737d4e5d148acb9541b154f9ffc8f951 Mon Sep 17 00:00:00 2001 From: Zanis <22601571+ZanisO@users.noreply.github.com> Date: Sun, 19 Jan 2025 23:46:29 +0000 Subject: [PATCH] Added check to see if CSI CRDs are installed before running controller --- internal/pkg/cmd/reloader.go | 10 ++++++++-- pkg/kube/client.go | 24 +++++++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/internal/pkg/cmd/reloader.go b/internal/pkg/cmd/reloader.go index a1e2482..f17b2a2 100644 --- a/internal/pkg/cmd/reloader.go +++ b/internal/pkg/cmd/reloader.go @@ -179,8 +179,14 @@ func startReloader(cmd *cobra.Command, args []string) { var controllers []*controller.Controller for k := range kube.ResourceMap { - if k == "secretproviderclasspodstatuses" && !options.EnableCSIIntegration { - continue + if k == "secretproviderclasspodstatuses" { + if !options.EnableCSIIntegration { + continue + } + if !kube.IsCSIInstalled { + logrus.Infof("Can't run CSI controller as CSI CRDs are not installed") + continue + } } if ignoredResourcesList.Contains(k) || (len(namespaceLabelSelector) == 0 && k == "namespaces") { diff --git a/pkg/kube/client.go b/pkg/kube/client.go index af67319..9582929 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -25,6 +25,8 @@ type Clients struct { var ( // IsOpenshift is true if environment is Openshift, it is false if environment is Kubernetes IsOpenshift = isOpenshift() + // IsCSIEnabled is true if environment has CSI provider installed, otherwise false + IsCSIInstalled = isCSIInstalled() ) // GetClients returns a `Clients` object containing both openshift and kubernetes clients with an openshift identifier @@ -52,9 +54,11 @@ func GetClients() Clients { var csiClient *csiclient.Clientset - csiClient, err = GetCSIClient() - if err != nil { - logrus.Warnf("Unable to create CSI client error = %v", err) + if IsCSIInstalled { + csiClient, err = GetCSIClient() + if err != nil { + logrus.Warnf("Unable to create CSI client error = %v", err) + } } return Clients{ @@ -73,6 +77,20 @@ func GetArgoRolloutClient() (*argorollout.Clientset, error) { return argorollout.NewForConfig(config) } +func isCSIInstalled() bool { + client, err := GetKubernetesClient() + if err != nil { + logrus.Fatalf("Unable to create Kubernetes client error = %v", err) + } + _, err = client.RESTClient().Get().AbsPath("/apis/secrets-store.csi.x-k8s.io/v1").Do(context.TODO()).Raw() + if err == nil { + logrus.Info("CSI provider is installed") + return true + } + logrus.Info("CSI provider is not installed") + return false +} + func GetCSIClient() (*csiclient.Clientset, error) { config, err := getConfig() if err != nil {