func()

in controllers/blobstore/nexusblobstore_controller.go [34:112]


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

	store := &nexusApi.NexusBlobStore{}
	if err := r.client.Get(ctx, req.NamespacedName, store); err != nil {
		if k8sErrors.IsNotFound(err) {
			return ctrl.Result{}, nil
		}

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

	nexusApiClient, err := r.apiClientProvider.GetNexusApiClientFromNexusRef(ctx, store.Namespace, store)
	if err != nil {
		log.Error(err, "An error has occurred while getting nexus api client")

		return ctrl.Result{
			RequeueAfter: controllers.ErrorRequeueTime,
		}, nil
	}

	if store.GetDeletionTimestamp() != nil {
		if controllerutil.ContainsFinalizer(store, controllers.NexusOperatorFinalizer) {
			if err = chain.NewRemoveBlobstore(nexusApiClient.BlobStore.File).ServeRequest(ctx, store); err != nil {
				log.Error(err, "An error has occurred while deleting NexusBlobStore")

				return ctrl.Result{
					RequeueAfter: controllers.ErrorRequeueTime,
				}, nil
			}

			controllerutil.RemoveFinalizer(store, controllers.NexusOperatorFinalizer)

			if err = r.client.Update(ctx, store); err != nil {
				return ctrl.Result{}, fmt.Errorf("failed to update NexusBlobStore: %w", err)
			}
		}

		return ctrl.Result{}, nil
	}

	if controllerutil.AddFinalizer(store, controllers.NexusOperatorFinalizer) {
		err = r.client.Update(ctx, store)
		if err != nil {
			return ctrl.Result{}, fmt.Errorf("failed to update NexusBlobStore: %w", err)
		}
	}

	oldStatus := store.Status

	if err = chain.NewCreateBlobStore(
		nexusApiClient.BlobStore.S3,
		nexusApiClient.BlobStore.File,
		r.client,
	).ServeRequest(ctx, store); err != nil {
		log.Error(err, "An error has occurred while handling NexusBlobStore")

		store.Status.Value = common.StatusError
		store.Status.Error = err.Error()

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

		return ctrl.Result{
			RequeueAfter: controllers.ErrorRequeueTime,
		}, nil
	}

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

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

	return ctrl.Result{}, nil
}