Skip to content
Latchkey

Crossplane "READY False" resource in CI

READY reports whether the external resource actually exists and is usable. A resource can be SYNCED True (reconcile succeeded) but READY False because the cloud object is still provisioning or a referenced resource it depends on is not ready.

What this error means

A managed or composite resource shows READY False for longer than expected, blocking CI steps that wait for it, even though SYNCED is True.

crossplane
NAME                                          SYNCED   READY   AGE
rdsinstance.rds.aws.upbound.io/app-db         True     False   6m
# Ready   False   Creating   external resource is being created

Common causes

The external resource is still provisioning

Some cloud resources (databases, load balancers) take minutes to become available, so READY stays False until the provider observes them ready.

A dependency reference is not ready

The resource references another resource (a subnet, a VPC) that is itself not ready, so it cannot become ready either.

How to fix it

Wait on the Ready condition with a real timeout

  1. Wait for the resource Ready condition with a timeout matched to provisioning time.
  2. If it never becomes ready, describe it and read the Ready message.
  3. Resolve the underlying dependency or provider error.
Terminal
kubectl wait --for condition=Ready --timeout=900s \
  rdsinstance.rds.aws.upbound.io/app-db

Check dependencies are ready first

Confirm referenced resources are Ready so the dependent one can progress.

Terminal
kubectl get managed | grep -E 'READY|False'

How to prevent it

  • Use realistic Ready timeouts for slow cloud resources in CI.
  • Order or reference dependencies so they become ready first.
  • Do not treat SYNCED True as done; wait for READY True where it matters.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →