func()

in controllers/codebase/codebase_controller.go [96:163]


func (r *ReconcileCodebase) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
	log := ctrl.LoggerFrom(ctx)
	log.Info("Reconciling Codebase")

	codebase := &codebaseApi.Codebase{}
	if err := r.client.Get(ctx, request.NamespacedName, codebase); err != nil {
		if k8sErrors.IsNotFound(err) {
			return reconcile.Result{}, nil
		}

		return reconcile.Result{}, fmt.Errorf("failed to fetch Codebase resource %q: %w", request.NamespacedName, err)
	}

	patched, err := r.modifier.Apply(ctx, codebase)
	if err != nil {
		return reconcile.Result{}, fmt.Errorf("failed to apply codebase changes: %w", err)
	}

	if patched {
		log.Info("codebase default values has been patched")

		return reconcile.Result{}, nil
	}

	if err = r.setFinalizers(ctx, codebase); err != nil {
		return reconcile.Result{}, fmt.Errorf("failed to set finalizers: %w", err)
	}

	result, err := r.tryToDeleteCodebase(ctx, codebase)
	if err != nil {
		return reconcile.Result{}, fmt.Errorf("failed to try to delete codebase: %w", err)
	}

	if result != nil {
		return *result, nil
	}

	err = r.initLabels(ctx, codebase)
	if err != nil {
		return reconcile.Result{}, fmt.Errorf("failed to init labels for codebase: %w", err)
	}

	ch, err := r.getChain(ctx, codebase)
	if err != nil {
		return reconcile.Result{}, fmt.Errorf("failed to select chain: %w", err)
	}

	if err = ch.ServeRequest(ctx, codebase); err != nil {
		timeout := r.setFailureCount(ctx, codebase)

		log.Error(err, "Error during codebase reconciliation")
		log.Info("Wait for next reconciliation", "timeout", timeout)

		if cleanErr := removeDirectoryIfExists(ctx, codebase); cleanErr != nil {
			log.Error(cleanErr, "Failed to remove Codebase directory")
		}

		return reconcile.Result{RequeueAfter: timeout}, nil
	}

	if err := r.updateFinishStatus(ctx, codebase); err != nil {
		return reconcile.Result{}, fmt.Errorf("failed to update %v Codebase status: %w", codebase.Name, err)
	}

	log.Info("Reconciling Codebase has been finished")

	return reconcile.Result{}, nil
}