func()

in controllers/clusterkeycloakrealm/clusterkeycloakrealm_controller.go [52:112]


func (r *ClusterKeycloakRealmReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	log := ctrl.LoggerFrom(ctx)
	log.Info("Reconciling ClusterKeycloakRealm")

	clusterRealm := &keycloakAlpha.ClusterKeycloakRealm{}
	if err := r.client.Get(ctx, req.NamespacedName, clusterRealm); err != nil {
		if k8sErrors.IsNotFound(err) {
			return ctrl.Result{}, nil
		}

		return ctrl.Result{}, fmt.Errorf("unable to get cluster realm: %w", err)
	}

	if err := r.helper.SetKeycloakOwnerRef(ctx, clusterRealm); err != nil {
		return ctrl.Result{}, fmt.Errorf("unable to set keycloak owner ref: %w", err)
	}

	kClient, err := r.helper.CreateKeycloakClientFromClusterRealm(ctx, clusterRealm)
	if err != nil {
		if errors.Is(err, helper.ErrKeycloakIsNotAvailable) {
			return ctrl.Result{
				RequeueAfter: helper.RequeueOnKeycloakNotAvailablePeriod,
			}, nil
		}

		return ctrl.Result{}, fmt.Errorf("failed to create keycloak client for realm: %w", err)
	}

	if deleted, err := r.helper.TryToDelete(
		ctx,
		clusterRealm,
		makeTerminator(clusterRealm.Spec.RealmName, kClient, objectmeta.PreserveResourcesOnDeletion(clusterRealm)),
		keyCloakRealmOperatorFinalizerName,
	); err != nil {
		return ctrl.Result{}, fmt.Errorf("failed to delete realm %w", err)
	} else if deleted {
		return reconcile.Result{}, nil
	}

	if err := chain.MakeChain(r.client, r.operatorNamespace).ServeRequest(ctx, clusterRealm, kClient); err != nil {
		clusterRealm.Status.Available = false
		clusterRealm.Status.Value = err.Error()
		requeue := r.helper.SetFailureCount(clusterRealm)

		if updateErr := r.client.Status().Update(ctx, clusterRealm); updateErr != nil {
			return ctrl.Result{}, fmt.Errorf("unable to update cluster realm status: %w", updateErr)
		}

		return ctrl.Result{
			RequeueAfter: requeue,
		}, fmt.Errorf("error during ClusterRealm chain: %w", err)
	}

	if err := r.updateSuccessStatus(ctx, clusterRealm); err != nil {
		return ctrl.Result{}, err
	}

	return ctrl.Result{
		RequeueAfter: successConnectionRetryPeriod,
	}, nil
}