Uploaded image for project: 'OpenShift Bugs'
  1. OpenShift Bugs
  2. OCPBUGS-8898

operator-lifecycle-manager ClusterOperator does not set reason for some conditions

XMLWordPrintable

    • Low
    • Refinement Backlog
    • 1
    • Rejected
    • Unspecified
    • If docs needed, set a value

      +++ This bug was initially created as a clone of Bug #1955761 +++

      +++ This bug was initially created as a clone of Bug #1945443 +++

      Like bug 1945443, which was for the packageserver ClusterOperator, the operator-lifecycle-manager ClusterOperator does not seem to set reasons, and mostly does not set messages either. From 4.8.0-rc.0 CI [1]:

      $ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/origin-ci-test/logs/release-openshift-origin-installer-e2e-aws-upgrade/1404846426944442368/artifacts/e2e-aws-upgrade/clusteroperators.json | jq -r '.items[] | select(.metadata.name == "operator-lifecycle-manager").status.conditions[]'
      {
      "lastTransitionTime": "2021-06-15T18:21:20Z",
      "status": "False",
      "type": "Degraded"
      }
      {
      "lastTransitionTime": "2021-06-15T19:36:59Z",
      "message": "Deployed 0.17.0",
      "status": "False",
      "type": "Progressing"
      }
      {
      "lastTransitionTime": "2021-06-15T18:21:20Z",
      "status": "True",
      "type": "Available"
      }
      {
      "lastTransitionTime": "2021-06-15T18:21:20Z",
      "status": "True",
      "type": "Upgradeable"
      }

      Looking in a master checkout, I see a few things that might be attempts to set Reason on ClusterOperator:

      $ git --no-pager log --oneline -1
      b374b245 (HEAD -> master, origin/master, origin/HEAD) Merge pull request #2205 from benluddy/resurrect-metrics-service-templates
      $ git --no-pager grep '([.]|\t)Reason(:| = )' pkg
      pkg/controller/bundle/bundle_unpacker.go: pendingCond.Reason = CatalogSourceMissingReason
      pkg/controller/bundle/bundle_unpacker.go: failedCond.Reason = jobCond.Reason
      pkg/controller/bundle/bundle_unpacker.go: pendingCond.Reason = JobIncompleteReason
      pkg/controller/install/status_viewer.go:const TimedOutReason = "ProgressDeadlineExceeded"
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.UnhealthyCatalogSourceFound
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.AllCatalogSourcesHealthy
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.CatalogSourcesAdded
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.CatalogSourcesDeleted
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.NoCatalogSourcesFound
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.CatalogSourcesUpdated
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.ReferencedInstallPlanNotFound
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.InstallPlanNotYetReconciled
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = string(phase)
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = string(installedCond.Reason)
      pkg/controller/operators/catalog/subscription/state.go: cond.Reason = v1alpha1.InstallPlanFailed
      pkg/controller/operators/decorators/operator_test.go: csv.Status.Reason = operatorsv1alpha1.CSVReasonInstallSuccessful
      pkg/controller/operators/olm/operator_test.go: out.Status.Reason = reason
      pkg/controller/operators/olm/operator_test.go: csv.Status.Reason = reason
      pkg/controller/operators/olm/operator_test.go: operatorCSVFinal.Status.Reason = v1alpha1.CSVReasonInstallSuccessful
      pkg/controller/operators/olm/operator_test.go: operatorCSVFailedNoTargetNS.Status.Reason = v1alpha1.CSVReasonNoTargetNamespaces
      pkg/controller/operators/olm/operator_test.go: targetCSV.Status.Reason = v1alpha1.CSVReasonCopied
      pkg/controller/operators/olm/operatorgroup.go: newCSV.Status.Reason = v1alpha1.CSVReasonCopied
      pkg/controller/operators/olm/operatorgroup.go: createdCSV.Status.Reason = v1alpha1.CSVReasonCopied
      pkg/controller/operators/openshift/clusteroperator_controller.go: desired.Reason = IncompatibleOperatorsInstalled
      pkg/lib/operatorstatus/builder.go: existing.Reason = condition.Reason
      pkg/lib/operatorstatus/status.go: existingCondition.Reason = newCondition.Reason

      But obviously there are some gaps. For example Upgradeable has no reason or message in the happy case [2], but is setting a reason and message in the sad case [3].

      [1]: https://prow.ci.openshift.org/view/gs/origin-ci-test/logs/release-openshift-origin-installer-e2e-aws-upgrade/1404846426944442368
      [2]: https://github.com/operator-framework/operator-lifecycle-manager/blob/b374b2456335e191ba53ff0eca8c488205ed1ee2/pkg/controller/operators/openshift/clusteroperator_controller.go#L216-L220
      [3]: https://github.com/operator-framework/operator-lifecycle-manager/blob/b374b2456335e191ba53ff0eca8c488205ed1ee2/pkg/controller/operators/openshift/clusteroperator_controller.go#L235-L240

            krizza@redhat.com Kevin Rizza
            trking W. Trevor King
            Jian Zhang Jian Zhang
            Red Hat Employee
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated: