From 303e6d02a41afa5c415d447313361e7016b8a88a Mon Sep 17 00:00:00 2001 From: Raphael Groemmer Date: Mon, 2 Dec 2024 15:57:59 +0100 Subject: [PATCH 1/3] Remove status removal --- .../loadbalancer/loadbalancer_controller.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go index f14ded5d..f5859f5c 100644 --- a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go +++ b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go @@ -422,13 +422,11 @@ func (r *Reconciler) reconcileFIP( var fip *floatingips.FloatingIP if fip, err = openstackhelper.GetFIPByID(ctx, fipClient, *lb.Status.FloatingID); err != nil { switch err.(type) { - case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: + case gophercloud.ErrResourceNotFound: r.Log.Info("fip not found in openstack", "fip", *lb.Status.FloatingID) - // fip not found by ID, remove it from status and trigger reconcile - if err := helper.RemoveFromLBStatus(ctx, r.Status(), lb, "floatingID"); err != nil { - return false, fmt.Errorf("failed to remove FIP from lb status: %w", err) - } - return true, err + // FIP not found by ID. Unable to determine if is's due to an OpenStack API outage or a legitimate issue. + // legitimate issue. + return false, err default: r.Log.Info("unexpected error occurred") return false, kubernetes.SendErrorAsEvent(r.RecorderLB, err, lb) @@ -497,7 +495,10 @@ func (r *Reconciler) assignOrCreateFIP( } // try to find FIP by name - fip, _ = openstackhelper.GetFIPByName(ctx, fipClient, *lb.Status.FloatingName) + fip, err = openstackhelper.GetFIPByName(ctx, fipClient, *lb.Status.FloatingName) + if err != nil { + r.Log.Error(err, "retrieving FIP by Name failed") + } if fip != nil { r.Log.Info("Found FloatingIP by Name", "lb", lb.Name) return helper.PatchLBStatus( From 92b586b9f7bd8ee8b816e554278c68055eb000a2 Mon Sep 17 00:00:00 2001 From: Raphael Groemmer Date: Tue, 3 Dec 2024 13:39:22 +0100 Subject: [PATCH 2/3] Improve error handling --- .../loadbalancer/loadbalancer_controller.go | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go index f5859f5c..f82c5ff4 100644 --- a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go +++ b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go @@ -42,6 +42,7 @@ import ( const ( DefaultRequeueTime = 10 * time.Millisecond ServiceFinalizer = "yawol.stackit.cloud/controller2" + HTTP_NOT_FOUND int = 404 ) // LoadBalancerReconciler reconciles service Objects with type LoadBalancer @@ -421,15 +422,20 @@ func (r *Reconciler) reconcileFIP( // Get FIP var fip *floatingips.FloatingIP if fip, err = openstackhelper.GetFIPByID(ctx, fipClient, *lb.Status.FloatingID); err != nil { - switch err.(type) { - case gophercloud.ErrResourceNotFound: - r.Log.Info("fip not found in openstack", "fip", *lb.Status.FloatingID) - // FIP not found by ID. Unable to determine if is's due to an OpenStack API outage or a legitimate issue. - // legitimate issue. - return false, err - default: - r.Log.Info("unexpected error occurred") - return false, kubernetes.SendErrorAsEvent(r.RecorderLB, err, lb) + switch e := err.(type) { + case gophercloud.ErrUnexpectedResponseCode: + code := e.GetStatusCode() + if code == 404 { + // FIP not found by ID. Unable to determine if is's due to an OpenStack API outage or a legitimate issue. + // legitimate issue. + r.Log.Info("fip not found in openstack", "fip", *lb.Status.FloatingID) + } else { + r.Log.Info("unexpected gophercloud error occurred", "error: ", err) + } + return false, err + default: + r.Log.Info("unexpected go error occurred", "error: ", err) + return false, kubernetes.SendErrorAsEvent(r.RecorderLB, err, lb) } } From 78071ef9811b77f5948afde492da843ff16ce007 Mon Sep 17 00:00:00 2001 From: Raphael Groemmer Date: Wed, 4 Dec 2024 12:12:32 +0100 Subject: [PATCH 3/3] Adapt PR suggestions --- .../loadbalancer/loadbalancer_controller.go | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go index f82c5ff4..0cac791d 100644 --- a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go +++ b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go @@ -42,7 +42,6 @@ import ( const ( DefaultRequeueTime = 10 * time.Millisecond ServiceFinalizer = "yawol.stackit.cloud/controller2" - HTTP_NOT_FOUND int = 404 ) // LoadBalancerReconciler reconciles service Objects with type LoadBalancer @@ -423,19 +422,16 @@ func (r *Reconciler) reconcileFIP( var fip *floatingips.FloatingIP if fip, err = openstackhelper.GetFIPByID(ctx, fipClient, *lb.Status.FloatingID); err != nil { switch e := err.(type) { - case gophercloud.ErrUnexpectedResponseCode: - code := e.GetStatusCode() - if code == 404 { - // FIP not found by ID. Unable to determine if is's due to an OpenStack API outage or a legitimate issue. - // legitimate issue. - r.Log.Info("fip not found in openstack", "fip", *lb.Status.FloatingID) - } else { - r.Log.Info("unexpected gophercloud error occurred", "error: ", err) - } - return false, err - default: - r.Log.Info("unexpected go error occurred", "error: ", err) - return false, kubernetes.SendErrorAsEvent(r.RecorderLB, err, lb) + case gophercloud.ErrUnexpectedResponseCode: + code := e.GetStatusCode() + if code == 404 { + return false, fmt.Errorf("fip not found: %w", err) + } else { + return false, fmt.Errorf("unexpected gophercloud error occurred: %w", err) + } + default: + r.Log.Info("unexpected go error occurred", "error: ", err) + return false, kubernetes.SendErrorAsEvent(r.RecorderLB, err, lb) } }