func()

in controllers/stage/stage_controller.go [95:158]


func (r *ReconcileStage) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
	log := ctrl.LoggerFrom(ctx)
	log.Info("Reconciling Stage has been started")

	stage := &cdPipeApi.Stage{}
	if err := r.client.Get(ctx, request.NamespacedName, stage); err != nil {
		if k8sErrors.IsNotFound(err) {
			log.Info("Stage has been deleted")

			return reconcile.Result{}, nil
		}

		return reconcile.Result{}, fmt.Errorf("failed to get stage: %w", err)
	}

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

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

	result, err := r.tryToDeleteCDStage(ctx, stage)
	if err != nil {
		return reconcile.Result{}, err
	}

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

	ch, err := chain.CreateChain(ctx, r.client, stage)
	if err != nil {
		if statusErr := r.setFailedStatus(ctx, stage, err); statusErr != nil {
			log.Error(statusErr, "Failed to set failed status")
		}

		return reconcile.Result{}, fmt.Errorf("failed to create chain: %w", err)
	}

	if err = ch.ServeRequest(ctx, stage); err != nil {
		var e edpError.CISNotFoundError
		if errors.As(err, &e) {
			log.Error(err, "cis wasn't found. reconcile again...")
			return reconcile.Result{RequeueAfter: const15Requeue}, nil
		}

		if statusErr := r.setFailedStatus(ctx, stage, err); statusErr != nil {
			return reconcile.Result{}, statusErr
		}

		return reconcile.Result{RequeueAfter: const15Requeue}, fmt.Errorf("failed to handle the chain: %w", err)
	}

	if err := r.setFinishStatus(ctx, stage); err != nil {
		return reconcile.Result{}, err
	}

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

	return reconcile.Result{}, nil
}