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
}