| title | OpenStack Heat Stack Create Failed (CREATE_FAILED) | ||||||
|---|---|---|---|---|---|---|---|
| slug | openstack-heat-stack-create-failed | ||||||
| technologies |
|
||||||
| severity | high | ||||||
| tags |
|
||||||
| related |
|
||||||
| last_reviewed | 2026-06-27 |
$ openstack stack show my-stack -c stack_status -c stack_status_reason -f value
CREATE_FAILED
Resource CREATE failed: ResourceInError: resources.web_server: \
Went to status ERROR due to "Message: No valid host was found., Code: 500"
heat-engine[2410]: INFO heat.engine.stack [req-...] Stack CREATE FAILED (my-stack): \
Resource CREATE failed: NotFound: resources.web_net: Network <id> could not be found.
A Heat stack moved to CREATE_FAILED because at least one resource in the
template could not be created. Heat orchestrates resources in dependency order by
calling the underlying service APIs (Nova, Neutron, Cinder, etc.). When any of
those calls fails, the owning resource goes to CREATE_FAILED, the whole stack is
marked CREATE_FAILED, and stack_status_reason carries the first underlying
error. The real fault almost always lives in the downstream service, not in Heat.
- openstack (heat-engine, plus the services Heat calls: nova, neutron, cinder, glance)
high β the entire stack deployment fails; dependent automation (autoscaling, CI environments, tenant self-service) is blocked. Already-running stacks are unaffected.
- A downstream resource genuinely fails β Nova
NoValidHost, Neutron quota or subnet exhaustion, Cinder no storage, Glance image missing. - Template references a resource that does not exist β bad image/flavor/network
name or ID, or a
get_resource/get_attrto a sibling that already failed. - Quota exceeded for the tenant (instances, cores, RAM, floating IPs, volumes).
- A circular or missing dependency / parameter the template never sets a value for.
- Insufficient roles β the stack user lacks permission to create one of the
resource types (e.g. missing
creatorrole for Barbican secrets).
heat-engine builds a dependency graph from the template and creates resources
bottom-up. For each resource it invokes the service client and polls until the
resource reaches its expected status. The first resource that errors propagates a
ResourceInError/NotFound/Forbidden up the graph; Heat stops, records the
reason on that resource, and fails the stack. Because Heat surfaces only the first
failure, the fix is to drill into the specific failed resource and then into the
service that owns it.
# Top-level reason
openstack stack show my-stack -c stack_status -c stack_status_reason -f value
# Per-resource status β find the FAILED resource(s)
openstack stack resource list my-stack -n 5
# Full detail and the raw status reason for the failed resource
openstack stack resource show my-stack <resource-name>
# Chronological events for the stack (most recent failure last)
openstack stack event list my-stack --nested-depth 5
# heat-engine log for the request
journalctl -u devstack@h-eng --since "20 min ago" | grep -iE "FAILED|error|req-"
# If the failure is Nova/Neutron, drill into that service
openstack server show <id> -c fault -f value
openstack quota show$ openstack stack resource list my-stack
+---------------+-------------------+-----------------+
| resource_name | resource_type | resource_status |
+---------------+-------------------+-----------------+
| web_net | OS::Neutron::Net | CREATE_COMPLETE |
| web_server | OS::Nova::Server | CREATE_FAILED |
+---------------+-------------------+-----------------+
# resource show then reveals the true cause, e.g.:
resource_status_reason | ResourceInError: ... No valid host was found.
# Healthy: every resource is CREATE_COMPLETE and stack_status is CREATE_COMPLETE.
- Identify the failed resource with
stack resource list, then read itsresource_status_reasonfor the underlying error. - Fix the underlying service problem β add capacity for
NoValidHost, raise quota, correct a missing network/image/flavor reference, or grant the missing role. (See the linked Nova runbook forNoValidHost.) - Correct the template if the reference itself is wrong:
openstack stack update my-stack -t fixed-template.yaml \ --parameter image=ubuntu-2204 --parameter flavor=m1.small
- If the stack is unrecoverable, delete and recreate after the fix:
openstack stack delete --yes my-stack openstack stack create -t template.yaml my-stack
openstack stack show my-stack -c stack_status -f value # Expect: CREATE_COMPLETE
openstack stack resource list my-stack # All CREATE_COMPLETE- Validate templates before deploying:
openstack orchestration template validate -t template.yaml. - Pre-check tenant quotas against the template's resource counts.
- Pin image/flavor/network references to stable IDs or parameters with sane defaults.
- Test stacks in a staging tenant in CI before promoting templates.
openstack Β· heat Β· orchestration Β· create-failed Β· stack Β· production