func()

in controllers/keycloakrealmcomponent/keycloakrealmcomponent_controller.go [249:292]


func (r *Reconcile) getParentID(
	ctx context.Context,
	component *keycloakApi.KeycloakRealmComponent,
	kcRealmName string,
	kClient keycloak.Client,
) (string, error) {
	if component.Spec.ParentRef == nil {
		return "", nil
	}

	if component.Spec.ParentRef.Kind == keycloakApi.KeycloakRealmKind {
		parentRealm := &keycloakApi.KeycloakRealm{}
		if err := r.client.Get(ctx, types.NamespacedName{Name: component.Spec.ParentRef.Name, Namespace: component.GetNamespace()}, parentRealm); err != nil {
			return "", fmt.Errorf("unable to get parent kcRealmName: %w", err)
		}

		kcParentRealm, err := kClient.GetRealm(ctx, parentRealm.Spec.RealmName)
		if err != nil {
			return "", fmt.Errorf("unable to get parent kcRealmName: %w", err)
		}

		if kcParentRealm.ID == nil || *kcParentRealm.ID == "" {
			return "", fmt.Errorf("kcRealmName id is empty")
		}

		return *kcParentRealm.ID, nil
	}

	if component.Spec.ParentRef.Kind == keycloakApi.KeycloakRealmComponentKind {
		parentComponent := &keycloakApi.KeycloakRealmComponent{}
		if err := r.client.Get(ctx, types.NamespacedName{Name: component.Spec.ParentRef.Name, Namespace: component.GetNamespace()}, parentComponent); err != nil {
			return "", fmt.Errorf("unable to get parent component: %w", err)
		}

		kcParentComponent, err := kClient.GetComponent(ctx, kcRealmName, parentComponent.Spec.Name)
		if err != nil {
			return "", fmt.Errorf("unable to get parent component: %w", err)
		}

		return kcParentComponent.ID, nil
	}

	return "", fmt.Errorf("parent kind %s is not supported", component.Spec.ParentRef.Kind)
}