@@ -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,7 @@ 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
9193// +kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=rolebindings,verbs=get;list;watch;create;update
9294
9395func (r * RabbitmqClusterReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
@@ -342,7 +344,8 @@ func (r *RabbitmqClusterReconciler) updateStatusConditions(ctx context.Context,
342344
343345func (r * RabbitmqClusterReconciler ) getChildResources (ctx context.Context , rmq * rabbitmqv1beta1.RabbitmqCluster ) ([]runtime.Object , error ) {
344346 sts := & appsv1.StatefulSet {}
345- endPoints := & corev1.Endpoints {}
347+ endpointSliceList := & discoveryv1.EndpointSliceList {}
348+ endpointSlice := & discoveryv1.EndpointSlice {}
346349
347350 if err := r .Get (ctx ,
348351 types.NamespacedName {Name : rmq .ChildResourceName ("server" ), Namespace : rmq .Namespace },
@@ -352,15 +355,25 @@ func (r *RabbitmqClusterReconciler) getChildResources(ctx context.Context, rmq *
352355 sts = nil
353356 }
354357
355- if err := r .Get (ctx ,
356- types.NamespacedName {Name : rmq .ChildResourceName (resource .ServiceSuffix ), Namespace : rmq .Namespace },
357- endPoints ); err != nil && ! k8serrors .IsNotFound (err ) {
358+ selector , err := labels .Parse (fmt .Sprintf ("%s=%s" , discoveryv1 .LabelServiceName , rmq .Name ))
359+ if err != nil {
358360 return nil , err
359- } else if k8serrors .IsNotFound (err ) {
360- endPoints = nil
361361 }
362362
363- return []runtime.Object {sts , endPoints }, nil
363+ listOptions := client.ListOptions {
364+ LabelSelector : selector ,
365+ Namespace : rmq .Namespace ,
366+ }
367+
368+ if err := r .List (ctx , endpointSliceList , & listOptions ); err != nil {
369+ return nil , err
370+ } else if len (endpointSliceList .Items ) == 0 {
371+ endpointSlice = nil
372+ } else {
373+ endpointSlice = & endpointSliceList .Items [0 ]
374+ }
375+
376+ return []runtime.Object {sts , endpointSlice }, nil
364377}
365378
366379func (r * RabbitmqClusterReconciler ) setReconcileSuccess (ctx context.Context , rabbitmqCluster * rabbitmqv1beta1.RabbitmqCluster , condition corev1.ConditionStatus , reason , msg string ) {
0 commit comments