Skip to content

Status & Conditions Reference

What a controller writes is the contract everything else reads — the web UI, the CTFd plugin, kubectl, your alerts. This page enumerates all of it, and is deliberately explicit about the places where a combination is reachable but unspecified.

Status and condition map across the three CRDs: a DployTemplate publishes SourceReady, which gates whether instances may apply a HelmRelease; a DployInstance moves through Pending, Provisioning, Ready or Available and Claimed, Failed, and Expiring, carrying a Ready condition and a health string; a DployInstanceClaim moves Pending to Bound, Rejected or Expired and mirrors the bound instance. Three gaps are marked: health is not reset on Failed or Expiring, and a Bound claim has no exit when its instance fails.

No phase. A template is configuration, and the only thing the controller decides about it is whether its chart resolves.

FieldWritten byMeaning
poolAvailabletemplate controllerwarm, unclaimed members that are Available
poolClaimedtemplate controllerpooled instances currently claimed
poolTotaltemplate controllerevery instance of the template, pooled or not
observedGenerationtemplate controllerlast spec generation reconciled
conditionstemplate controllersee below
ConditionStatusReasons
SourceReadyTrueChartResolved, or the reason source-controller reports
FalseChartNotResolved, ChartNotConfigured, ChartProbePending, SourcePending, FluxUnavailable
absentthe template has not been reconciled yet

SourceReady gates every HelmRelease: no instance applies one until it is True. A known failure also stops a pool filling; an unknown verdict does not.

FieldWritten byMeaning
phaseinstance controllersee the phase table
uuidinstance controllershort identifier used in names and URLs
namespaceinstance controllerthe workload namespace
url, connectionType, connectionMessageinstance controllerrendered connection target
engine, engineRefinstance controlleralways Flux, and the HelmRelease name
healthinstance controllerHealthy, Progressing, Degraded — a free-form string, not an enum
expiresAtinstance controllerTTL deadline, absent while an unclaimed pool member waits
conditionsinstance controllera single Ready condition
extendCountnobodydeclared in the API, never written

status.sync used to sit in this table for the same reason and has been removed from the API.

PhaseReached when
Pendingaccepted, first reconcile has not finished
ProvisioningFlux is installing — or the template has not yet proven its chart resolves
Readyon-demand instance, release healthy
Availablepooled member, unclaimed
Claimedpooled member bound to a claim
Faileda reconcile gave up
Expiringpast TTL or being deleted, teardown under way

Ready condition reasons come straight from the HelmRelease when one exists, and otherwise from the operator: TemplateNotFound, SourceError, HelmReleaseError, NamespaceError, ValuesTemplateError, ValuesYAMLError, ConnectionURLTemplateError, ConnectionMessageTemplateError, or the template’s SourceReady reason while the gate holds.

FieldWritten byMeaning
phaseclaim controllersee the phase table
instanceRef, uuidclaim controllerthe bound instance
connectionURL, connectionType, connectionMessageclaim controllermirrored from the instance
instancePhase, healthclaim controllermirrored from the instance
boundAt, expiresAtclaim controllerthe TTL clock, anchored at the binding
ttlSeconds, maxTTLSecondsclaim controllergranted lifetime and the ceiling extensions may reach
conditionsclaim controllerBound and Ready
PhaseReached whenTerminal?
Pendingaccepted, holding nothing — waiting on a warm member (PoolExhausted) or on the template to free a slot (TemplateAtCapacity)no
Boundan instance is bound and ownedno
Rejectedunsatisfiable as written, or the bound environment stayed Faileduntil the spec changes
Expiredthe TTL ran out and the environment was torn downyes, fully
ConditionStatusReasons
BoundTrueBound
Falsewaiting: PoolExhausted, TemplateAtCapacity · refused: QuotaExceeded, TemplateNotFound, TemplateDisabled, InstanceFailed, Expired
Readymirrors the bound instance’s ReadyProvisioning until the instance reports otherwise; Expired at the end