func()

in controllers/gerritgroup/controller.go [118:173]


func (r *Reconcile) tryToReconcile(ctx context.Context, instance *gerritApi.GerritGroup) error {
	if !helper.IsInstanceOwnerSet(instance) {
		ownerReference := helper.FindCROwnerName(instance.Spec.OwnerName)

		gerritInstance, err := helper.GetGerritInstance(ctx, r.client, ownerReference, instance.Namespace)
		if err != nil {
			return errors.Wrap(err, "unable to get gerrit instance")
		}

		helper.SetOwnerReference(instance, gerritInstance.TypeMeta, &gerritInstance.ObjectMeta)

		err = r.client.Update(ctx, instance)
		if err != nil {
			return errors.Wrap(err, "unable to update instance owner refs")
		}
	}

	gerritInstance, err := helper.GetInstanceOwner(ctx, r.client, instance)
	if err != nil {
		return errors.Wrap(err, "unable to get instance owner")
	}

	cl, err := r.service.GetRestClient(gerritInstance)
	if err != nil {
		return errors.Wrap(err, "unable to get rest client")
	}

	gr, err := cl.CreateGroup(instance.Spec.Name, instance.Spec.Description, instance.Spec.VisibleToAll)
	if err == nil {
		instance.Status.ID = gr.ID
		instance.Status.GroupID = strconv.Itoa(gr.GroupID)

		// group is created, job done, we can exit
		return nil
	}

	if !gerritClient.IsErrAlreadyExists(err) {
		// unexpected error
		return errors.Wrap(err, "unable to create group")
	}

	// in case group already exists,
	// we want to make sure that CRs spec is in sync with group

	// if ID is not set yet, we can move on
	if instance.Status.ID == "" {
		return nil
	}

	err = cl.UpdateGroup(instance.Status.ID, instance.Spec.Description, instance.Spec.VisibleToAll)
	if err != nil {
		return errors.Wrap(err, "unable to update gerrit group")
	}

	return nil
}