Conditions
Core Condition Contract
InferenceIdentityBinding uses the following current pool-only condition types:
ReadyInvalidRefUnsafeSelectorConflictRenderFailure
These conditions describe reference resolution, selector safety, identity rendering, managed-output application, and reconciliation readiness.
Allowed Reasons
| Type | Meaning when True | Allowed True reasons |
|---|---|---|
Ready | The binding reconciled successfully. | Reconciled |
InvalidRef | poolRef or the required GAIE pool CRD could not be resolved or validated. | InvalidPoolRef, TargetPoolNotFound, InferencePoolCRDMissing |
UnsafeSelector | The rendered selector set or declared boundary cannot be rendered safely. | InvalidPoolSelector, UnsafeSelector, InvalidIdentityBoundary |
Conflict | Structural exclusivity failed or the SPIFFE ID claim is duplicated. | VariantConflict, DuplicateSPIFFEID |
RenderFailure | Rendering or managed-output application failed after reference resolution succeeded. | MissingTrustDomain, InvalidServiceAccountName, InvalidSPIFFEID, ClusterSPIFFEIDCRDMissing, ManagedOutputApplyFailed |
Ready=False uses the same reason and message as the single active failure condition. Failure conditions use Resolved when False; all conditions may use Initializing while a generation has not been evaluated.
Status Behavior
On successful reconciliation:
Ready=Truewith reasonReconciledInvalidRef=Falsewith reasonResolvedUnsafeSelector=Falsewith reasonResolvedConflict=Falsewith reasonResolvedRenderFailure=Falsewith reasonResolved
On any failure state:
Ready=Falsewith the primary failure reason and message- Exactly one of
InvalidRef,UnsafeSelector,Conflict, orRenderFailureis set toTruewith the same reason and message - The other non-triggering conditions are set to
Falsewith resolution or healthy messages computedSpiffeIDs,renderedSelectors, andrenderedClusterSPIFFEIDare cleared- pending or confirmed ownership remains present through API uncertainty and changes only when a claim/UID observation or NotFound proves the recorded incarnation’s state
Conflict status is settled only after every managed output in the conflict set
has been confirmed absent. status.conflicts retains the precise peer diagnosis.
Dependency-unavailable states are classified as follows:
- Missing GAIE
InferencePoolCRD:InvalidRef=True, reasonInferencePoolCRDMissing - Missing SPIRE Controller Manager
ClusterSPIFFEIDCRD during reconcile:RenderFailure=True, reasonClusterSPIFFEIDCRDMissing - Generic managed
ClusterSPIFFEIDlist, create, update, or delete API failure:RenderFailure=True, reasonManagedOutputApplyFailed
ClusterSPIFFEIDCRDMissing retries automatically on the controller’s infrastructure retry timer. ManagedOutputApplyFailed returns the API or precise ownership-refusal error so controller-runtime retries the failed reconcile. A NoMatch response from the managed-output API is not absence confirmation and therefore never clears ownership or permits finalizer removal. InferencePoolCRDMissing can appear during resolution, but the operator also fails startup if no supported GAIE pool GVK is served during controller setup.