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
}