@@ -30,6 +30,7 @@ import (
3030	"k8s.io/client-go/rest" 
3131	"k8s.io/client-go/tools/record" 
3232
33+ 	"k8s.io/apimachinery/pkg/labels" 
3334	"k8s.io/apimachinery/pkg/types" 
3435
3536	clientretry "k8s.io/client-go/util/retry" 
@@ -43,6 +44,7 @@ import (
4344	rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/v2/api/v1beta1" 
4445	appsv1 "k8s.io/api/apps/v1" 
4546	corev1 "k8s.io/api/core/v1" 
47+ 	discoveryv1 "k8s.io/api/discovery/v1" 
4648	rbacv1 "k8s.io/api/rbac/v1" 
4749	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 
4850)
@@ -77,7 +79,6 @@ type RabbitmqClusterReconciler struct {
7779// +kubebuilder:rbac:groups="",resources=pods/exec,verbs=create 
7880// +kubebuilder:rbac:groups="",resources=pods,verbs=update;get;list;watch 
7981// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update 
80- // +kubebuilder:rbac:groups="",resources=endpoints,verbs=get;watch;list 
8182// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;delete 
8283// +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch;create;update 
8384// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;update 
@@ -88,6 +89,8 @@ type RabbitmqClusterReconciler struct {
8889// +kubebuilder:rbac:groups="",resources=serviceaccounts,verbs=get;list;watch;create;update 
8990// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list;watch;create;update 
9091// +kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=roles,verbs=get;list;watch;create;update 
92+ // +kubebuilder:rbac:groups="discovery.k8s.io",resources=endpointslices,verbs=get;list 
93+ // +kubebuilder:rbac:groups="",resources=endpoints,verbs=get;watch;list 
9194// +kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=rolebindings,verbs=get;list;watch;create;update 
9295
9396func  (r  * RabbitmqClusterReconciler ) Reconcile (ctx  context.Context , req  ctrl.Request ) (ctrl.Result , error ) {
@@ -342,7 +345,8 @@ func (r *RabbitmqClusterReconciler) updateStatusConditions(ctx context.Context,
342345
343346func  (r  * RabbitmqClusterReconciler ) getChildResources (ctx  context.Context , rmq  * rabbitmqv1beta1.RabbitmqCluster ) ([]runtime.Object , error ) {
344347	sts  :=  & appsv1.StatefulSet {}
345- 	endPoints  :=  & corev1.Endpoints {}
348+ 	endpointSliceList  :=  & discoveryv1.EndpointSliceList {}
349+ 	endpointSlice  :=  & discoveryv1.EndpointSlice {}
346350
347351	if  err  :=  r .Get (ctx ,
348352		types.NamespacedName {Name : rmq .ChildResourceName ("server" ), Namespace : rmq .Namespace },
@@ -352,15 +356,25 @@ func (r *RabbitmqClusterReconciler) getChildResources(ctx context.Context, rmq *
352356		sts  =  nil 
353357	}
354358
355- 	if  err  :=  r .Get (ctx ,
356- 		types.NamespacedName {Name : rmq .ChildResourceName (resource .ServiceSuffix ), Namespace : rmq .Namespace },
357- 		endPoints ); err  !=  nil  &&  ! k8serrors .IsNotFound (err ) {
359+ 	selector , err  :=  labels .Parse (fmt .Sprintf ("%s=%s" , discoveryv1 .LabelServiceName , rmq .Name ))
360+ 	if  err  !=  nil  {
358361		return  nil , err 
359- 	} else  if  k8serrors .IsNotFound (err ) {
360- 		endPoints  =  nil 
361362	}
362363
363- 	return  []runtime.Object {sts , endPoints }, nil 
364+ 	listOptions  :=  client.ListOptions {
365+ 		LabelSelector : selector ,
366+ 		Namespace :     rmq .Namespace ,
367+ 	}
368+ 
369+ 	if  err  :=  r .List (ctx , endpointSliceList , & listOptions ); err  !=  nil  {
370+ 		return  nil , err 
371+ 	} else  if  len (endpointSliceList .Items ) ==  0  {
372+ 		endpointSlice  =  nil 
373+ 	} else  {
374+ 		endpointSlice  =  & endpointSliceList .Items [0 ]
375+ 	}
376+ 
377+ 	return  []runtime.Object {sts , endpointSlice }, nil 
364378}
365379
366380func  (r  * RabbitmqClusterReconciler ) setReconcileSuccess (ctx  context.Context , rabbitmqCluster  * rabbitmqv1beta1.RabbitmqCluster , condition  corev1.ConditionStatus , reason , msg  string ) {
0 commit comments