Skip to content

Commit 9c43410

Browse files
committed
Merge branch 'release-v2-dev' into feat/k8s-1-18
2 parents 965b09a + 33d3cac commit 9c43410

File tree

6 files changed

+70
-71
lines changed

6 files changed

+70
-71
lines changed

internal/controller/apisixroute_controller.go

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,19 @@ func (r *ApisixRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
8080
icWatch = &networkingv1.IngressClass{}
8181
}
8282

83+
eventFilters := []predicate.Predicate{
84+
predicate.GenerationChangedPredicate{},
85+
predicate.AnnotationChangedPredicate{},
86+
predicate.NewPredicateFuncs(TypePredicate[*corev1.Secret]()),
87+
}
88+
89+
if !r.supportsEndpointSlice {
90+
eventFilters = append(eventFilters, predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()))
91+
}
92+
8393
bdr := ctrl.NewControllerManagedBy(mgr).
8494
For(&apiv2.ApisixRoute{}).
85-
WithEventFilter(
86-
predicate.Or(
87-
predicate.GenerationChangedPredicate{},
88-
predicate.AnnotationChangedPredicate{},
89-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()),
90-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Secret]()),
91-
),
92-
).
95+
WithEventFilter(predicate.Or(eventFilters...)).
9396
Watches(
9497
icWatch,
9598
handler.EnqueueRequestsFromMapFunc(r.listApisixRouteForIngressClass),
@@ -102,16 +105,10 @@ func (r *ApisixRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
102105
)
103106

104107
// Conditionally watch EndpointSlice or Endpoints based on cluster API support
105-
if r.supportsEndpointSlice {
106-
bdr = bdr.Watches(&discoveryv1.EndpointSlice{},
107-
handler.EnqueueRequestsFromMapFunc(r.listApisixRoutesForService),
108-
)
109-
} else {
110-
r.Log.Info("EndpointSlice API not available, falling back to Endpoints API for service discovery")
111-
bdr = bdr.Watches(&corev1.Endpoints{},
112-
handler.EnqueueRequestsFromMapFunc(r.listApisixRoutesForEndpoints),
113-
)
114-
}
108+
bdr = watchEndpointSliceOrEndpoints(bdr, r.supportsEndpointSlice,
109+
r.listApisixRoutesForService,
110+
r.listApisixRoutesForEndpoints,
111+
r.Log)
115112

116113
return bdr.
117114
Watches(&corev1.Secret{},

internal/controller/gatewayproxy_controller.go

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,27 @@ func (r *GatewayProxyController) SetupWithManager(mrg ctrl.Manager) error {
6363
r.supportsEndpointSlice = pkgutils.HasAPIResource(mrg, &discoveryv1.EndpointSlice{})
6464
r.supportsGateway = pkgutils.HasAPIResource(mrg, &gatewayv1.Gateway{})
6565

66+
eventFilters := []predicate.Predicate{
67+
predicate.GenerationChangedPredicate{},
68+
predicate.NewPredicateFuncs(TypePredicate[*corev1.Secret]()),
69+
}
70+
71+
if !r.supportsEndpointSlice {
72+
eventFilters = append(eventFilters, predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()))
73+
}
74+
6675
bdr := ctrl.NewControllerManagedBy(mrg).
6776
For(&v1alpha1.GatewayProxy{}).
68-
WithEventFilter(
69-
predicate.Or(
70-
predicate.GenerationChangedPredicate{},
71-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()),
72-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Secret]()),
73-
),
74-
).
77+
WithEventFilter(predicate.Or(eventFilters...)).
7578
Watches(&corev1.Service{},
7679
handler.EnqueueRequestsFromMapFunc(r.listGatewayProxiesForProviderService),
7780
)
7881

7982
// Conditionally watch EndpointSlice or Endpoints based on cluster API support
80-
if r.supportsEndpointSlice {
81-
bdr = bdr.Watches(&discoveryv1.EndpointSlice{},
82-
handler.EnqueueRequestsFromMapFunc(r.listGatewayProxiesForProviderEndpointSlice),
83-
)
84-
} else {
85-
r.Log.Info("EndpointSlice API not available, falling back to Endpoints API for provider service discovery")
86-
bdr = bdr.Watches(&corev1.Endpoints{},
87-
handler.EnqueueRequestsFromMapFunc(r.listGatewayProxiesForProviderEndpoints),
88-
)
89-
}
83+
bdr = watchEndpointSliceOrEndpoints(bdr, r.supportsEndpointSlice,
84+
r.listGatewayProxiesForProviderEndpointSlice,
85+
r.listGatewayProxiesForProviderEndpoints,
86+
r.Log)
9087

9188
return bdr.
9289
Watches(&corev1.Secret{},

internal/controller/httproute_controller.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,25 +80,23 @@ func (r *HTTPRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
8080
// Check and store EndpointSlice API support
8181
r.supportsEndpointSlice = pkgutils.HasAPIResource(mgr, &discoveryv1.EndpointSlice{})
8282

83+
eventFilters := []predicate.Predicate{
84+
predicate.GenerationChangedPredicate{},
85+
}
86+
87+
if !r.supportsEndpointSlice {
88+
eventFilters = append(eventFilters, predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()))
89+
}
90+
8391
bdr := ctrl.NewControllerManagedBy(mgr).
8492
For(&gatewayv1.HTTPRoute{}).
85-
WithEventFilter(
86-
predicate.Or(
87-
predicate.GenerationChangedPredicate{},
88-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()),
89-
))
93+
WithEventFilter(predicate.Or(eventFilters...))
9094

9195
// Conditionally watch EndpointSlice or Endpoints based on cluster API support
92-
if r.supportsEndpointSlice {
93-
bdr = bdr.Watches(&discoveryv1.EndpointSlice{},
94-
handler.EnqueueRequestsFromMapFunc(r.listHTTPRoutesByServiceBef),
95-
)
96-
} else {
97-
r.Log.Info("EndpointSlice API not available, falling back to Endpoints API for service discovery")
98-
bdr = bdr.Watches(&corev1.Endpoints{},
99-
handler.EnqueueRequestsFromMapFunc(r.listHTTPRoutesByServiceForEndpoints),
100-
)
101-
}
96+
bdr = watchEndpointSliceOrEndpoints(bdr, r.supportsEndpointSlice,
97+
r.listHTTPRoutesByServiceBef,
98+
r.listHTTPRoutesByServiceForEndpoints,
99+
r.Log)
102100

103101
bdr = bdr.
104102
Watches(&v1alpha1.PluginConfig{},

internal/controller/ingress_controller.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,23 @@ func (r *IngressReconciler) SetupWithManager(mgr ctrl.Manager) error {
7474
// Check and store EndpointSlice API support
7575
r.supportsEndpointSlice = pkgutils.HasAPIResource(mgr, &discoveryv1.EndpointSlice{})
7676

77+
eventFilters := []predicate.Predicate{
78+
predicate.GenerationChangedPredicate{},
79+
predicate.AnnotationChangedPredicate{},
80+
predicate.NewPredicateFuncs(TypePredicate[*corev1.Secret]()),
81+
}
82+
83+
if !r.supportsEndpointSlice {
84+
eventFilters = append(eventFilters, predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()))
85+
}
86+
7787
bdr := ctrl.NewControllerManagedBy(mgr).
7888
For(&networkingv1.Ingress{},
7989
builder.WithPredicates(
8090
predicate.NewPredicateFuncs(r.checkIngressClass),
8191
),
8292
).
83-
WithEventFilter(
84-
predicate.Or(
85-
predicate.GenerationChangedPredicate{},
86-
predicate.AnnotationChangedPredicate{},
87-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Endpoints]()),
88-
predicate.NewPredicateFuncs(TypePredicate[*corev1.Secret]()),
89-
),
90-
).
93+
WithEventFilter(predicate.Or(eventFilters...)).
9194
Watches(
9295
&networkingv1.IngressClass{},
9396
handler.EnqueueRequestsFromMapFunc(r.listIngressForIngressClass),
@@ -97,18 +100,10 @@ func (r *IngressReconciler) SetupWithManager(mgr ctrl.Manager) error {
97100
)
98101

99102
// Conditionally watch EndpointSlice or Endpoints based on cluster API support
100-
if r.supportsEndpointSlice {
101-
bdr = bdr.Watches(
102-
&discoveryv1.EndpointSlice{},
103-
handler.EnqueueRequestsFromMapFunc(r.listIngressesByService),
104-
)
105-
} else {
106-
r.Log.Info("EndpointSlice API not available, falling back to Endpoints API for service discovery")
107-
bdr = bdr.Watches(
108-
&corev1.Endpoints{},
109-
handler.EnqueueRequestsFromMapFunc(r.listIngressesByEndpoints),
110-
)
111-
}
103+
bdr = watchEndpointSliceOrEndpoints(bdr, r.supportsEndpointSlice,
104+
r.listIngressesByService,
105+
r.listIngressesByEndpoints,
106+
r.Log)
112107

113108
return bdr.
114109
Watches(

internal/controller/utils.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ import (
4242
"k8s.io/apimachinery/pkg/labels"
4343
k8stypes "k8s.io/apimachinery/pkg/types"
4444
"k8s.io/utils/ptr"
45+
ctrl "sigs.k8s.io/controller-runtime"
4546
"sigs.k8s.io/controller-runtime/pkg/client"
4647
"sigs.k8s.io/controller-runtime/pkg/event"
48+
"sigs.k8s.io/controller-runtime/pkg/handler"
4749
"sigs.k8s.io/controller-runtime/pkg/predicate"
4850
"sigs.k8s.io/controller-runtime/pkg/reconcile"
4951
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -1602,3 +1604,13 @@ func GetIngressClassName(obj client.Object) string {
16021604
}
16031605
return ""
16041606
}
1607+
1608+
// watchEndpointSliceOrEndpoints adds watcher for EndpointSlice or Endpoints based on cluster API support
1609+
func watchEndpointSliceOrEndpoints(bdr *ctrl.Builder, supportsEndpointSlice bool, endpointSliceMapFunc, endpointsMapFunc handler.MapFunc, log logr.Logger) *ctrl.Builder {
1610+
if supportsEndpointSlice {
1611+
return bdr.Watches(&discoveryv1.EndpointSlice{}, handler.EnqueueRequestsFromMapFunc(endpointSliceMapFunc))
1612+
} else {
1613+
log.Info("EndpointSlice API not available, falling back to Endpoints API for service discovery")
1614+
return bdr.Watches(&corev1.Endpoints{}, handler.EnqueueRequestsFromMapFunc(endpointsMapFunc))
1615+
}
1616+
}

pkg/utils/endpoints.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func ConvertEndpointsToEndpointSlice(ep *corev1.Endpoints) []discoveryv1.Endpoin
6767

6868
for i, subset := range ep.Subsets {
6969
// Create ports array
70-
var ports []discoveryv1.EndpointPort
70+
ports := make([]discoveryv1.EndpointPort, 0, len(subset.Ports))
7171
for _, p := range subset.Ports {
7272
epPort := discoveryv1.EndpointPort{
7373
Port: &p.Port,

0 commit comments

Comments
 (0)