@@ -145,9 +145,6 @@ type gatewayReconciler struct {
145
145
func (r * gatewayReconciler ) Reconcile (ctx context.Context , req reconcile.Request ) (ctrl.Result , error ) {
146
146
r .reconcileTracker (req .NamespacedName )
147
147
err := r .reconcileHelper (ctx , req )
148
- if err != nil {
149
- r .logger .Error (err , "Got this error!" )
150
- }
151
148
return runtime .HandleReconcileError (err , r .logger )
152
149
}
153
150
@@ -196,7 +193,7 @@ func (r *gatewayReconciler) reconcileHelper(ctx context.Context, req reconcile.R
196
193
}
197
194
198
195
if lb == nil {
199
- err = r .reconcileDelete (ctx , gw , allRoutes )
196
+ err = r .reconcileDelete (ctx , gw , stack , allRoutes )
200
197
if err != nil {
201
198
r .logger .Error (err , "Failed to process gateway delete" )
202
199
}
@@ -206,39 +203,36 @@ func (r *gatewayReconciler) reconcileHelper(ctx context.Context, req reconcile.R
206
203
return r .reconcileUpdate (ctx , gw , stack , lb , backendSGRequired )
207
204
}
208
205
209
- func (r * gatewayReconciler ) resolveLoadBalancerConfig (ctx context.Context , k8sClient client.Client , reference * gwv1.ParametersReference ) (* elbv2gw.LoadBalancerConfiguration , error ) {
210
- var lbConf * elbv2gw.LoadBalancerConfiguration
211
- var err error
212
- if reference != nil {
213
- lbConf = & elbv2gw.LoadBalancerConfiguration {}
214
- if reference .Namespace != nil {
215
- err = k8sClient .Get (ctx , types.NamespacedName {
216
- Namespace : string (* reference .Namespace ),
217
- Name : reference .Name ,
218
- }, lbConf )
219
- } else {
220
- err = errors .New ("Namespace must be specified in ParametersRef" )
221
- }
222
- }
223
- return lbConf , err
224
- }
225
-
226
- func (r * gatewayReconciler ) reconcileDelete (ctx context.Context , gw * gwv1.Gateway , routes map [int32 ][]routeutils.RouteDescriptor ) error {
206
+ func (r * gatewayReconciler ) reconcileDelete (ctx context.Context , gw * gwv1.Gateway , stack core.Stack , routes map [int32 ][]routeutils.RouteDescriptor ) error {
227
207
for _ , routeList := range routes {
228
208
if len (routeList ) != 0 {
229
- // TODO - Better error messaging (e.g. tell user the routes that are still attached)
230
- return errors .New ("Gateway still has routes attached" )
209
+ err := errors .Errorf ("Gateway deletion invoked with routes attached [%s]" , generateRouteList (routes ))
210
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedDeleteWithRoutesAttached , err .Error ())
211
+ return err
231
212
}
232
213
}
233
214
234
- return r .finalizerManager .RemoveFinalizers (ctx , gw , r .finalizer )
215
+ if k8s .HasFinalizer (gw , r .finalizer ) {
216
+ err := r .deployModel (ctx , gw , stack )
217
+ if err != nil {
218
+ return err
219
+ }
220
+ if err := r .backendSGProvider .Release (ctx , networking .ResourceTypeGateway , []types.NamespacedName {k8s .NamespacedName (gw )}); err != nil {
221
+ return err
222
+ }
223
+ if err := r .finalizerManager .RemoveFinalizers (ctx , gw , r .finalizer ); err != nil {
224
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedAddFinalizer , fmt .Sprintf ("Failed remove finalizer due to %v" , err ))
225
+ return err
226
+ }
227
+ }
228
+ return nil
235
229
}
236
230
237
231
func (r * gatewayReconciler ) reconcileUpdate (ctx context.Context , gw * gwv1.Gateway , stack core.Stack ,
238
232
lb * elbv2model.LoadBalancer , backendSGRequired bool ) error {
239
233
240
234
if err := r .finalizerManager .AddFinalizers (ctx , gw , r .finalizer ); err != nil {
241
- r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .ServiceEventReasonFailedAddFinalizer , fmt .Sprintf ("Failed add finalizer due to %v" , err ))
235
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedAddFinalizer , fmt .Sprintf ("Failed add finalizer due to %v" , err ))
242
236
return err
243
237
}
244
238
err := r .deployModel (ctx , gw , stack )
@@ -251,16 +245,16 @@ func (r *gatewayReconciler) reconcileUpdate(ctx context.Context, gw *gwv1.Gatewa
251
245
}
252
246
253
247
if ! backendSGRequired {
254
- if err := r .backendSGProvider .Release (ctx , networking .ResourceTypeService , []types.NamespacedName {k8s .NamespacedName (gw )}); err != nil {
248
+ if err := r .backendSGProvider .Release (ctx , networking .ResourceTypeGateway , []types.NamespacedName {k8s .NamespacedName (gw )}); err != nil {
255
249
return err
256
250
}
257
251
}
258
252
259
253
if err = r .updateGatewayStatus (ctx , lbDNS , gw ); err != nil {
260
- r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .ServiceEventReasonFailedUpdateStatus , fmt .Sprintf ("Failed update status due to %v" , err ))
254
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedUpdateStatus , fmt .Sprintf ("Failed update status due to %v" , err ))
261
255
return err
262
256
}
263
- r .eventRecorder .Event (gw , corev1 .EventTypeNormal , k8s .ServiceEventReasonSuccessfullyReconciled , "Successfully reconciled" )
257
+ r .eventRecorder .Event (gw , corev1 .EventTypeNormal , k8s .GatewayEventReasonSuccessfullyReconciled , "Successfully reconciled" )
264
258
return nil
265
259
}
266
260
@@ -270,7 +264,7 @@ func (r *gatewayReconciler) deployModel(ctx context.Context, gw *gwv1.Gateway, s
270
264
if errors .As (err , & requeueNeededAfter ) {
271
265
return err
272
266
}
273
- r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .ServiceEventReasonFailedDeployModel , fmt .Sprintf ("Failed deploy model due to %v" , err ))
267
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedDeployModel , fmt .Sprintf ("Failed deploy model due to %v" , err ))
274
268
return err
275
269
}
276
270
r .logger .Info ("successfully deployed model" , "gateway" , k8s .NamespacedName (gw ))
@@ -280,12 +274,12 @@ func (r *gatewayReconciler) deployModel(ctx context.Context, gw *gwv1.Gateway, s
280
274
func (r * gatewayReconciler ) buildModel (ctx context.Context , gw * gwv1.Gateway , cfg elbv2gw.LoadBalancerConfiguration , listenerToRoute map [int32 ][]routeutils.RouteDescriptor ) (core.Stack , * elbv2model.LoadBalancer , bool , error ) {
281
275
stack , lb , backendSGRequired , err := r .modelBuilder .Build (ctx , gw , cfg , listenerToRoute )
282
276
if err != nil {
283
- r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .ServiceEventReasonFailedBuildModel , fmt .Sprintf ("Failed build model due to %v" , err ))
277
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedBuildModel , fmt .Sprintf ("Failed build model due to %v" , err ))
284
278
return nil , nil , false , err
285
279
}
286
280
stackJSON , err := r .stackMarshaller .Marshal (stack )
287
281
if err != nil {
288
- r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .ServiceEventReasonFailedBuildModel , fmt .Sprintf ("Failed build model due to %v" , err ))
282
+ r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedBuildModel , fmt .Sprintf ("Failed build model due to %v" , err ))
289
283
return nil , nil , false , err
290
284
}
291
285
r .logger .Info ("successfully built model" , "model" , stackJSON )
0 commit comments