in pkg/controllers/hub/trafficmanagerbackend/controller.go [108:147]
func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
name := req.NamespacedName
backendKRef := klog.KRef(name.Namespace, name.Name)
startTime := time.Now()
klog.V(2).InfoS("Reconciliation starts", "trafficManagerBackend", backendKRef)
defer func() {
latency := time.Since(startTime).Milliseconds()
klog.V(2).InfoS("Reconciliation ends", "trafficManagerBackend", backendKRef, "latency", latency)
}()
backend := &fleetnetv1beta1.TrafficManagerBackend{}
if err := r.Client.Get(ctx, name, backend); err != nil {
if apierrors.IsNotFound(err) {
klog.V(2).InfoS("Ignoring NotFound trafficManagerBackend", "trafficManagerBackend", backendKRef)
return ctrl.Result{}, nil
}
klog.ErrorS(err, "Failed to get trafficManagerBackend", "trafficManagerBackend", backendKRef)
return ctrl.Result{}, controller.NewAPIServerError(true, err)
}
if !backend.ObjectMeta.DeletionTimestamp.IsZero() {
return r.handleDelete(ctx, backend)
}
// register metrics finalizer
if !controllerutil.ContainsFinalizer(backend, objectmeta.MetricsFinalizer) {
controllerutil.AddFinalizer(backend, objectmeta.MetricsFinalizer)
if err := r.Update(ctx, backend); err != nil {
klog.ErrorS(err, "Failed to add trafficManagerBackend metrics finalizer", "trafficManagerBackend", backendKRef)
return ctrl.Result{}, err
}
}
defer emitTrafficManagerBackendStatusMetric(backend)
// TODO: replace the following with defaulter webhook
defaulter.SetDefaultsTrafficManagerBackend(backend)
return r.handleUpdate(ctx, backend)
}