func()

in controllers/qualitygate/sonarqualitygate_controller.go [51:124]


func (r *SonarQualityGateReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	log := ctrl.LoggerFrom(ctx)
	log.Info("Reconciling SonarQualityGate")

	gate := &sonarApi.SonarQualityGate{}
	err := r.client.Get(ctx, req.NamespacedName, gate)
	if err != nil {
		if errors.IsNotFound(err) {
			return ctrl.Result{}, nil
		}

		return ctrl.Result{}, err
	}

	sonarApiClient, err := r.apiClientProvider.GetSonarApiClientFromSonarRef(ctx, req.Namespace, gate)
	if err != nil {
		log.Error(err, "An error has occurred while getting sonar api client")
		return ctrl.Result{
			RequeueAfter: errorRequeueTime,
		}, nil
	}

	if gate.GetDeletionTimestamp() != nil {
		if controllerutil.ContainsFinalizer(gate, sonarOperatorFinalizer) {
			if err = chain.NewRemoveQualityGate(sonarApiClient).ServeRequest(ctx, gate); err != nil {
				log.Error(err, "An error has occurred while deleting QualityGate")

				return ctrl.Result{
					RequeueAfter: errorRequeueTime,
				}, nil
			}

			controllerutil.RemoveFinalizer(gate, sonarOperatorFinalizer)
			if err = r.client.Update(ctx, gate); err != nil {
				return ctrl.Result{}, err
			}
		}

		return ctrl.Result{}, nil
	}

	if controllerutil.AddFinalizer(gate, sonarOperatorFinalizer) {
		err = r.client.Update(ctx, gate)
		if err != nil {
			return ctrl.Result{}, err
		}
	}

	oldStatus := gate.Status

	if err = chain.MakeChain(sonarApiClient).ServeRequest(ctx, gate); err != nil {
		log.Error(err, "An error has occurred while handling SonarQualityGate")

		gate.Status.Value = "error"
		gate.Status.Error = err.Error()

		if err = r.updateSonarQualityGateStatus(ctx, gate, oldStatus); err != nil {
			return ctrl.Result{}, err
		}

		return ctrl.Result{
			RequeueAfter: errorRequeueTime,
		}, nil
	}

	gate.Status.Value = common.StatusCreated
	gate.Status.Error = ""

	if err = r.updateSonarQualityGateStatus(ctx, gate, oldStatus); err != nil {
		return ctrl.Result{}, err
	}

	return ctrl.Result{}, nil
}