@@ -42,7 +42,7 @@ func (r *IngressReconciler) SetupWithManager(mgr ctrl.Manager) error {
4242 predicate .NewPredicateFuncs (r .checkIngressClass ),
4343 ),
4444 ).
45- WithEventFilter (predicate. GenerationChangedPredicate {}).
45+ WithEventFilter (CombinedPredicate {}).
4646 Watches (
4747 & networkingv1.IngressClass {},
4848 handler .EnqueueRequestsFromMapFunc (r .listIngressForIngressClass ),
@@ -135,16 +135,19 @@ func (r *IngressReconciler) checkIngressClass(obj client.Object) bool {
135135 // find the ingress class that is marked as default
136136 for _ , ic := range ingressClassList .Items {
137137 if IsDefaultIngressClass (& ic ) && matchesController (ic .Spec .Controller ) {
138+ log .Debugw ("match the default ingress class" )
138139 return true
139140 }
140141 }
141142
143+ log .Debugw ("no default ingress class found" )
142144 return false
143145 }
144146
145147 configuredClass := config .GetIngressClass ()
146148 // if the ingress class name matches the configured ingress class name, return true
147149 if * ingress .Spec .IngressClassName == configuredClass {
150+ log .Debugw ("match the configured ingress class name" )
148151 return true
149152 }
150153
@@ -169,25 +172,55 @@ func (r *IngressReconciler) matchesIngressController(obj client.Object) bool {
169172}
170173
171174// listIngressForIngressClass list all ingresses that use a specific ingress class
172- func (r * IngressReconciler ) listIngressForIngressClass (ctx context.Context , ingressClass client.Object ) []reconcile.Request {
173- ingressList := & networkingv1.IngressList {}
174- if err := r .List (ctx , ingressList , client.MatchingFields {
175- indexer .IngressClassRef : ingressClass .GetName (),
176- }); err != nil {
177- r .Log .Error (err , "failed to list ingresses for ingress class" , "ingressclass" , ingressClass .GetName ())
175+ func (r * IngressReconciler ) listIngressForIngressClass (ctx context.Context , obj client.Object ) []reconcile.Request {
176+ ingressClass , ok := obj .(* networkingv1.IngressClass )
177+ if ! ok {
178+ r .Log .Error (fmt .Errorf ("unexpected object type" ), "failed to convert object to IngressClass" )
178179 return nil
179180 }
180181
181- requests := make ([]reconcile.Request , 0 , len (ingressList .Items ))
182- for _ , ingress := range ingressList .Items {
183- requests = append (requests , reconcile.Request {
184- NamespacedName : client.ObjectKey {
185- Namespace : ingress .Namespace ,
186- Name : ingress .Name ,
187- },
188- })
182+ // check if the ingress class is the default ingress class
183+ if IsDefaultIngressClass (ingressClass ) {
184+ ingressList := & networkingv1.IngressList {}
185+ if err := r .List (ctx , ingressList ); err != nil {
186+ r .Log .Error (err , "failed to list ingresses for ingress class" , "ingressclass" , ingressClass .GetName ())
187+ return nil
188+ }
189+
190+ requests := make ([]reconcile.Request , 0 , len (ingressList .Items ))
191+ for _ , ingress := range ingressList .Items {
192+ if ingress .Spec .IngressClassName == nil || * ingress .Spec .IngressClassName == "" ||
193+ * ingress .Spec .IngressClassName == ingressClass .GetName () {
194+ requests = append (requests , reconcile.Request {
195+ NamespacedName : client.ObjectKey {
196+ Namespace : ingress .Namespace ,
197+ Name : ingress .Name ,
198+ },
199+ })
200+ }
201+ }
202+ return requests
203+ } else {
204+ ingressList := & networkingv1.IngressList {}
205+ if err := r .List (ctx , ingressList , client.MatchingFields {
206+ indexer .IngressClassRef : ingressClass .GetName (),
207+ }); err != nil {
208+ r .Log .Error (err , "failed to list ingresses for ingress class" , "ingressclass" , ingressClass .GetName ())
209+ return nil
210+ }
211+
212+ requests := make ([]reconcile.Request , 0 , len (ingressList .Items ))
213+ for _ , ingress := range ingressList .Items {
214+ requests = append (requests , reconcile.Request {
215+ NamespacedName : client.ObjectKey {
216+ Namespace : ingress .Namespace ,
217+ Name : ingress .Name ,
218+ },
219+ })
220+ }
221+
222+ return requests
189223 }
190- return requests
191224}
192225
193226// listIngressesByService list all ingresses that use a specific service
@@ -211,12 +244,14 @@ func (r *IngressReconciler) listIngressesByService(ctx context.Context, obj clie
211244
212245 requests := make ([]reconcile.Request , 0 , len (ingressList .Items ))
213246 for _ , ingress := range ingressList .Items {
214- requests = append (requests , reconcile.Request {
215- NamespacedName : client.ObjectKey {
216- Namespace : ingress .Namespace ,
217- Name : ingress .Name ,
218- },
219- })
247+ if r .checkIngressClass (& ingress ) {
248+ requests = append (requests , reconcile.Request {
249+ NamespacedName : client.ObjectKey {
250+ Namespace : ingress .Namespace ,
251+ Name : ingress .Name ,
252+ },
253+ })
254+ }
220255 }
221256 return requests
222257}
@@ -242,12 +277,14 @@ func (r *IngressReconciler) listIngressesBySecret(ctx context.Context, obj clien
242277
243278 requests := make ([]reconcile.Request , 0 , len (ingressList .Items ))
244279 for _ , ingress := range ingressList .Items {
245- requests = append (requests , reconcile.Request {
246- NamespacedName : client.ObjectKey {
247- Namespace : ingress .Namespace ,
248- Name : ingress .Name ,
249- },
250- })
280+ if r .checkIngressClass (& ingress ) {
281+ requests = append (requests , reconcile.Request {
282+ NamespacedName : client.ObjectKey {
283+ Namespace : ingress .Namespace ,
284+ Name : ingress .Name ,
285+ },
286+ })
287+ }
251288 }
252289 return requests
253290}
0 commit comments