in controllers/keycloakrealmcomponent/keycloakrealmcomponent_controller.go [103:180]
func (r *Reconcile) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
log := ctrl.LoggerFrom(ctx)
log.Info("Reconciling KeycloakRealmComponent")
keycloakRealmComponent := &keycloakApi.KeycloakRealmComponent{}
if err := r.client.Get(ctx, request.NamespacedName, keycloakRealmComponent); err != nil {
if k8sErrors.IsNotFound(err) {
return reconcile.Result{}, nil
}
return ctrl.Result{}, fmt.Errorf("unable to get KeycloakRealmComponent: %w", err)
}
if updated, err := r.applyDefaults(ctx, keycloakRealmComponent); err != nil {
return ctrl.Result{}, fmt.Errorf("unable to apply defaults: %w", err)
} else if updated {
return ctrl.Result{}, nil
}
err := r.helper.SetRealmOwnerRef(ctx, keycloakRealmComponent)
if err != nil {
return ctrl.Result{}, fmt.Errorf("unable to get realm owner ref: %w", err)
}
if err = r.setComponentOwnerReference(ctx, keycloakRealmComponent); err != nil {
return reconcile.Result{}, err
}
kClient, err := r.helper.CreateKeycloakClientFromRealmRef(ctx, keycloakRealmComponent)
if err != nil {
if errors.Is(err, helper.ErrKeycloakIsNotAvailable) {
return ctrl.Result{
RequeueAfter: helper.RequeueOnKeycloakNotAvailablePeriod,
}, nil
}
return ctrl.Result{}, fmt.Errorf("unable to create keycloak client: %w", err)
}
realm, err := r.helper.GetKeycloakRealmFromRef(ctx, keycloakRealmComponent, kClient)
if err != nil {
return ctrl.Result{}, fmt.Errorf("unable to get realm: %w", err)
}
term := makeTerminator(
gocloak.PString(realm.Realm),
keycloakRealmComponent.Spec.Name,
kClient,
objectmeta.PreserveResourcesOnDeletion(keycloakRealmComponent),
)
if deleted, err := r.helper.TryToDelete(ctx, keycloakRealmComponent, term, finalizerName); err != nil {
return ctrl.Result{}, fmt.Errorf("unable to tryToDelete realm component %w", err)
} else if deleted {
return reconcile.Result{}, nil
}
if err := r.tryReconcile(ctx, keycloakRealmComponent, gocloak.PString(realm.Realm), kClient); err != nil {
keycloakRealmComponent.Status.Value = err.Error()
requeueAfter := r.helper.SetFailureCount(keycloakRealmComponent)
if statusErr := r.client.Status().Update(ctx, keycloakRealmComponent); statusErr != nil {
return ctrl.Result{}, fmt.Errorf("unable to update KeycloakRealmComponent status: %w", statusErr)
}
return ctrl.Result{
RequeueAfter: requeueAfter,
}, fmt.Errorf("unable to reconcile KeycloakRealmComponent: %w", err)
}
helper.SetSuccessStatus(keycloakRealmComponent)
if err := r.client.Status().Update(ctx, keycloakRealmComponent); err != nil {
return ctrl.Result{}, fmt.Errorf("unable to update KeycloakRealmComponent status: %w", err)
}
return reconcile.Result{}, nil
}