Flavors: errors — Nova — branch stable/2026.2
Branch
stable/2026.2@8df1922926dd— repository https://opendev.org/openstack/nova — analysed on 2026-10-28
Nova returns errors as {"<badRequest|itemNotFound|conflict|forbidden>": {"code": <status>, "message": "…"}} [inferred: Nova's fault wrapper, not read for this scope]. The exception classes are in nova/exception.py. Their own code is often 500, but each handler translates them, so the table gives what the client receives.
1. Flavor API
| Situation | Status | Message | Reference |
|---|---|---|---|
Body or query does not match the schema (bad id characters, ram = 0, rxtx_factor at ≥ 2.102, unknown query parameter at ≥ 2.75…) | 400 | jsonschema detail | nova/api/openstack/compute/schemas/flavors.py:29-154 |
is_public filter not boolean-like or none (admin) | 400 | Invalid is_public filter [<v>] | nova/api/openstack/compute/flavors.py:206-210 |
minRam / minDisk not an integer | 400 | Invalid minRam filter [<v>] / Invalid minDisk filter [<v>] | nova/api/openstack/compute/flavors.py:228-241 |
marker is not a visible flavor id | 400 | marker [<marker>] not found | nova/api/openstack/compute/flavors.py:246-252 |
rxtx_factor ≤ 0 or too large (path not covered by the schema) | 400 [inferred: InvalidInput] | 'rxtx_factor' argument must be a float between 0 and 3.40282e+38 | nova/compute/flavors.py:104-113 |
| Create with an existing name | 409 | Flavor with name <name> already exists. | nova/objects/flavor.py:166-171, nova/api/openstack/compute/flavors.py:97-99 |
| Create with an existing id | 409 | Flavor with ID <id> already exists. | same |
| Flavor not found, or private and not visible | 404 | Flavor <id> could not be found. | nova/api/openstack/common.py:491-495, nova/api/openstack/compute/flavors.py:185-187 |
| Caller is not admin for create, update, delete, extra-spec writes, access management | 403 | Policy doesn't allow <rule> to be performed. [inferred: oslo.policy message] | nova/policies/flavor_manage.py:26-58 |
2. Extra specs
| Situation | Status | Message | Reference |
|---|---|---|---|
Key outside ^[a-zA-Z0-9-_:. ]{1,255}$, value longer than 255 | 400 | jsonschema detail | nova/api/openstack/compute/schemas/flavors_extraspecs.py:20-39 |
| Numeric value longer than 255 characters once converted | 400 | extra_specs value has more than 255 characters. [inferred: check_string_length message] | nova/api/openstack/compute/flavors_extraspecs.py:45-52 |
| ≥ 2.86, value refused by the validator | 400 | Validation failed; '<v>' is not one of: <enum>. / … is not of the format '<regex>'. / … is not a valid integer value. / … is greater than the max value of '<max>'. / … is less than the min value of '<min>'. / … is not a valid boolean-like value. | nova/api/validation/extra_specs/base.py:62-104 |
| ≥ 2.86, unknown key in a Nova namespace | 400 | Validation failed; extra spec '<key>' does not appear to be a valid extra spec. | nova/api/validation/extra_specs/validators.py:53-63 |
PUT …/os-extra_specs/{key} with a body key that differs from the URL | 400 | Request body and URI mismatch | nova/api/openstack/compute/flavors_extraspecs.py:98-100 |
| Concurrent writers: the row could not be written after 10 retries | 409 | Flavor <id> extra spec cannot be updated or created after 10 retries. | nova/objects/flavor.py:95-129, nova/api/openstack/compute/flavors_extraspecs.py:84-85 |
GET/DELETE of a key the flavor does not have | 404 | Flavor <id> has no extra specs with key <key>. | nova/api/openstack/compute/flavors_extraspecs.py:121-127, nova/api/openstack/compute/flavors_extraspecs.py:139-149 |
3. Access list
| Situation | Status | Message | Reference |
|---|---|---|---|
| Listing the access of a public flavor | 404 | Access list not available for public flavors. | nova/api/openstack/compute/flavor_access.py:52-57 |
addTenantAccess on a public flavor (≥ 2.7) | 409 | Can not add access to a public flavor. | nova/api/openstack/compute/flavor_access.py:81-85 |
| Project already in the list | 409 | Flavor access already exists for flavor <id> and project <project> combination. | nova/objects/flavor.py:72-81, nova/api/openstack/compute/flavor_access.py:89-90 |
| Project not in the list (remove) | 404 | Flavor access not found for <id> / <project> combination. | nova/objects/flavor.py:84-92, nova/api/openstack/compute/flavor_access.py:119-122 |
| Project unknown to Keystone (add); ignored for remove | 400 | Project ID <id> is not a valid project. [inferred: identity.verify_project_id] | nova/api/openstack/compute/flavor_access.py:77, nova/api/openstack/compute/flavor_access.py:104-111 |
4. Flavors when booting or resizing a server
| Situation | Status | Message | Reference |
|---|---|---|---|
| Flavor disabled, deleted or not visible | 400 | Flavor <id> could not be found. | nova/compute/api.py:1131-1132, nova/api/openstack/compute/servers.py:857-866 |
RAM below the image min_ram | 400 | Flavor's memory is too small for requested image. | nova/compute/api.py:814-815 |
disk below the image size or min_disk | 400 | Flavor's disk is too small for requested image… / Flavor's disk is smaller than the minimum size specified in image metadata… | nova/compute/api.py:878-885 |
disk = 0, image-backed, policy requires boot from volume | 403 | Only volume-backed servers are allowed for flavors with zero disk. | nova/api/openstack/compute/servers.py:847-849 |
| Image asks for CPU pinning the flavor forbids | 400 | Image property 'hw_cpu_policy' is not permitted to override CPU pinning policy set against the flavor | nova/virt/hardware.py:1806-1816, nova/api/openstack/compute/servers.py:61 |
| Flavor and image set the same key differently | 400 | Flavor <f> has hw:<k> extra spec explicitly set to <v>, conflicting with image <i> which has hw_<k> explicitly set to <w>. | nova/virt/hardware.py:1372-1390 |
| Invalid extra-spec value stored before 2.86 (bad CPU policy, NUMA layout, page size…) | 400 | per exception, for example CPU policy requested from 'flavor extra specs' is invalid, given: '<v>', available: '<list>'. | nova/virt/hardware.py:1790-1803, nova/api/openstack/compute/servers.py:55-93 |
| Resize to the same flavor | 400 | When resizing, instances must change flavor! | nova/compute/api.py:4378-4379, nova/api/openstack/compute/servers.py:1200-1207 |
Resize to a disk = 0 flavor, image-backed | 400 | Server disk was unable to be resized because: Resize to zero disk flavor is not allowed. | nova/compute/api.py:4355-4361 |
| Resize over quota | 403 | quota message | nova/api/openstack/compute/servers.py:1179-1180 |
Two points:
- Values stored before 2.86 are only checked at boot. A flavor accepted by an old client can fail every boot with 400.
- Several resource requests built from extra specs (PCI alias not configured, vPMEM label unknown) only fail at scheduling time: the server goes to
ERRORwithNoValidHost, without an HTTP error [inferred: scheduler path not read for this scope].
Source: reverse-spec-nova/02-flavors-errors_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.