func()

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
}