diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 10319671368e3..d4efd9a88a176 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -529,6 +529,9 @@ func (ctrl *ApplicationController) refreshAppConditions(app *appv1.Application) // setApplicationHealth updates the health statuses of all resources performed in the comparison func setApplicationHealth(comparisonResult *appv1.ComparisonResult) (*appv1.HealthStatus, error) { appHealth := appv1.HealthStatus{Status: appv1.HealthStatusHealthy} + if comparisonResult.Status == appv1.ComparisonStatusUnknown { + appHealth.Status = appv1.HealthStatusUnknown + } for i, resource := range comparisonResult.Resources { if resource.LiveState == "null" { resource.Health = appv1.HealthStatus{Status: appv1.HealthStatusMissing} diff --git a/controller/state.go b/controller/state.go index 42ad48634fe3e..d9bff89c44f36 100644 --- a/controller/state.go +++ b/controller/state.go @@ -207,11 +207,13 @@ func (s *ksonnetAppStateManager) getLiveObjs(app *v1alpha1.Application, targetOb func (s *ksonnetAppStateManager) CompareAppState(app *v1alpha1.Application, revision string, overrides []v1alpha1.ComponentParameter) ( *v1alpha1.ComparisonResult, *repository.ManifestResponse, []v1alpha1.ApplicationCondition, error) { + failedToLoadObjs := false conditions := make([]v1alpha1.ApplicationCondition, 0) targetObjs, manifestInfo, err := s.getTargetObjs(app, revision, overrides) if err != nil { targetObjs = make([]*unstructured.Unstructured, 0) conditions = append(conditions, v1alpha1.ApplicationCondition{Type: v1alpha1.ApplicationConditionComparisonError, Message: err.Error()}) + failedToLoadObjs = true } controlledLiveObj, liveObjByFullName, err := s.getLiveObjs(app, targetObjs) @@ -219,6 +221,7 @@ func (s *ksonnetAppStateManager) CompareAppState(app *v1alpha1.Application, revi controlledLiveObj = make([]*unstructured.Unstructured, len(targetObjs)) liveObjByFullName = make(map[string]*unstructured.Unstructured) conditions = append(conditions, v1alpha1.ApplicationCondition{Type: v1alpha1.ApplicationConditionComparisonError, Message: err.Error()}) + failedToLoadObjs = true } for _, liveObj := range controlledLiveObj { @@ -305,6 +308,9 @@ func (s *ksonnetAppStateManager) CompareAppState(app *v1alpha1.Application, revi resources[i] = resource } } + if failedToLoadObjs { + comparisonStatus = v1alpha1.ComparisonStatusUnknown + } compResult := v1alpha1.ComparisonResult{ ComparedTo: app.Spec.Source, ComparedAt: metav1.Time{Time: time.Now().UTC()}, diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 63340f3b52265..ceeabddb5eea4 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -301,7 +301,7 @@ type HealthStatus struct { type HealthStatusCode = string const ( - HealthStatusUnknown = "" + HealthStatusUnknown = "Unknown" HealthStatusProgressing = "Progressing" HealthStatusHealthy = "Healthy" HealthStatusDegraded = "Degraded"