in controllers/gerritreplicationconfig/gerritreplicationconfig_controller.go [106:186]
func (r *ReconcileGerritReplicationConfig) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
log := r.log.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name)
log.Info("Reconciling GerritReplicationConfig")
instance := &gerritApi.GerritReplicationConfig{}
err := r.client.Get(ctx, request.NamespacedName, instance)
if err != nil {
if k8sErrors.IsNotFound(err) {
log.Info("instance not found")
return reconcile.Result{}, nil
}
return reconcile.Result{}, fmt.Errorf("failed to get instance: %w", err)
}
if !helper.IsInstanceOwnerSet(instance) {
ownerReference := helper.FindCROwnerName(instance.Spec.OwnerName)
var gerritInstance *gerritApi.Gerrit
gerritInstance, err = helper.GetGerritInstance(ctx, r.client, ownerReference, instance.Namespace)
if err != nil {
return reconcile.Result{}, fmt.Errorf("failed to get gerrit instance: %w", err)
}
helper.SetOwnerReference(instance, gerritInstance.TypeMeta, &gerritInstance.ObjectMeta)
err = r.client.Update(ctx, instance)
if err != nil {
return reconcile.Result{}, fmt.Errorf("failed to update instance owner refs: %w", err)
}
}
gerritInstance, err := helper.GetInstanceOwner(ctx, r.client, instance)
if err != nil {
if k8sErrors.IsNotFound(err) {
return reconcile.Result{}, nil
}
return reconcile.Result{}, fmt.Errorf("failed to get instance owner: %w", err)
}
if gerritInstance.Status.Status == gerritController.StatusReady && (instance.Status.Status == "" || instance.Status.Status == spec.StatusFailed) {
log.Info(fmt.Sprintf("Replication configuration of %s/%s object with name has been started",
gerritInstance.Namespace, gerritInstance.Name))
log.Info(fmt.Sprintf("Configuration of %s/%s object with name has been started", instance.Namespace, instance.Name))
err = r.updateStatus(ctx, instance, spec.StatusConfiguring)
if err != nil {
log.Error(err, "error while updating status", "status", instance.Status.Status)
return reconcile.Result{RequeueAfter: requeueTime}, nil
}
err = r.configureReplication(instance, gerritInstance)
if err != nil {
return reconcile.Result{}, err
}
}
if instance.Status.Status == spec.StatusConfiguring {
log.Info(fmt.Sprintf("Configuration of %s/%s object has been finished", instance.Namespace, instance.Name))
err = r.updateStatus(ctx, instance, spec.StatusConfigured)
if err != nil {
log.Error(err, "error while updating status", "status", instance.Status.Status)
return reconcile.Result{RequeueAfter: requeueTime}, nil
}
}
err = r.updateAvailableStatus(ctx, instance, true)
if err != nil {
log.Info("Failed update availability status for Gerrit Replication Config object with name %s", instance.Name)
return reconcile.Result{RequeueAfter: requeueTime30}, nil
}
log.Info(fmt.Sprintf("Reconciling Gerrit Replication Config component %s/%s has been finished", request.Namespace, request.Name))
return reconcile.Result{}, nil
}