From 44d1f3fa7fd36b4aa20bbb32fddf2cee71ec54c1 Mon Sep 17 00:00:00 2001 From: Dario Tranchitella Date: Sun, 5 Feb 2023 16:47:43 +0100 Subject: [PATCH] refactor: updating local tcp instance to avoid 2nd retrieval --- controllers/soot/controllers/coredns.go | 2 +- controllers/soot/controllers/konnectivity.go | 2 +- controllers/soot/controllers/kubeadm_phase.go | 2 +- controllers/soot/controllers/kubeproxy.go | 2 +- controllers/tenantcontrolplane_controller.go | 4 +--- controllers/utils/update_status.go | 19 +++++++++++-------- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/controllers/soot/controllers/coredns.go b/controllers/soot/controllers/coredns.go index 43a881e..2b432d2 100644 --- a/controllers/soot/controllers/coredns.go +++ b/controllers/soot/controllers/coredns.go @@ -60,7 +60,7 @@ func (c *CoreDNS) Reconcile(ctx context.Context, request reconcile.Request) (rec return reconcile.Result{}, nil } - if err = utils.UpdateStatus(ctx, c.AdminClient, c.GetTenantControlPlaneFunc, resource); err != nil { + if err = utils.UpdateStatus(ctx, c.AdminClient, tcp, resource); err != nil { c.logger.Error(err, "update status failed", "resource", resource.GetName()) return reconcile.Result{}, err diff --git a/controllers/soot/controllers/konnectivity.go b/controllers/soot/controllers/konnectivity.go index b3ef0d2..bac9168 100644 --- a/controllers/soot/controllers/konnectivity.go +++ b/controllers/soot/controllers/konnectivity.go @@ -60,7 +60,7 @@ func (k *KonnectivityAgent) Reconcile(ctx context.Context, _ reconcile.Request) continue } - if err = utils.UpdateStatus(ctx, k.AdminClient, k.GetTenantControlPlaneFunc, resource); err != nil { + if err = utils.UpdateStatus(ctx, k.AdminClient, tcp, resource); err != nil { k.logger.Error(err, "update status failed", "resource", resource.GetName()) return reconcile.Result{}, err diff --git a/controllers/soot/controllers/kubeadm_phase.go b/controllers/soot/controllers/kubeadm_phase.go index fc01ad0..5acf676 100644 --- a/controllers/soot/controllers/kubeadm_phase.go +++ b/controllers/soot/controllers/kubeadm_phase.go @@ -50,7 +50,7 @@ func (k *KubeadmPhase) Reconcile(ctx context.Context, _ reconcile.Request) (reco return reconcile.Result{}, nil } - if err = utils.UpdateStatus(ctx, k.Phase.GetClient(), k.GetTenantControlPlaneFunc, k.Phase); err != nil { + if err = utils.UpdateStatus(ctx, k.Phase.GetClient(), tcp, k.Phase); err != nil { k.logger.Error(err, "update status failed") return reconcile.Result{}, err diff --git a/controllers/soot/controllers/kubeproxy.go b/controllers/soot/controllers/kubeproxy.go index 411fdd9..f8dbb24 100644 --- a/controllers/soot/controllers/kubeproxy.go +++ b/controllers/soot/controllers/kubeproxy.go @@ -60,7 +60,7 @@ func (k *KubeProxy) Reconcile(ctx context.Context, _ reconcile.Request) (reconci return reconcile.Result{}, nil } - if err = utils.UpdateStatus(ctx, k.AdminClient, k.GetTenantControlPlaneFunc, resource); err != nil { + if err = utils.UpdateStatus(ctx, k.AdminClient, tcp, resource); err != nil { k.logger.Error(err, "update status failed") return reconcile.Result{}, err diff --git a/controllers/tenantcontrolplane_controller.go b/controllers/tenantcontrolplane_controller.go index 19a7a2b..83b19cb 100644 --- a/controllers/tenantcontrolplane_controller.go +++ b/controllers/tenantcontrolplane_controller.go @@ -156,15 +156,13 @@ func (r *TenantControlPlaneReconciler) Reconcile(ctx context.Context, req ctrl.R continue } - if err = utils.UpdateStatus(ctx, r.Client, r.getTenantControlPlane(ctx, req.NamespacedName), resource); err != nil { + if err = utils.UpdateStatus(ctx, r.Client, tenantControlPlane, resource); err != nil { log.Error(err, "update of the resource failed", "resource", resource.GetName()) return ctrl.Result{}, err } log.Info(fmt.Sprintf("%s has been configured", resource.GetName())) - - return ctrl.Result{}, nil } log.Info(fmt.Sprintf("%s has been reconciled", tenantControlPlane.GetName())) diff --git a/controllers/utils/update_status.go b/controllers/utils/update_status.go index c3480f4..becc5d8 100644 --- a/controllers/utils/update_status.go +++ b/controllers/utils/update_status.go @@ -7,24 +7,27 @@ import ( "context" "fmt" + "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" + kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" "github.com/clastix/kamaji/internal/resources" ) -func UpdateStatus(ctx context.Context, client client.Client, tcpRetrieval TenantControlPlaneRetrievalFn, resource resources.Resource) error { - updateErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { - tenantControlPlane, err := tcpRetrieval() - if err != nil { - return err - } +func UpdateStatus(ctx context.Context, client client.Client, tcp *kamajiv1alpha1.TenantControlPlane, resource resources.Resource) error { + updateErr := retry.RetryOnConflict(retry.DefaultRetry, func() (err error) { + defer func() { + if err != nil { + _ = client.Get(ctx, types.NamespacedName{Name: tcp.Name, Namespace: tcp.Namespace}, tcp) + } + }() - if err = resource.UpdateTenantControlPlaneStatus(ctx, tenantControlPlane); err != nil { + if err = resource.UpdateTenantControlPlaneStatus(ctx, tcp); err != nil { return fmt.Errorf("error applying TenantcontrolPlane status: %w", err) } - if err = client.Status().Update(ctx, tenantControlPlane); err != nil { + if err = client.Status().Update(ctx, tcp); err != nil { return fmt.Errorf("error updating tenantControlPlane status: %w", err) }