in controllers/keycloakrealmidentityprovider/keycloakrealmidentityprovider_controller.go [142:194]
func (r *Reconcile) tryReconcile(ctx context.Context, keycloakRealmIDP *keycloakApi.KeycloakRealmIdentityProvider) error {
err := r.helper.SetRealmOwnerRef(ctx, keycloakRealmIDP)
if err != nil {
return fmt.Errorf("unable to set realm owner ref: %w", err)
}
kClient, err := r.helper.CreateKeycloakClientFromRealmRef(ctx, keycloakRealmIDP)
if err != nil {
return fmt.Errorf("unable to create keycloak client from realm ref: %w", err)
}
realm, err := r.helper.GetKeycloakRealmFromRef(ctx, keycloakRealmIDP, kClient)
if err != nil {
return fmt.Errorf("unable to get keycloak realm from ref: %w", err)
}
keycloakIDP := createKeycloakIDPFromSpec(&keycloakRealmIDP.Spec)
if err = r.secretRefClient.MapConfigSecretsRefs(ctx, keycloakIDP.Config, keycloakRealmIDP.Namespace); err != nil {
return fmt.Errorf("unable to map config secrets: %w", err)
}
providerExists, err := kClient.IdentityProviderExists(ctx, gocloak.PString(realm.Realm), keycloakRealmIDP.Spec.Alias)
if err != nil {
return fmt.Errorf("failed to check if the identity provider exists: %w", err)
}
if providerExists {
if err = kClient.UpdateIdentityProvider(ctx, gocloak.PString(realm.Realm), keycloakIDP); err != nil {
return errors.Wrap(err, "unable to update idp")
}
} else {
if err = kClient.CreateIdentityProvider(ctx, gocloak.PString(realm.Realm), keycloakIDP); err != nil {
return errors.Wrap(err, "unable to create idp")
}
}
if err := syncIDPMappers(ctx, &keycloakRealmIDP.Spec, kClient, gocloak.PString(realm.Realm)); err != nil {
return errors.Wrap(err, "unable to sync idp mappers")
}
term := makeTerminator(
gocloak.PString(realm.Realm),
keycloakRealmIDP.Spec.Alias,
kClient,
objectmeta.PreserveResourcesOnDeletion(keycloakRealmIDP),
)
if _, err := r.helper.TryToDelete(ctx, keycloakRealmIDP, term, finalizerName); err != nil {
return errors.Wrap(err, "unable to delete realm idp")
}
return nil
}