@@ -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