in controllers/repository/nexusrepository_controller.go [40:120]
func (r *NexusRepositoryReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
log := ctrl.LoggerFrom(ctx)
log.Info("Reconciling NexusRepository")
repository := &nexusApi.NexusRepository{}
if err := r.client.Get(ctx, req.NamespacedName, repository); err != nil {
if k8sErrors.IsNotFound(err) {
return ctrl.Result{}, nil
}
return ctrl.Result{}, fmt.Errorf("failed to get NexusRepository: %w", err)
}
nexusApiClient, err := r.apiClientProvider.GetNexusRepositoryClientFromNexusRef(ctx, repository.Namespace, repository)
if err != nil {
log.Error(err, "An error has occurred while getting nexus api client")
return ctrl.Result{
RequeueAfter: controllers.ErrorRequeueTime,
}, nil
}
if repository.GetDeletionTimestamp() != nil {
if controllerutil.ContainsFinalizer(repository, controllers.NexusOperatorFinalizer) {
log.Info("Deleting NexusRepository")
if err = chain.NewRemoveRepository(nexusApiClient).ServeRequest(ctx, repository); err != nil {
log.Error(err, "An error has occurred while deleting NexusRepository")
return ctrl.Result{
RequeueAfter: controllers.ErrorRequeueTime,
}, nil
}
controllerutil.RemoveFinalizer(repository, controllers.NexusOperatorFinalizer)
if err = r.client.Update(ctx, repository); err != nil {
return ctrl.Result{}, fmt.Errorf("failed to update NexusRepository: %w", err)
}
}
log.Info("NexusRepository has been deleted")
return ctrl.Result{}, nil
}
if controllerutil.AddFinalizer(repository, controllers.NexusOperatorFinalizer) {
err = r.client.Update(ctx, repository)
if err != nil {
return ctrl.Result{}, fmt.Errorf("failed to update NexusRepository: %w", err)
}
}
oldStatus := repository.Status
if err = chain.NewCreateRepository(nexusApiClient).ServeRequest(ctx, repository); err != nil {
log.Error(err, "An error has occurred while handling NexusRepository")
repository.Status.Value = common.StatusError
repository.Status.Error = err.Error()
if err = r.updateNexusRepositoryStatus(ctx, repository, oldStatus); err != nil {
return ctrl.Result{}, err
}
return ctrl.Result{
RequeueAfter: controllers.ErrorRequeueTime,
}, nil
}
repository.Status.Value = common.StatusCreated
repository.Status.Error = ""
if err = r.updateNexusRepositoryStatus(ctx, repository, oldStatus); err != nil {
return ctrl.Result{}, err
}
log.Info("Reconciling NexusRepository has been finished")
return ctrl.Result{}, nil
}