'No valid host was found' in OpenStack Nova — Causes & Fix
Fix OpenStack Nova's 'No valid host was found' scheduling error: usually exhausted Placement capacity or a strict filter. Diagnose flavors, ratios, and fix it.
- #openstack
- #troubleshooting
- #errors
- #nova
Stuck on this OpenStack error? Get the free incident triage checklist
A one-page PDF — the exact steps to isolate, fix, and verify a production error like this one. No spam, unsubscribe anytime.
Guided workflow
OpenStack: No valid host was found
The scheduler could not place the instance. It is usually correct — the work is finding which constraint removed every host.
- Diagnose
- Inspect
- Interpret
- Remediate
- Validate
- Prevent
0 of 6 steps done
-
The instance carries the real reason. The list view shows only ERROR, which tells you nothing about which stage failed.
openstack server show <id> -f value -c faultRead-onlyWhat it means: Contains the underlying exception. If it mentions scheduling, this journey applies; if it mentions networking or block devices, the failure is in Neutron or Cinder instead.
-
Placement is the component that decides whether any host can satisfy the request. Ask it with the flavour's actual resources rather than inferring from dashboards.
openstack flavor show <flavor> -f jsonRead-onlyWhat it means: Note vcpus, ram, disk, and any extra_specs — pinning, NUMA and aggregate requirements all live there and all remove hosts.
openstack allocation candidate list --resource VCPU=<n> --resource MEMORY_MB=<n> --resource DISK_GB=<n>Read-onlyExpect: One or more candidate hosts.
What it means: Empty output confirms the scheduler is right: nothing can satisfy this. The investigation moves to why.
openstack compute service list --service nova-computeRead-onlyWhat it means: A disabled host is invisible to the scheduler. A host that is up with a stale Updated At is a message-bus symptom.
-
Each of these is cheaper to check than the next, so the order saves time.
- If: Hosts are disabled
- Someone disabled them, often during maintenance months ago. Check the disable reason — a blank one is a strong hint it was forgotten.
- If: Allocation candidates exist but the instance still failed
- A scheduler filter beyond Placement rejected the hosts — affinity, or an aggregate filter. Check the flavour extra_specs against aggregate metadata.
- If: The flavour requires CPU pinning or a NUMA topology
- The host needs contiguous resources on a single NUMA node. Plenty of free vCPUs spread across nodes will not satisfy it, which is why this looks like a capacity accounting error.
- If: The cluster looks idle but nothing places
- Scheduling counts requests, not usage. Allocation can be exhausted at 30% CPU utilisation, and every utilisation dashboard will show the cloud as idle. Read more →
-
Re-enabling a host is safe and reversible. Changing allocation ratios affects every future placement and deserves more thought than an incident usually allows.
openstack compute service set --enable <host> nova-computeChanges stateWhat it means: Returns a host to scheduling. Confirm first that whatever caused it to be disabled has actually been resolved.
openstack aggregate show <aggregate>Read-onlyWhat it means: Compare aggregate metadata against the flavour extra_specs. A mismatch of one key is enough to exclude every host.
-
Re-run the identical flavour and image, not a small test instance. Most of the constraints that cause this — NUMA topology, CPU pinning, aggregate metadata — only bind at particular sizes, so a tiny instance can place successfully on a cluster that still cannot satisfy the original request.
openstack server create --flavor <same-flavor> --image <same-image> --network <net> placement-testChanges stateExpect: The instance reaches ACTIVE rather than ERROR.
What it means: Delete it once it is up. A success here with the same flavour is real evidence the constraint is resolved; a success with a smaller flavour proves nothing about the request that actually failed, and is the usual reason this problem gets declared fixed twice.
-
Alert on scheduling-failure rate, which rises weeks before capacity becomes an outage. Document every host aggregate and the flavours that require it, in the same repository as the deployment configuration. Require a disable reason on every disabled service. Keep one compute node's worth of headroom so a host can be evacuated without refusing workloads.
Saves to your Toolkit when signed in, and to this browser otherwise.
TL;DR:
No valid host was foundmeans Nova’s scheduler ended with an empty candidate list — either Placement returned no host with enough freeMEMORY_MB/VCPU/DISK_GB(after allocation ratios and reservations), or a Nova filter eliminated every host. Read the scheduler log first: “Got no allocation candidates” points at Placement capacity/traits, while “Filtering removed all hosts” names the exact filter (disabled computes, host aggregates, or an anti-affinity server group). Confirm capacity withopenstack allocation candidate list --resource VCPU=2 --resource MEMORY_MB=4096 --resource DISK_GB=20. Full diagnostic workflow below.
Overview
No valid host was found is Nova’s way of saying the scheduler started with a list of candidate compute hosts and ended with an empty list. Either Placement returned no allocation candidates with enough capacity, or the in-process scheduler filters eliminated every host that Placement did return. Because the scheduler never picked a target, the instance goes straight to ERROR and is not rescheduled.
You will see this in the instance fault:
NoValidHost: No valid host was found. There are not enough hosts available.
And in the nova-scheduler (or nova-conductor) log:
WARNING nova.scheduler.manager [req-...] Got no allocation candidates from the placement API. This could be due to insufficient resources or a temporary occurrence as compute nodes start up.
It happens at instance boot, resize/migrate (the destination is also scheduled), and evacuate. The decision is per-request: a flavor that boots fine today can fail tomorrow when the fleet fills up, when a host is disabled, or when a server group’s anti-affinity rule excludes the only host with room.
Symptoms
- Instance goes to
ERRORimmediately afterBUILDwith fault “No valid host was found”. - Resize or live-migration to a specific host fails with the same message.
- The error appears even though
openstack hypervisor listshows free capacity (filters, not raw capacity, are eliminating hosts).
openstack server show web-01 -c fault -f value
{'code': 500, 'created': '2026-06-24T14:02:11Z', 'message': 'No valid host was found. There are not enough hosts available.', 'details': 'Traceback ... NoValidHost: No valid host was found...'}
openstack server show web-01 -c 'OS-EXT-SRV-ATTR:hypervisor_hostname' -c status -f value
None
ERROR
Common Root Causes
1. Placement has no host with enough RAM, vCPU, or disk
The first cut happens in Placement, before any Nova filter runs. If no resource provider has unused MEMORY_MB, VCPU, and DISK_GB for the flavor, you get zero candidates and the scheduler stops.
openstack resource provider list
openstack resource provider inventory list <RP_UUID>
openstack resource provider usage show <RP_UUID>
+----------------+------------------+----------+----------+----------+-----------+-------+
| resource_class | allocation_ratio | min_unit | max_unit | reserved | step_size | total |
+----------------+------------------+----------+----------+----------+-----------+-------+
| VCPU | 16.0 | 1 | 64 | 0 | 1 | 64 |
| MEMORY_MB | 1.0 | 1 | 257000 | 4096 | 1 | 257000 |
| DISK_GB | 1.0 | 1 | 1800 | 0 | 1 | 1800 |
+----------------+------------------+----------+----------+----------+-----------+-------+
Compare total * allocation_ratio - reserved - used to the flavor’s demand. Tight MEMORY_MB (ratio 1.0) is the usual culprit.
2. ComputeFilter excluding disabled or down computes
ComputeFilter drops any host whose nova-compute service is disabled or not reporting. If you disabled hosts for maintenance and forgot to re-enable them, capacity vanishes.
openstack compute service list --service nova-compute
+----+--------------+------------+------+----------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+--------------+------------+------+----------+-------+----------------------------+
| 12 | nova-compute | compute-01 | nova | enabled | up | 2026-06-24T14:01:55.000000 |
| 13 | nova-compute | compute-02 | nova | disabled | up | 2026-06-24T13:40:02.000000 |
| 14 | nova-compute | compute-03 | nova | enabled | down | 2026-06-24T11:12:18.000000 |
+----+--------------+------------+------+----------+-------+----------------------------+
compute-02 is disabled and compute-03 is down — both are filtered out. Re-enable:
openstack compute service set --enable compute-02 nova-compute
3. AggregateInstanceExtraSpecsFilter and host aggregates
If your flavor carries aggregate_instance_extra_specs:<key> extra_specs, only hosts in an aggregate with the matching metadata pass. A typo or a missing aggregate membership eliminates everything.
openstack aggregate list
openstack aggregate show ssd-aggregate
openstack flavor show m1.fast -c properties -f value
{'aggregate_instance_extra_specs:storage': 'ssd'}
If no aggregate has metadata storage=ssd (or no compute is a member), the filter returns zero hosts.
4. Allocation ratios and reserved capacity
CPU/RAM oversubscription is governed by allocation_ratio (now stored on the Placement inventory, historically cpu_allocation_ratio / ram_allocation_ratio in nova.conf). A ratio of 1.0 on RAM with reserved_host_memory_mb set high can make a host look full while free still shows memory.
grep -E '^(cpu_allocation_ratio|ram_allocation_ratio|disk_allocation_ratio|reserved_host_memory_mb)' \
/etc/nova/nova.conf
cpu_allocation_ratio = 16.0
ram_allocation_ratio = 1.0
reserved_host_memory_mb = 8192
5. Anti-affinity server groups
A server group with the anti-affinity policy forbids two members on the same host. Once every host already runs one member, the next instance has nowhere legal to land — even with abundant capacity.
openstack server group list
openstack server group show db-cluster -c policy -c members -f yaml
policy: anti-affinity
members:
- 7c9e... (on compute-01)
- 4a2b... (on compute-02)
- 0f5d... (on compute-03)
A 3-host cloud cannot place a 4th anti-affinity member. Use soft-anti-affinity or add hosts.
6. Flavor extra_specs the fleet cannot satisfy
ComputeCapabilitiesFilter, NUMATopologyFilter, or trait-based extra_specs (trait:CUSTOM_GPU=required, hw:cpu_policy=dedicated) can match nothing if no host advertises that capability or trait.
openstack flavor show g1.gpu -c properties -f value
{'trait:CUSTOM_GPU': 'required', 'hw:cpu_policy': 'dedicated'}
If no resource provider has the CUSTOM_GPU trait, Placement returns no candidates before Nova filters even run.
Diagnostic Workflow
Step 1: Read the fault and the scheduler log
openstack server show <SERVER> -c fault -f value
# Kolla-Ansible (controller)
docker logs nova_scheduler 2>&1 | grep -iE "no allocation candidates|no valid host|Filter .* returned 0 hosts" | tail -10
# Traditional packages
sudo journalctl -u devstack@n-sch 2>/dev/null || \
sudo grep -iE "no allocation candidates|Filtering removed all hosts" /var/log/nova/nova-scheduler.log | tail -10
“Got no allocation candidates” points at Placement (Step 3); “Filtering removed all hosts” points at a Nova filter (Step 4).
Step 2: Confirm raw hypervisor capacity
openstack hypervisor list --long
openstack hypervisor stats show
This shows vcpus_used/vcpus, memory_mb_used/memory_mb, and free disk per host — a sanity check that the cloud is not simply full.
Step 3: Query Placement directly for the flavor’s resources
openstack allocation candidate list \
--resource VCPU=2 --resource MEMORY_MB=4096 --resource DISK_GB=20
If this returns rows, Placement has capacity and the elimination is a Nova filter. If it returns nothing, the gap is inventory/ratio/traits (Step 5).
Step 4: Check service state and the enabled filters
openstack compute service list --service nova-compute
grep -E '^(enabled_filters|scheduler_default_filters)' /etc/nova/nova.conf
enabled_filters = AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,AggregateInstanceExtraSpecsFilter
Cross-reference the enabled filters with the flavor’s extra_specs, aggregates, and server group to find which one applies.
Step 5: Inspect inventory, usage, and allocation ratios
for rp in $(openstack resource provider list -f value -c uuid); do
echo "== $rp =="
openstack resource provider inventory list $rp
openstack resource provider usage show $rp
done
total * allocation_ratio - reserved - used per resource class tells you exactly how much is bookable. If that is below the flavor’s demand on every provider, you have a capacity problem; add hosts or raise ratios.
Example Root Cause Analysis
A request to boot four db.large instances into the db-cluster server group succeeds three times and fails on the fourth with No valid host was found.
openstack hypervisor list --long shows all three compute nodes at well under 50% RAM and CPU, so the cloud is not full. The scheduler log is the tell:
DEBUG nova.filters [req-...] Filter ServerGroupAntiAffinityFilter returned 0 hosts
INFO nova.filters [req-...] Filtering removed all hosts for the request with instance ID '9d1c...'. Filter results: ['AvailabilityZoneFilter: (start: 3, end: 3)', 'ComputeFilter: (start: 3, end: 3)', 'ServerGroupAntiAffinityFilter: (start: 3, end: 0)']
The group policy is anti-affinity and all three hosts already run a member. With only three computes, a fourth anti-affinity member is mathematically impossible.
Fix: either add a fourth compute node, or recreate the group with soft-anti-affinity so Nova best-effort spreads members but still places the fourth:
openstack server group create db-cluster-soft --policy soft-anti-affinity
# boot the 4th member with --hint group=<new-group-uuid>
The fourth instance then schedules onto the least-loaded host and reaches ACTIVE.
Prevention Best Practices
- Alert on disabled/down computes: poll
openstack compute service listand page when anova-computeisdisabledordown. Forgotten maintenance disables silently shrink the schedulable pool. - Capacity-plan against Placement, not
nova.conf: monitortotal*ratio - reserved - usedper resource class so you raise ratios or add hosts before RAM (ratio 1.0) is exhausted. - Size anti-affinity groups to your host count: never request more anti-affinity members than you have compute hosts; prefer
soft-anti-affinityfor clusters that may grow. - Keep flavor extra_specs and aggregate metadata in sync via config management; a single typo’d
aggregate_instance_extra_specskey zeroes the host list. - Advertise GPU/NUMA traits on the hosts that actually have them, and validate every specialized flavor against
openstack allocation candidate listbefore publishing it. - For ad-hoc triage, the free incident assistant can turn a scheduler log dump into the likely filter or capacity cause. See more in OpenStack guides.
Quick Command Reference
# The fault and scheduler reason
openstack server show <SERVER> -c fault -f value
docker logs nova_scheduler 2>&1 | grep -iE "no allocation candidates|Filtering removed all hosts" | tail -10
sudo grep -iE "no allocation candidates|Filtering removed all hosts" /var/log/nova/nova-scheduler.log | tail -10
# Raw capacity and service state
openstack hypervisor list --long
openstack compute service list --service nova-compute
# Does Placement have candidates for the flavor's resources?
openstack allocation candidate list --resource VCPU=2 --resource MEMORY_MB=4096 --resource DISK_GB=20
# Inventory, usage, and ratios
openstack resource provider inventory list <RP_UUID>
openstack resource provider usage show <RP_UUID>
grep -E '^(cpu_allocation_ratio|ram_allocation_ratio|reserved_host_memory_mb|enabled_filters)' /etc/nova/nova.conf
# Flavor extra_specs, aggregates, server groups
openstack flavor show <FLAVOR> -c properties -f value
openstack aggregate list
openstack server group show <GROUP> -c policy -c members -f yaml
# Re-enable a host
openstack compute service set --enable <HOST> nova-compute
Related OpenStack Errors
- OpenStack: ‘Got no allocation candidates from the placement API’ — the Placement-side half of this error; start here when the scheduler log says “no allocation candidates.”
- OpenStack: ‘Filtering removed all hosts for the request’ — the Nova-filter half; walks through reading
Filter results:to name the offending filter. - OpenStack: ‘Quota exceeded’ for instances, cores, or RAM — the other common reason a boot fails before it ever schedules.
- Next step: the OpenStack troubleshooting hub collects the top OpenStack errors, a launcher, and the incident assistant, or browse all OpenStack guides.
Conclusion
No valid host was found means the candidate host list reached zero — either in Placement (no inventory) or in a Nova filter. The usual root causes:
- No provider has enough free
MEMORY_MB/VCPU/DISK_GBafter ratios and reservations. ComputeFilterdropped disabled or down nova-compute services.AggregateInstanceExtraSpecsFilterfound no aggregate matching the flavor metadata.- Allocation ratios or
reserved_host_memory_mbmade hosts look full. - A
server group anti-affinitypolicy left no legal host. - Flavor extra_specs (traits, NUMA, dedicated CPU) that no host can satisfy.
Read the scheduler log first: “Got no allocation candidates” sends you to Placement inventory, while “Filtering removed all hosts” names the exact filter to fix.
Fixed it? Get 500 OpenStack & DevOps AI prompts — free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.
Stuck on this? Start guided troubleshooting
Open an interactive diagnostic session with this error already loaded. Work a step-by-step plan, record what each check returns, land on a root cause, and export a clean incident summary — no account needed to start.
Did this fix your issue?
Solved it a different way?
Share the fix that worked for you — reviewed, then published to help the next engineer.
That looks like it may contain a secret (key, token, password, or connection string). Please remove it — a note with a detected secret can’t be published.
Thanks — that helps. Published notes appear after a quick review.
Field-tested fixes
- Resource issue (CPU/mem/disk) Placement had stale allocations from deleted instances, so the scheduler counted the hosts as full. Running `nova-manage placement heal_allocations` and confirming with `openstack resource provider inventory list` cleared the phantom usage, and instances scheduled again.
Reviewed before publishing. Verify against your own environment.
Diagnose "No valid host was found" with AI
Paste your nova-scheduler logs and flavor/quota details and the Incident Assistant will work through capacity, host aggregates, and placement filters to find why scheduling failed.
Trending errors this week
The error guides other engineers are actually reading right now.
- 1mount: wrong fs type, bad option, bad superblock
- 2mount: wrong fs type, bad option, bad superblock
- 3Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block
- 4gpg: keyserver receive failed: No data
- 5Docker 'failed to set up container networking': Fix the Bridge and IP Pool
- 6Docker 'failed to create shim task': How to Fix the containerd Runtime Error
Get 500 Battle-Tested DevOps AI Prompts — Free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.