Prevent reconciliation loop on status updates

This commit is contained in:
stefanprodan 2020-04-05 17:49:22 +03:00
parent d9ee2ab288
commit 2fadfbd6fc
1 changed files with 7 additions and 5 deletions

View File

@ -32,6 +32,7 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime" ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/predicate"
sourcerv1 "github.com/fluxcd/sourcer/api/v1alpha1" sourcerv1 "github.com/fluxcd/sourcer/api/v1alpha1"
) )
@ -47,7 +48,9 @@ type HelmRepositoryReconciler struct {
// +kubebuilder:rbac:groups=sourcer.fluxcd.io,resources=helmrepositories/status,verbs=get;update;patch // +kubebuilder:rbac:groups=sourcer.fluxcd.io,resources=helmrepositories/status,verbs=get;update;patch
func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
ctx := context.Background() ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
log := r.Log.WithValues("helmrepository", req.NamespacedName) log := r.Log.WithValues("helmrepository", req.NamespacedName)
var repo sourcerv1.HelmRepository var repo sourcerv1.HelmRepository
@ -77,7 +80,7 @@ func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
} }
} }
if err := downloadIndex(repo.Spec.Url); err != nil { if err := r.downloadIndex(repo.Spec.Url); err != nil {
log.Info("Index download error", "error", err.Error()) log.Info("Index download error", "error", err.Error())
readyCondition.Reason = sourcerv1.IndexDownloadFailedReason readyCondition.Reason = sourcerv1.IndexDownloadFailedReason
readyCondition.Message = err.Error() readyCondition.Message = err.Error()
@ -98,18 +101,17 @@ func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
return ctrl.Result{}, err return ctrl.Result{}, err
} }
log.Info("Sync finished")
return ctrl.Result{RequeueAfter: time.Minute}, nil return ctrl.Result{RequeueAfter: time.Minute}, nil
} }
func (r *HelmRepositoryReconciler) SetupWithManager(mgr ctrl.Manager) error { func (r *HelmRepositoryReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr). return ctrl.NewControllerManagedBy(mgr).
For(&sourcerv1.HelmRepository{}). For(&sourcerv1.HelmRepository{}).
WithEventFilter(predicate.GenerationChangedPredicate{}).
Complete(r) Complete(r)
} }
func downloadIndex(repoUrl string) error { func (r *HelmRepositoryReconciler) downloadIndex(repoUrl string) error {
//time.Sleep(10 * time.Second)
parsedURL, err := url.Parse(repoUrl) parsedURL, err := url.Parse(repoUrl)
if err != nil { if err != nil {
return fmt.Errorf("unable to parse repository url %w", err) return fmt.Errorf("unable to parse repository url %w", err)