Merge pull request #132 from bigkevmcd/patch-status-fix

Update ImageUpdateAutomation Status with Patch.
This commit is contained in:
Stefan Prodan 2021-03-23 10:15:34 +02:00 committed by GitHub
commit daad724ad2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 6 deletions

View File

@ -127,7 +127,8 @@ func (r *ImageUpdateAutomationReconciler) Reconcile(ctx context.Context, req ctr
// annotation if it's there // annotation if it's there
if token, ok := meta.ReconcileAnnotationValue(auto.GetAnnotations()); ok { if token, ok := meta.ReconcileAnnotationValue(auto.GetAnnotations()); ok {
auto.Status.SetLastHandledReconcileRequest(token) auto.Status.SetLastHandledReconcileRequest(token)
if err := r.Status().Update(ctx, &auto); err != nil {
if err := r.patchStatus(ctx, req, auto.Status); err != nil {
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
} }
} }
@ -136,7 +137,7 @@ func (r *ImageUpdateAutomationReconciler) Reconcile(ctx context.Context, req ctr
failWithError := func(err error) (ctrl.Result, error) { failWithError := func(err error) (ctrl.Result, error) {
r.event(ctx, auto, events.EventSeverityError, err.Error()) r.event(ctx, auto, events.EventSeverityError, err.Error())
imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionFalse, meta.ReconciliationFailedReason, err.Error()) imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionFalse, meta.ReconciliationFailedReason, err.Error())
if err := r.Status().Update(ctx, &auto); err != nil { if err := r.patchStatus(ctx, req, auto.Status); err != nil {
log.Error(err, "failed to reconcile") log.Error(err, "failed to reconcile")
} }
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
@ -152,7 +153,7 @@ func (r *ImageUpdateAutomationReconciler) Reconcile(ctx context.Context, req ctr
if client.IgnoreNotFound(err) == nil { if client.IgnoreNotFound(err) == nil {
imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionFalse, imagev1.GitNotAvailableReason, "referenced git repository is missing") imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionFalse, imagev1.GitNotAvailableReason, "referenced git repository is missing")
log.Error(err, "referenced git repository does not exist") log.Error(err, "referenced git repository does not exist")
if err := r.Status().Update(ctx, &auto); err != nil { if err := r.patchStatus(ctx, req, auto.Status); err != nil {
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
} }
return ctrl.Result{}, nil // and assume we'll hear about it when it arrives return ctrl.Result{}, nil // and assume we'll hear about it when it arrives
@ -219,8 +220,7 @@ func (r *ImageUpdateAutomationReconciler) Reconcile(ctx context.Context, req ctr
// no sense rescheduling until this resource changes // no sense rescheduling until this resource changes
r.event(ctx, auto, events.EventSeverityInfo, "no known update strategy in spec, failing trivially") r.event(ctx, auto, events.EventSeverityInfo, "no known update strategy in spec, failing trivially")
imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionFalse, imagev1.NoStrategyReason, "no known update strategy is given for object") imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionFalse, imagev1.NoStrategyReason, "no known update strategy is given for object")
err := r.Status().Update(ctx, &auto) return ctrl.Result{}, r.patchStatus(ctx, req, auto.Status)
return ctrl.Result{}, err
} }
log.V(debug).Info("ran updates to working dir", "working", tmp) log.V(debug).Info("ran updates to working dir", "working", tmp)
@ -260,7 +260,7 @@ func (r *ImageUpdateAutomationReconciler) Reconcile(ctx context.Context, req ctr
// Getting to here is a successful run. // Getting to here is a successful run.
auto.Status.LastAutomationRunTime = &metav1.Time{Time: now} auto.Status.LastAutomationRunTime = &metav1.Time{Time: now}
imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionTrue, meta.ReconciliationSucceededReason, statusMessage) imagev1.SetImageUpdateAutomationReadiness(&auto, metav1.ConditionTrue, meta.ReconciliationSucceededReason, statusMessage)
if err = r.Status().Update(ctx, &auto); err != nil { if err := r.patchStatus(ctx, req, auto.Status); err != nil {
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
} }
@ -291,6 +291,21 @@ func (r *ImageUpdateAutomationReconciler) SetupWithManager(mgr ctrl.Manager) err
Complete(r) Complete(r)
} }
func (r *ImageUpdateAutomationReconciler) patchStatus(ctx context.Context,
req ctrl.Request,
newStatus imagev1.ImageUpdateAutomationStatus) error {
var auto imagev1.ImageUpdateAutomation
if err := r.Get(ctx, req.NamespacedName, &auto); err != nil {
return err
}
patch := client.MergeFrom(auto.DeepCopy())
auto.Status = newStatus
return r.Status().Patch(ctx, &auto, patch)
}
// intervalOrDefault gives the interval specified, or if missing, the default // intervalOrDefault gives the interval specified, or if missing, the default
func intervalOrDefault(auto *imagev1.ImageUpdateAutomation) time.Duration { func intervalOrDefault(auto *imagev1.ImageUpdateAutomation) time.Duration {
if auto.Spec.Interval.Duration < time.Second { if auto.Spec.Interval.Duration < time.Second {