Conditions¶
Status: Alpha Last Updated: 2026-05-30
The operator emits standard Kubernetes condition objects on three places:
ApplicationInstance.status.conditions[]— application reconciliation state.Operation.status.conditions[]— day-2 operation state.- The operator's own
Cluster.status.conditions[]— connectivity to Odoo, authentication, and the presence/health of the cluster's required controllers.
Every condition has the standard fields type, status (True / False / Unknown), reason (a short PascalCase machine-readable code), message (a human-readable explanation), lastTransitionTime, and (where helpful) observedGeneration. The reason vocabulary below is the closed set the operator currently emits; additional reasons may be added in later alphas, and the operator does not remove a documented reason without a deprecation note.
ApplicationInstance¶
Ready¶
Ready=True means the application is available — its HelmRelease reports Ready=True and any optional generic readiness checks pass. Ready=False is the default during install and during failures.
status |
Reasons | Meaning |
|---|---|---|
| True | HelmReleaseReady |
The underlying HelmRelease reports Ready=True and the operator is satisfied. |
| True | HelmReleaseReadyWithWarnings |
Ready, but a non-fatal warning was raised (e.g., a deprecated values key). The message carries the warning text. |
| False | HelmReleaseFailed |
The HelmRelease failed (install error, upgrade error, drift remediation error). message carries the underlying error. |
| False | ChartUnreachable |
The chart source (OCIRepository or HelmRepository) is not currently reachable. |
| False | WaitingForCertificate |
The chart's ingress references a cert-manager Certificate that has not yet been issued. |
| False | WaitingForSecret |
The chart references a Secret (typically via external-secrets) that has not yet been synced. |
| False | Installing |
First-time install in progress. |
| False | Upgrading |
An upgrade is in progress. |
| Unknown | Reconciling |
The operator has not yet observed enough of the downstream state to decide. Usually transient. |
Reconciling¶
Reconciling=True means the operator is actively driving the resource toward the desired state. Reconciling=False is the steady state.
status |
Reasons | Meaning |
|---|---|---|
| True | HelmReleaseUpgrading |
The materialized HelmRelease is in the middle of an upgrade. |
| True | HelmReleaseInstalling |
First-time install. |
| True | ChartSourceSyncing |
The chart source resource is fetching the artifact for a new version. |
| False | Stable |
No reconciliation in flight. |
Degraded¶
Degraded=True is the loud signal that something needs attention. A Degraded=True resource may still have Ready=True (degraded-but-running) or may not.
status |
Reasons | Meaning |
|---|---|---|
| True | HelmReleaseDegraded |
Flux reports the release as Released=False after a previously successful install. |
| True | ChartUnreachable |
Persistent inability to reach the chart source. |
| True | EndpointUnreachable |
A generic readiness check failed (HTTP probe, TCP probe). |
| True | Drifted |
Drift detection found a mismatch between desired and live state. The operator reports; it does not auto-remediate. |
| False | Recovered |
The condition cleared. |
Suspended¶
Suspended=True means reconciliation is paused, either manually or by a maintenance window in the catalog.
status |
Reasons | Meaning |
|---|---|---|
| True | MaintenanceWindow |
The catalog policy says this application is in a maintenance window. |
| True | ManuallySuspended |
An admin or Odoo policy explicitly suspended reconciliation. |
| False | Active |
Reconciliation is active. |
Blocked¶
Blocked=True means reconciliation cannot proceed until a prerequisite is satisfied.
status |
Reasons | Meaning |
|---|---|---|
| True | AwaitingApproval |
A required approval has not been provided. |
| True | MissingChartSource |
The configured chart source does not exist or is not allowed. |
| True | MissingDependencies |
A required controller (cert-manager, external-secrets, ...) is not present. |
| True | PolicyDenied |
Cluster-side policy rejected the desired state. |
| False | Unblocked |
The blocker cleared. |
Deleting¶
Deleting=True means uninstall is in progress. Set when the resource has a deletion timestamp; cleared when the finalizer is removed.
status |
Reasons | Meaning |
|---|---|---|
| True | Uninstalling |
The operator is removing the HelmRelease and waiting for Helm to clean up resources. |
| True | WaitingForChildResources |
Some chart-produced resources have not yet terminated. |
Operation¶
Accepted¶
Accepted=True means the operator validated the request and queued it for execution. Set as soon as the admission webhook is satisfied.
status |
Reasons | Meaning |
|---|---|---|
| True | AdmissionPassed |
The admission webhook accepted the resource and the operator has it queued. |
| False | ValidationFailed |
The operator could not parse or validate the request (typically transient, e.g., the target was deleted between admission and reconcile). |
Running¶
Running=True means the engine is actively working. Set after the operator creates the engine's resource and observes it start.
status |
Reasons | Meaning |
|---|---|---|
| True | EngineStarted |
The engine reports work in progress. |
| False | EngineNotStarted |
The engine has not yet started; usually because Blocked is true. |
Succeeded¶
Succeeded=True is a terminal state.
status |
Reasons | Meaning |
|---|---|---|
| True | EngineCompleted |
The engine reported a successful terminal outcome. |
| False | NotYetSucceeded |
Not yet succeeded; either still running or failed. |
Failed¶
Failed=True is a terminal state.
status |
Reasons | Meaning |
|---|---|---|
| True | EngineFailed |
The engine reported a terminal failure. message carries the engine's error. |
| True | Timeout |
The engine ran past the configured timeout. |
| True | PreconditionFailed |
A precondition (target not Ready, conflicting operation) was not satisfied within the configured wait window. |
Cancelled¶
Cancelled=True is a terminal state.
status |
Reasons | Meaning |
|---|---|---|
| True | UserCancelled |
An admin (or Odoo policy) cancelled the operation. |
| True | SupersededByOperation |
A newer operation supersedes this one (e.g., a fresh Backup while this one was waiting). |
Blocked¶
Blocked=True means the engine cannot start until a prerequisite is satisfied. The operation remains in this condition until either the blocker clears or it is Cancelled.
status |
Reasons | Meaning |
|---|---|---|
| True | ConflictingOperation |
Another operation on the same target is in flight; the admission webhook admitted with Blocked=True and the operator will retry when the other completes. |
| True | AwaitingApproval |
spec.approvals.required is true and the claim is missing or invalid. |
| True | TargetNotReady |
The target ApplicationInstance is not Ready=True and the operation requires it. |
| True | DependencyMissing |
A required controller (Velero, Argo Workflows) is not present on the cluster. |
Cluster (operator self-status)¶
The operator maintains a Cluster resource that reports its own posture: how it relates to Odoo, whether it is authenticated, and whether the cluster's required controllers are healthy. This is the resource the Pull-mode POST /api/agent/events ClusterHeartbeat event reports against.
Connected¶
Connected=True means the most recent outbound round-trip to the control plane succeeded within the heartbeat interval.
status |
Reasons | Meaning |
|---|---|---|
| True | RoundTripOK |
Recent round-trip to the control plane succeeded. |
| True | ControlPlaneReachable |
Initial registration exchange with the control plane succeeded. |
| False | ControlPlaneUnreachable |
Outbound HTTPS to the control plane is failing. message carries the underlying network error. |
Disconnected¶
Disconnected=True is the headline condition the operator sets when no successful round-trip has occurred within the configured disconnect window. Pull-mode reconciliation continues; only new intent is paused. See ../connectivity/pull-mode.md.
status |
Reasons | Meaning |
|---|---|---|
| True | NoRecentRoundTrip |
No successful contact with the control plane within the disconnect window. |
| False | Connected |
The connection is alive. |
Authenticated¶
Authenticated=True means the cluster's bootstrap credential is valid.
status |
Reasons | Meaning |
|---|---|---|
| True | CredentialAccepted |
The bearer token (and optional client certificate) is accepted by Odoo. |
| False | CredentialRejected |
The control plane returned 401/403. Requires admin intervention; the operator stops polling and surfaces this condition. |
| False | ControlPlaneAuthenticationFailed |
Outbound authentication to the control plane failed during heartbeat. message carries the underlying error. |
| False | CredentialExpired |
The token's expiry has been reached and rotation failed. |
ControllersHealthy¶
ControllersHealthy=True means the third-party controllers the operator depends on are present and reporting healthy.
status |
Reasons | Meaning |
|---|---|---|
| True | AllControllersReady |
Every required controller (flux, cert-manager, external-secrets, velero) reports ready. |
| False | ControllerMissing |
At least one required controller is not installed. message lists which. |
| False | ControllerDegraded |
At least one required controller reports unhealthy. message lists which and why. |
The operator surfaces missing or degraded controllers loudly: a Cluster with ControllersHealthy=False is a configuration problem the admin must address, and the AI assistant in Odoo can offer to install the missing pieces via a generated Operation.
BufferOverflow¶
BufferOverflow=True means the outbound Pull-mode event buffer dropped events because Odoo was unreachable or not accepting posts and the buffer reached its capacity.
status |
Reasons | Meaning |
|---|---|---|
| True | EventBufferFull |
The operator dropped one or more outbound events. The message includes the drop count and suggests verifying Odoo connectivity. |
| False | BufferDrained |
The buffer has drained successfully after a prior overflow. |