in controllers/gerrit/gerrit_controller.go [97:268]
func (r *ReconcileGerrit) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
log := ctrl.LoggerFrom(ctx)
log.Info("Reconciling Gerrit")
instance := &gerritApi.Gerrit{}
err := r.client.Get(ctx, request.NamespacedName, instance)
if err != nil {
if k8sErrors.IsNotFound(err) {
// Request object not found, could have been deleted after reconcile request.
// Owned objects are automatically garbage collected. For additional cleanup logic use finalizers.
// Return and don't requeue
log.Info("instance not found")
return reconcile.Result{}, nil
}
return reconcile.Result{}, fmt.Errorf("failed Get Gerrit CR %q: %w", request.NamespacedName, err)
}
if instance.Status.Status == "" || instance.Status.Status == StatusFailed {
log.Info(fmt.Sprintf("%s/%s Gerrit installation started", instance.Namespace, instance.Name))
err = r.updateStatus(ctx, instance, StatusInstall)
if err != nil {
log.Error(err, updatingStatusErr, status, instance.Status.Status)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
}
if instance.Status.Status == StatusInstall {
log.Info(fmt.Sprintf("%s/%s Gerrit has been installed", instance.Namespace, instance.Name))
err = r.updateStatus(ctx, instance, StatusCreated)
if err != nil {
return reconcile.Result{}, err
}
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
dIsReady, err := r.service.IsDeploymentReady(instance)
if err != nil {
msg := fmt.Sprintf("Failed to check Deployment for %s/%s object!", instance.Namespace, instance.Name)
log.Info(msg)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
if !dIsReady {
log.Info(fmt.Sprintf("Deployment for %s/%s object is not ready for configuration yet", instance.Namespace, instance.Name))
return reconcile.Result{RequeueAfter: requeueTime30}, nil
}
if instance.Status.Status == StatusCreated || instance.Status.Status == "" {
msg := fmt.Sprintf("Configuration for %s/%s object has started", instance.Namespace, instance.Name)
log.Info(msg)
err = r.updateStatus(ctx, instance, StatusConfiguring)
if err != nil {
log.Error(err, updatingStatusErr, status, instance.Status.Status)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
}
var finalRequeueAfterTimeout time.Duration
instance, dPatched, err := r.service.Configure(instance)
if err != nil {
log.Error(err, "Gerrit configuration has been failed.")
if !gerrit.IsErrUserNotFound(err) {
return reconcile.Result{RequeueAfter: RequeueTime10}, fmt.Errorf("failed to configure Gerrit: %w", err)
}
finalRequeueAfterTimeout = requeueTime60
}
if dPatched {
log.Info("Restarting deployment after configuration change")
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
dIsReady, err = r.service.IsDeploymentReady(instance)
if err != nil {
msg := fmt.Sprintf("Failed to check Deployment config for %s/%s Gerrit!", instance.Namespace, instance.Name)
log.Info(msg)
return reconcile.Result{RequeueAfter: RequeueTime10}, fmt.Errorf("%s: %w", msg, err)
}
if !dIsReady {
log.Info(fmt.Sprintf("Deployment config for %v/%v Gerrit is not ready for configuration yet", instance.Namespace, instance.Name))
return reconcile.Result{RequeueAfter: requeueTime30}, nil
}
if instance.Status.Status == StatusConfiguring {
msg := fmt.Sprintf("%s/%s Gerrit configuration has finished", instance.Namespace, instance.Name)
log.Info(msg)
err = r.updateStatus(ctx, instance, StatusConfigured)
if err != nil {
log.Error(err, updatingStatusErr, status, instance.Status.Status)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
}
if instance.Status.Status == StatusConfigured {
log.Info("Exposing configuration has started")
err = r.updateStatus(ctx, instance, StatusExposeStart)
if err != nil {
log.Error(err, updatingStatusErr, status, instance.Status.Status)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
}
exposedInstance, err := r.service.ExposeConfiguration(ctx, instance)
if err != nil {
log.Error(err, "error while exposing configuration", "name", instance.Name)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
if exposedInstance.Status.Status == StatusExposeStart {
log.Info("Exposing configuration has finished")
err = r.updateStatus(ctx, exposedInstance, StatusExposeFinish)
if err != nil {
log.Error(err, updatingStatusErr, status, StatusExposeStart)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
}
if exposedInstance.Status.Status == StatusExposeFinish {
log.Info("Integration has started")
err = r.updateStatus(ctx, exposedInstance, StatusIntegrationStart)
if err != nil {
log.Error(err, updatingStatusErr, status, exposedInstance.Status.Status)
return reconcile.Result{RequeueAfter: RequeueTime10}, err
}
}
exposedInstance, err = r.service.Integrate(ctx, exposedInstance)
if err != nil {
return reconcile.Result{RequeueAfter: RequeueTime10}, errors.Wrapf(err, "Integration failed")
}
if exposedInstance.Status.Status == StatusIntegrationStart {
msg := fmt.Sprintf("Configuration of %s/%s object has been finished", exposedInstance.Namespace, exposedInstance.Name)
log.Info(msg)
err = r.updateStatus(ctx, exposedInstance, StatusReady)
if err != nil {
log.Error(err, updatingStatusErr, status, exposedInstance.Status.Status)
return reconcile.Result{RequeueAfter: RequeueTime10}, nil
}
}
err = r.updateAvailableStatus(ctx, exposedInstance, true)
if err != nil {
msg := fmt.Sprintf("Failed update availability status for Gerrit object with name %s", exposedInstance.Name)
log.Info(msg)
return reconcile.Result{RequeueAfter: requeueTime30}, nil
}
log.Info(fmt.Sprintf("Reconciling Gerrit component %s/%s has been finished", request.Namespace, request.Name))
return reconcile.Result{RequeueAfter: finalRequeueAfterTimeout}, nil
}