From 7714cd661dfad50f5f92b12185d7e29e29287b3f Mon Sep 17 00:00:00 2001 From: Nan Yu Date: Thu, 5 Mar 2020 22:16:29 -0800 Subject: [PATCH] Mark aggregated condition unknown when errors happen --- controllers/application_controller.go | 6 ++++-- controllers/condition.go | 23 ++++++++++------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/controllers/application_controller.go b/controllers/application_controller.go index 76075923c..49ed2a106 100644 --- a/controllers/application_controller.go +++ b/controllers/application_controller.go @@ -96,10 +96,12 @@ func (r *ApplicationReconciler) getNewApplicationStatus(ctx context.Context, app Objects: objectStatuses, } newApplicationStatus.ComponentsReady = fmt.Sprintf("%d/%d", countReady, len(objectStatuses)) - if aggReady && errs != nil { + if errs != nil { + setReadyUnknownCondition(newApplicationStatus, "ComponentsReadyUnknown", "failed to aggregate all components' statuses, check the Error condition for details") + } else if aggReady { setReadyCondition(newApplicationStatus, "ComponentsReady", "all components ready") } else { - setNotReadyCondition(newApplicationStatus, "ComponentsNotReady", "some components not ready") + setNotReadyCondition(newApplicationStatus, "ComponentsNotReady", fmt.Sprintf("%d components not ready", len(objectStatuses) - countReady)) } if errs != nil { diff --git a/controllers/condition.go b/controllers/condition.go index c09ebb498..5abd50ac5 100644 --- a/controllers/condition.go +++ b/controllers/condition.go @@ -10,33 +10,30 @@ import ( ) func setReadyCondition(appStatus *appv1beta1.ApplicationStatus, reason, message string) { - setCondition(appStatus, appv1beta1.Ready, reason, message) + setCondition(appStatus, appv1beta1.Ready, corev1.ConditionTrue, reason, message) } // NotReady - shortcut to set ready condition to false func setNotReadyCondition(appStatus *appv1beta1.ApplicationStatus, reason, message string) { - clearCondition(appStatus, appv1beta1.Ready, reason, message) + setCondition(appStatus, appv1beta1.Ready, corev1.ConditionFalse, reason, message) +} + +// Unknown - shortcut to set ready condition to unknown +func setReadyUnknownCondition(appStatus *appv1beta1.ApplicationStatus, reason, message string) { + setCondition(appStatus, appv1beta1.Ready, corev1.ConditionUnknown, reason, message) } // setErrorCondition - shortcut to set error condition func setErrorCondition(appStatus *appv1beta1.ApplicationStatus, reason, message string) { - setCondition(appStatus, appv1beta1.Error, reason, message) + setCondition(appStatus, appv1beta1.Error, corev1.ConditionTrue, reason, message) } // clearErrorCondition - shortcut to set error condition func clearErrorCondition(appStatus *appv1beta1.ApplicationStatus) { - clearCondition(appStatus, appv1beta1.Error, "NoError", "No error seen") -} - -func setCondition(appStatus *appv1beta1.ApplicationStatus, ctype appv1beta1.ConditionType, reason, message string) { - setConditionValue(appStatus, ctype, corev1.ConditionTrue, reason, message) -} - -func clearCondition(appStatus *appv1beta1.ApplicationStatus, ctype appv1beta1.ConditionType, reason, message string) { - setConditionValue(appStatus, ctype, corev1.ConditionFalse, reason, message) + setCondition(appStatus, appv1beta1.Error, corev1.ConditionFalse, "NoError", "No error seen") } -func setConditionValue(appStatus *appv1beta1.ApplicationStatus, ctype appv1beta1.ConditionType, status corev1.ConditionStatus, reason, message string) { +func setCondition(appStatus *appv1beta1.ApplicationStatus, ctype appv1beta1.ConditionType, status corev1.ConditionStatus, reason, message string) { var c *appv1beta1.Condition for i := range appStatus.Conditions { if appStatus.Conditions[i].Type == ctype {