From a2ae4a659e8bb689ecdbde7c8bda4f0462ecc231 Mon Sep 17 00:00:00 2001 From: David Grove Date: Sat, 14 Dec 2024 00:01:46 -0500 Subject: [PATCH] Fix improper controller-runtime cache configuration When AppWrappers are enabled, it is not correct to configure the controller-runtime cache with a filter that only allows services, secrets, etc with the RayCluster label to be cached. This breaks any AppWrapper that contains one of these resource kinds. --- main.go | 54 ++++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/main.go b/main.go index d9e46c221..044716fee 100644 --- a/main.go +++ b/main.go @@ -171,36 +171,34 @@ func main() { kubeConfig.QPS = ptr.Deref(cfg.ClientConnection.QPS, rest.DefaultQPS) setupLog.V(2).Info("REST client", "qps", kubeConfig.QPS, "burst", kubeConfig.Burst) - selector, err := labels.Parse(controllers.RayClusterNameLabel) - exitOnError(err, "unable to parse label selector") - - cacheOpts := cache.Options{ - ByObject: map[client.Object]cache.ByObject{ - &corev1.Secret{}: { - Label: selector, - }, - &corev1.Service{}: { - Label: selector, - }, - &corev1.ServiceAccount{}: { - Label: selector, - }, - &networkingv1.Ingress{}: { - Label: selector, - }, - &networkingv1.NetworkPolicy{}: { - Label: selector, - }, - &rbacv1.ClusterRoleBinding{}: { - Label: selector, - }, - }, - } - - if isOpenShift(ctx, kubeClient.DiscoveryClient) { - cacheOpts.ByObject[&routev1.Route{}] = cache.ByObject{ + cacheOpts := cache.Options{} + if cfg.AppWrapper == nil || !ptr.Deref(cfg.AppWrapper.Enabled, false) { + selector, err := labels.Parse(controllers.RayClusterNameLabel) + exitOnError(err, "unable to parse label selector") + cacheOpts.ByObject = make(map[client.Object]cache.ByObject, 7) + cacheOpts.ByObject[&corev1.Secret{}] = cache.ByObject{ + Label: selector, + } + cacheOpts.ByObject[&corev1.Service{}] = cache.ByObject{ + Label: selector, + } + cacheOpts.ByObject[&corev1.ServiceAccount{}] = cache.ByObject{ + Label: selector, + } + cacheOpts.ByObject[&networkingv1.Ingress{}] = cache.ByObject{ Label: selector, } + cacheOpts.ByObject[&networkingv1.NetworkPolicy{}] = cache.ByObject{ + Label: selector, + } + cacheOpts.ByObject[&rbacv1.ClusterRoleBinding{}] = cache.ByObject{ + Label: selector, + } + if isOpenShift(ctx, kubeClient.DiscoveryClient) { + cacheOpts.ByObject[&routev1.Route{}] = cache.ByObject{ + Label: selector, + } + } } mgr, err := ctrl.NewManager(kubeConfig, ctrl.Options{