Errors — designate — branch stable/2026.2
Branch
stable/2026.2@e3dd774db145— repository https://opendev.org/openstack/designate — analysed on 2026-10-29
Exception → HTTP translation
Designate has a single translation point: every exception class carries its HTTP status (error_code) and a machine-readable error_type (designate/exceptions.py:18). The faultwrapper middleware turns any DesignateException that reaches the API, including the ones raised in designate-central and re-raised in the API process by oslo.messaging, into:
{"code": 409, "type": "duplicate_zone", "message": "Duplicate Zone", "request_id": "req-1c8f…"}
(designate/api/middleware.py:270). Exceptions travel back from central with their class because designate.exceptions is in allowed_remote_exmods (designate/rpc.py:46); @rpc.expected_exceptions() marks the expected ones so that the RPC server does not log them (designate/common/decorators/rpc.py:52).
| Situation | Status | Body | Defined at |
|---|---|---|---|
DesignateException subclass | its error_code | {code, type, message[, errors], request_id} | designate/api/middleware.py:270 |
object validation (InvalidObject with a ValidationErrorList) on /v2 | 400 | {code: 400, type: "invalid_object", errors: {"errors": [{path, message, validator, validator_value, raw}]}, request_id} (no message) | designate/api/middleware.py:351 |
oslo_messaging.MessagingTimeout (central did not answer within rpc_response_timeout) | 504 | {code: 504, type: "timeout", request_id} | designate/api/middleware.py:289 |
any other exception (NotImplementedError for json-patch, TypeError, a remote non-Designate exception…) | 500 | {code: 500, type: "unknown", request_id} | designate/api/middleware.py:297 |
X-Identity-Status: Invalid (keystonemiddleware with delay_auth_decision) | 401 | empty body | designate/api/middleware.py:142 |
a context flag refused by policy (all_projects, sudo, edit managed, hard delete) | 403 | empty body | designate/api/middleware.py:168 |
| maintenance mode | 503, Retry-After: 60 | empty body | designate/api/middleware.py:248 |
| Pecan routing 404 / 405 | 404 / 405 | {code, type: "not_found" / "method_not_allowed", message} | designate/api/v2/controllers/errors.py:27 |
| keystonemiddleware: missing or invalid token | 401 | keystonemiddleware's own body | etc/designate/api-paste.ini:52 |
Exceptions whose expected flag is false (for example InvalidTTL, ZoneHasSubZone, InvaildZoneTransfer, ZoneShared) are logged with a stack trace by the API (designate/api/middleware.py:307) although they are ordinary 400s. With notify_api_faults = True, every error also emits a dns.api.fault notification (designate/notifications.py:33).
Clients rely on the body: python-designateclient builds its exceptions from message, code, type, errors and request_id and ignores other keys (python-designateclient:designateclient/exceptions.py:37); when message is empty it joins errors[].message or uses type (python-designateclient:designateclient/exceptions.py:49).
Errors returned by the API, by situation
| Exception | HTTP | type / message | Situation | Raised at | Seen by the client as |
|---|---|---|---|---|---|
InvalidUUID | 400 | invalid_uuid, Invalid UUID zone_id: <value> | a path id is not a UUID | designate/utils.py:171 | JSON error |
NotFound | 404 | not_found | wrong number of path segments (/v2/zones/<id>/foo) | designate/utils.py:158 | JSON error |
UnsupportedContentType | 415 | unsupported_content_type, Content-type must be application/json | body sent with another content type; zone import neither text/dns nor JSON | designate/api/v2/patches.py:35, designate/api/v2/controllers/zones/tasks/imports.py:96 | JSON error |
EmptyRequestBody / InvalidJson | 400 | empty_request_body / invalid_json | no body / unparsable JSON | designate/api/v2/patches.py:43, designate/api/v2/patches.py:49 | JSON error |
InvalidObject | 400 | invalid_object + errors | unknown or read-only key, wrong type, value out of range, missing required field, unparsable record data | designate/objects/adapters/base.py:189, designate/objects/base.py:266, designate/objects/recordset.py:208 | JSON error with errors |
BadRequest | 400 | Duplicate filters … / Invalid filters … | repeated or unknown query filter | designate/api/v2/controllers/rest.py:70 | JSON error |
InvalidLimit, InvalidSortDir, InvalidSortKey, InvalidMarker, MarkerNotFound | 400 | invalid_limit… | bad paging parameters, marker not found | designate/utils.py:255, designate/utils.py:264, designate/utils.py:273, designate/storage/sqlalchemy/utils.py:130 | JSON error |
InvalidZoneName | 400 | invalid_zone_name, Name too long / More than one label is required / Invalid TLD / Zone name cannot be the same as a TLD / Blacklisted zone name | zone name checks at creation | designate/central/service.py:131, designate/central/service.py:138, designate/central/service.py:152, designate/central/service.py:163, designate/central/service.py:171 | JSON error |
InvalidTTL | 400 | invalid_ttl, TTL is below the minimum: <n> | zone or recordset TTL below min_ttl without use_low_ttl | designate/central/service.py:386 | JSON error |
DuplicateZone | 409 | duplicate_zone, Duplicate Zone / Zone already exists, owned by a different tenant | same name in the same pool, or owned by another project in any pool; PTR zone name taken by another project | designate/storage/sqlalchemy/base.py:243, designate/central/service.py:350, designate/central/service.py:2148 | JSON error; Neutron maps it to "zone exists" when creating PTR zones |
IllegalChildZone | 403 | illegal_child, Unable to create subzone in another tenants zone | the zone would be a sub-zone of another project's zone | designate/central/service.py:363, designate/central/service.py:893 | JSON error |
IllegalParentZone | 403 | illegal_parent, Unable to create zone because another tenant owns a subzone of the zone | the zone would be a parent of another project's zone | designate/central/service.py:374, designate/central/service.py:905 | JSON error |
OverQuota | 413 | over_quota, Quota exceeded for <resource>. | zones, recordsets per zone, records per zone, records per recordset, export size | designate/quota/base.py:48 | JSON error; Neutron raises ExternalDNSOverQuota (neutron:neutron/services/externaldns/drivers/designate/driver.py:74) |
NoValidPoolFound | 404 | no_valid_pool_found, There are no pools that matched your request | no pool passed the scheduler filters (attributes) | designate/scheduler/base.py:84 | JSON error |
MultiplePoolsFound | 500 | multiple_pools_found | the filters left several pools (misconfigured filter list) | designate/scheduler/base.py:82 | JSON error |
NoServersConfigured | 500 | no_servers_configured | the chosen pool has no NS records (designate-manage pool update not run) | designate/central/service.py:918 | JSON error, LOG.critical |
BadRequest | 400 | Zones in non-default pools require a TSIG key with scope=POOL … | zone scheduled to a non-default pool without a POOL TSIG key | designate/central/service.py:403 | JSON error |
Forbidden | 403 | forbidden, This operation is not allowed for catalog zones. | any write on a CATALOG zone through the API | designate/central/service.py:3190 | JSON error |
Forbidden | 403 | forbidden | policy refused (any rule) | designate/policy.py:68 | JSON error |
InvalidTokenScope | 403 | invalid_token_scope | system-scoped token on a project-scoped rule with enforce_scope | designate/policy.py:76 | JSON error |
ZoneNotFound | 404 | zone_not_found, Could not find Zone | unknown id, deleted zone, or zone of another project not shared with the caller | designate/central/service.py:990, designate/central/service.py:1408 | JSON error; clients treat it as "gone" (Heat delete completion) |
BadRequest | 400 | Can not update a deleting zone | zone or recordset write while the zone is DELETE/PENDING | designate/api/v2/controllers/zones/__init__.py:143, designate/central/service.py:1521 | JSON error |
BadRequest | 400 | Moving a zone between tenants is not allowed / Renaming a zone is not allowed | PATCH changing project_id or name | designate/central/service.py:1077, designate/central/service.py:1081 | JSON error |
ZoneHasSubZone | 400 | zone_has_sub_zone, Please delete any subzones before deleting this zone | delete of a zone with children in any project | designate/central/service.py:1159 | JSON error |
ZoneShared | 400 | zone_is_shared | delete of a shared zone without X-Designate-Delete-Shares | designate/central/service.py:1148 | JSON error |
BadRequest | 400 | Creating a SOA recordset is not allowed / Updating SOA recordsets is not allowed / Deleting a SOA recordset is not allowed / Updating a root zone NS record is not allowed | SOA and apex NS are managed | designate/api/v2/controllers/zones/recordsets.py:92, designate/api/v2/controllers/zones/recordsets.py:134, designate/api/v2/controllers/zones/recordsets.py:176, designate/api/v2/controllers/zones/recordsets.py:142 | JSON error |
BadRequest | 400 | Managed records may not be updated / … deleted | write on a managed recordset without the managed flag | designate/api/v2/controllers/zones/recordsets.py:130, designate/central/service.py:1848 | JSON error; Neutron retries with its admin client (neutron:neutron/services/externaldns/drivers/designate/driver.py:156) |
InvalidRecordSetName | 400 | invalid_recordset_name, Name too long | name longer than max_recordset_name_len | designate/central/service.py:185 | JSON error |
InvalidRecordSetLocation | 400 | invalid_recordset_location, RecordSet is not contained within it's parent zone / CNAME recordsets may not be created at the zone apex / CNAME recordsets may not share a name with any other records / RecordSet belongs in a child zone: <zone> | placement rules | designate/central/service.py:190, designate/central/service.py:197, designate/central/service.py:213, designate/central/service.py:248 | JSON error |
BadRequest | 400 | CNAME recordsets may not have more than 1 record | CNAME with several records | designate/central/service.py:261 | JSON error |
BadRequest | 400 | TLSA recordset name must follow the format _port._protocol.domain … | TLSA name | designate/api/v2/controllers/zones/recordsets.py:41 | JSON error |
BadRequest | 400 | Moving a recordset between zones is not allowed / Changing a recordsets type is not allowed | PUT changing zone_id or type | designate/central/service.py:1728, designate/central/service.py:1732 | JSON error |
DuplicateRecordSet / DuplicateRecord | 409 | duplicate_recordset / duplicate_record | same name and type in the zone; same data twice in a recordset (md5 of recordset_id:data) | designate/storage/sqlalchemy/base.py:243 | JSON error; Neutron raises DuplicateRecordSet (neutron:neutron/services/externaldns/drivers/designate/driver.py:72) |
RecordSetNotFound | 404 | recordset_not_found | unknown recordset, or recordset of another zone | designate/central/service.py:1617 | JSON error |
BadRequest | 400 | Floating IP <key> is not in the format of <region>:<uuid> | malformed reverse key | designate/api/v2/controllers/floatingips.py:35 | JSON error |
NotFound | 404 | not_found, FloatingIP <id> in <region> is not associated for project "<project>" / No such FloatingIP <region>:<id> | the floating IP is not the caller's in Neutron; unset of a PTR that does not exist | designate/central/service.py:2004, designate/central/service.py:2176 | JSON error |
NeutronCommunicationFailure | 504 | neutron_communication_failure | listing floating IPs in Neutron failed | designate/network_api/neutron.py:87 | JSON error |
NetworkEndpointNotFound | 403 | no_endpoint | no Neutron endpoint for the region in the catalog | designate/network_api/base.py:100 | JSON error |
InvalidProject | 400 | invalid_project, <id> is not a valid project ID. | Keystone answered 404 for the share target or the quota project | designate/common/keystone.py:75 | JSON error |
KeystoneCommunicationFailure | 504 | keystone_communication_failure | no Keystone v3 endpoint | designate/common/keystone.py:48 | JSON error |
BadRequest | 400 | Cannot share the zone with the zone owner. | share target = owner | designate/central/service.py:1298 | JSON error |
DuplicateSharedZone | 409 | duplicate_shared_zone | zone already shared with that project | designate/storage/sqlalchemy/base.py:243 | JSON error |
SharedZoneHasSubZone / SharedZoneHasRecordSets | 400 | Please delete all subzones owned by project <p> … / Please delete all recordsets owned by project <p> … | unshare while the target owns objects in the zone | designate/central/service.py:1329, designate/central/service.py:1343 | JSON error |
InvaildZoneTransfer | 400 | invalid_zone_transfer_request, Zone Transfer Request has been used / Zone Transfer Request Invalid | accept of a non-ACTIVE request | designate/central/service.py:2783, designate/central/service.py:2785 | JSON error |
IncorrectZoneTransferKey | 403 | invalid_key, Key does not match stored key for request | wrong key | designate/central/service.py:2789 | JSON error |
DuplicateZoneTransferRequest | 409 | duplicate_zone_transfer_request | a request already exists for the zone | designate/storage/sqlalchemy/__init__.py:2082 | JSON error |
InvalidOperation | 400 | invalid_operation, Zone cannot be changed / pool must not contain zones | PATCH of a transfer request's zone_id; delete of a pool with zones | designate/central/service.py:2742, designate/central/service.py:2533 | JSON error |
LastServerDeleteNotAllowed | 400 | last_server_delete_not_allowed | pool update removing every NS record | designate/central/service.py:2477 | JSON error |
BadRequest | 400 | Target pool must be different for zone pool move / No valid pool selected / Target pool does not exist | pool move | designate/api/v2/controllers/zones/tasks/pool_move.py:48, designate/central/service.py:1438, designate/central/service.py:1447 | JSON error |
BadRequest | 400 | Can't XFR a non Secondary zone. | xfr task on a PRIMARY zone | designate/central/service.py:1222 | JSON error |
BadRequest | 400 | Zone can not be exported synchronously | export file requested for a task without a designate:// location | designate/api/v2/controllers/zones/tasks/exports.py:44 | JSON error |
BadRequest | 400 | The "zonefile" field is required when using application/json content type / Invalid JSON body | JSON zone import | designate/api/v2/controllers/zones/tasks/imports.py:85, designate/api/v2/controllers/zones/tasks/imports.py:83 | JSON error |
InvalidTsigKey | 400 | invalid_tsigkey, Resource ID <id> is not a valid zone / … pool | TSIG key scope target missing | designate/central/service.py:710, designate/central/service.py:718 | JSON error |
MissingProjectID | 401 | missing_project_id, A project ID must be specified when not using a project scoped token. / The all-projects flag must be used … | write without a project (system token) | designate/central/service.py:391, designate/api/v2/controllers/quotas.py:74 | JSON error with status 401 |
ReportNotFound | 404 | report_not_found | unknown admin counts criterion | designate/central/service.py:1277 | JSON error |
MethodNotAllowed | 405 | method_not_allowed | verb not served on the path | designate/api/v2/controllers/errors.py:34 | JSON error |
NotImplementedError (builtin) | 500 | unknown | PATCH with Content-Type: application/json-patch+json | designate/api/v2/controllers/zones/__init__.py:158 | 500 |
ValueError (builtin, Please supply a FQDN) | 500 [inferred] | unknown | recordset name without trailing dot reaching central; the API adapter normally rejects it first | designate/central/service.py:180 | 500 |
ConfigurationError | 500 | configuration_error, No service_catalog and no configured endpoints | reverse API without catalog nor [network_api:neutron]/endpoints | designate/network_api/base.py:50 | JSON error |
| status 500 from the handler | 500 | empty JSON "" | abandon that did not delete the zone; pool move that did not leave the zone PENDING | designate/api/v2/controllers/zones/tasks/abandon.py:43, designate/api/v2/controllers/zones/tasks/pool_move.py:64 | 500 without error body |
The status codes and type values observed in the functional API tests are in [_rewrite/observed-errors_stable-2026.2.md](_rewrite/observed-errors_stable-2026.2.md).
Asynchronous errors
These never reach the client as an HTTP status. They show up as a resource status, a task message, or a log line.
| Where | What the client sees | Situation | Defined at |
|---|---|---|---|
zone status: ERROR, action kept | GET /v2/zones/{id} | fewer than threshold_percentage of the targets accepted the change (backend error, unreachable target), or the nameservers did not serve the new serial in time (poll_max_retries) | designate/worker/tasks/zone.py:302, designate/worker/tasks/zone.py:661 |
zone action: CREATE, status: ERROR | zone listed in error although it existed | too many nameservers answered "no zone" during an update (NO_ZONE): the zone will be re-created by the recovery task | designate/central/service.py:2653 |
records status: ERROR | recordset status: ERROR | the zone push reported ERROR for a serial ≥ the records' serial | designate/central/service.py:2617 |
zone ERROR forever | — | the error persists: worker_periodic_recovery re-pushes it every 120 s with no limit | designate/worker/tasks/zone.py:896 |
zone stays PENDING | — | the worker cast was lost (worker down, RabbitMQ): recovered after max_prop_time (455 s) by worker_periodic_recovery | designate/worker/tasks/zone.py:906 |
import task ERROR, message | GET /v2/zones/tasks/imports/{id} | The $ORIGIN statement is required and must be the first statement in the zonefile. / Malformed zonefile. / An SOA record is required. / Duplicate zone. / TTL is below the minimum: <n> / Quota exceeded during zone import. / An undefined error occurred. <first 130 chars> | designate/central/service.py:2922 |
import task stays PENDING | — | central stopped during the import thread | designate/central/service.py:2895 |
export task ERROR | message: Zone is too large to export / No suitable method for export | export over api_export_size / synchronous export disabled | designate/worker/tasks/zone.py:989, designate/worker/tasks/zone.py:1001 |
transfer accept status: ERROR | GET /v2/zones/tasks/transfer_accepts/{id} | the zone is being deleted or the target project is over quota; the HTTP call also fails | designate/central/service.py:2825 |
| SECONDARY zone not refreshed | transferred_at unchanged | XFRFailure: no master answered the AXFR | designate/worker/tasks/zone.py:241 |
mdns REFUSED / NOTAUTH / SERVFAIL / no answer | DNS servers cannot transfer the zone | unknown zone or forbidden (TSIG scope) → REFUSED; NOTIFY for an unknown zone → NOTAUTH; a single record too large → SERVFAIL; unknown TSIG key or bad signature → no answer | designate/mdns/handler.py:257, designate/mdns/handler.py:124, designate/mdns/handler.py:354, designate/dnsmiddleware.py:94 |
| sink: event ignored | no record created | zone_id not configured for the handler; invalid IP address | designate/notification_handler/nova.py:54, designate/notification_handler/base.py:135 |
Key log messages
| Level | Message | Situation | Defined at |
|---|---|---|---|
| CRITICAL | No nameservers configured. Please create at least one nameserver | zone creation in a pool without NS records | designate/central/service.py:916 |
| CRITICAL | Blacklist regex (%(pattern)s) took too long to evaluate against zone name (%(zone_name)s) | a blacklist pattern exceeded 20 ms; the name is treated as blacklisted | designate/central/service.py:282 |
| WARNING | Managed Resource Tenant ID is not properly configured | managed_resource_tenant_id left at its zero default | designate/central/service.py:109 |
| INFO | Could not %(action)s zone_name=… on enough targets. Updating status to ERROR | backend push failed | designate/worker/tasks/zone.py:290 |
| INFO | Could not find serial=%(serial)d for zone_name=… on enough nameservers | polling failed | designate/worker/tasks/zone.py:598 |
| WARNING | Found %(len)d zones PENDING for more than %(sec)d seconds | stuck zones picked up by recovery | designate/worker/tasks/zone.py:914 |
| ERROR | TSIG key not found for target=…, skipping … / … for a nameserver in pool, skipping poll … | a pool references a deleted TSIG key | designate/worker/tasks/zone.py:87, designate/worker/tasks/zone.py:672 |
| WARNING | NOTIFY for %(name)s from non-master server %(addr)s, refusing. | NOTIFY from an unexpected address | designate/mdns/handler.py:147 |
| ERROR | Unknown TSIG key from %(host)s:%(port)d / Invalid TSIG signature from … | DNS server and Designate disagree on the key | designate/dnsmiddleware.py:95, designate/dnsmiddleware.py:103 |
| WARNING | Aborted AXFR of %(zone)s, a single RR … exceeded the max message size. | oversized record | designate/mdns/handler.py:343 |
| WARNING | Use of this API Method is DEPRECATED … | pool written through the API | designate/api/v2/controllers/pools.py:69 |
| ERROR | Missing context in request, please check. | error raised before the context middleware | designate/api/middleware.py:334 |
Exception catalogue
All classes of designate/exceptions.py, with inheritance resolved. "Expected" exceptions are not logged by the RPC server. Raise sites are the explicit raise statements; *NotFound and Duplicate* are also raised by the generic storage helpers through their exc_notfound / exc_dup arguments (designate/storage/sqlalchemy/base.py:280, designate/storage/sqlalchemy/base.py:243).
| Exception (parent) | HTTP | type | Expected | Defined at | Raised at |
|---|---|---|---|---|---|
DesignateException (Exception) | 500 | None | no | designate/exceptions.py:18 | |
Backend (Exception) | 500 | None | no | designate/exceptions.py:35 | designate/backend/impl_pdns4.py:158, designate/backend/impl_pdns4.py:172, designate/backend/impl_ns1.py:56, designate/backend/impl_ns1.py:69 … |
RelationNotLoaded (DesignateException) | 500 | relation_not_loaded | no | designate/exceptions.py:39 | designate/objects/base.py:71 |
AdapterNotFound (DesignateException) | 500 | adapter_not_found | no | designate/exceptions.py:56 | designate/objects/adapters/base.py:72 |
NSD4SlaveBackendError (Backend) | 500 | None | no | designate/exceptions.py:61 | |
NotImplemented (DesignateException) | 500 | None | no | designate/exceptions.py:65 | |
XFRFailure (DesignateException) | 500 | None | no | designate/exceptions.py:69 | designate/dnsutils.py:191 |
ConfigurationError (DesignateException) | 500 | configuration_error | no | designate/exceptions.py:73 | designate/producer/service.py:80, designate/backend/impl_pdns4.py:65, designate/backend/impl_infoblox.py:81, designate/backend/impl_nsd4.py:97 … |
UnknownFailure (DesignateException) | 500 | unknown_failure | no | designate/exceptions.py:77 | |
CommunicationFailure (DesignateException) | 504 | communication_failure | no | designate/exceptions.py:82 | |
KeystoneCommunicationFailure (CommunicationFailure) | 504 | keystone_communication_failure | no | designate/exceptions.py:87 | designate/common/keystone.py:48 |
NeutronCommunicationFailure (CommunicationFailure) | 504 | neutron_communication_failure | no | designate/exceptions.py:94 | designate/network_api/neutron.py:87 |
NoFiltersConfigured (ConfigurationError) | 500 | no_filters_configured | no | designate/exceptions.py:101 | designate/scheduler/base.py:40, designate/scheduler/base.py:67 |
NoServersConfigured (ConfigurationError) | 500 | no_servers_configured | no | designate/exceptions.py:106 | designate/storage/sqlalchemy/__init__.py:2580, designate/central/service.py:918, designate/central/service.py:1456 |
MultiplePoolsFound (ConfigurationError) | 500 | multiple_pools_found | no | designate/exceptions.py:111 | designate/scheduler/base.py:82 |
NoPoolTargetsConfigured (ConfigurationError) | 500 | no_pool_targets_configured | no | designate/exceptions.py:116 | designate/worker/service.py:79 |
OverQuota (DesignateException) | 413 | over_quota | yes | designate/exceptions.py:121 | designate/quota/base.py:48 |
QuotaResourceUnknown (DesignateException) | 500 | quota_resource_unknown | no | designate/exceptions.py:127 | designate/quota/impl_storage.py:64, designate/quota/base.py:42 |
InvalidObject (DesignateException) | 400 | invalid_object | yes | designate/exceptions.py:131 | designate/objects/recordset.py:104, designate/objects/recordset.py:208, designate/objects/recordset.py:233, designate/objects/adapters/api_v2/recordset.py:88 … |
BadAction (DesignateException) | 500 | bad_action | no | designate/exceptions.py:137 | |
BadRequest (DesignateException) | 400 | bad_request | yes | designate/exceptions.py:141 | designate/dnsutils.py:92, designate/api/v2/controllers/floatingips.py:35, designate/api/v2/controllers/zones/recordsets.py:41, designate/api/v2/controllers/zones/recordsets.py:48 … |
EmptyRequestBody (BadRequest) | 400 | empty_request_body | yes | designate/exceptions.py:147 | designate/api/v2/patches.py:43, designate/api/v2/patches.py:47 |
InvalidProject (BadRequest) | 400 | invalid_project | yes | designate/exceptions.py:152 | designate/common/keystone.py:75 |
InvalidUUID (BadRequest) | 400 | invalid_uuid | yes | designate/exceptions.py:156 | designate/utils.py:171 |
NetworkEndpointNotFound (BadRequest) | 403 | no_endpoint | yes | designate/exceptions.py:160 | designate/network_api/base.py:100 |
MarkerNotFound (BadRequest) | 400 | marker_not_found | yes | designate/exceptions.py:165 | designate/storage/sqlalchemy/utils.py:130 |
ValueError (BadRequest) | 400 | value_error | yes | designate/exceptions.py:169 | designate/objects/adapters/api_v2/base.py:121, designate/storage/sqlalchemy/base.py:305, designate/storage/sqlalchemy/base.py:365, designate/storage/sqlalchemy/base.py:440 … |
InvalidMarker (BadRequest) | 400 | invalid_marker | yes | designate/exceptions.py:173 | designate/storage/sqlalchemy/utils.py:137 |
InvalidSortDir (BadRequest) | 400 | invalid_sort_dir | yes | designate/exceptions.py:177 | designate/utils.py:264 |
InvalidLimit (BadRequest) | 400 | invalid_limit | yes | designate/exceptions.py:181 | designate/utils.py:255, designate/utils.py:258 |
InvalidSortKey (BadRequest) | 400 | invalid_sort_key | yes | designate/exceptions.py:185 | designate/storage/sqlalchemy/base.py:299, designate/storage/sqlalchemy/base.py:359, designate/utils.py:273 |
InvalidJson (BadRequest) | 400 | invalid_json | yes | designate/exceptions.py:189 | designate/api/v2/patches.py:49 |
InvalidOperation (BadRequest) | 400 | invalid_operation | yes | designate/exceptions.py:193 | designate/central/service.py:2533, designate/central/service.py:2742 |
UnsupportedAccept (BadRequest) | 406 | unsupported_accept | yes | designate/exceptions.py:198 | |
UnsupportedContentType (BadRequest) | 415 | unsupported_content_type | yes | designate/exceptions.py:203 | designate/api/v2/patches.py:35, designate/api/v2/controllers/zones/tasks/imports.py:96 |
InvalidZoneName (DesignateException) | 400 | invalid_zone_name | yes | designate/exceptions.py:208 | designate/central/service.py:131, designate/central/service.py:138, designate/central/service.py:152, designate/central/service.py:163 … |
InvalidRecordSetName (DesignateException) | 400 | invalid_recordset_name | yes | designate/exceptions.py:214 | designate/central/service.py:185 |
InvalidRecordSetLocation (DesignateException) | 400 | invalid_recordset_location | yes | designate/exceptions.py:220 | designate/central/service.py:190, designate/central/service.py:197, designate/central/service.py:213, designate/central/service.py:248 |
InvaildZoneTransfer (DesignateException) | 400 | invalid_zone_transfer_request | no | designate/exceptions.py:226 | designate/central/service.py:2783, designate/central/service.py:2785 |
InvalidTTL (DesignateException) | 400 | invalid_ttl | no | designate/exceptions.py:231 | designate/central/service.py:386 |
ZoneHasSubZone (DesignateException) | 400 | zone_has_sub_zone | no | designate/exceptions.py:236 | designate/central/service.py:1159 |
SharedZoneHasSubZone (DesignateException) | 400 | shared_zone_has_sub_zone | yes | designate/exceptions.py:241 | designate/central/service.py:1329 |
SharedZoneHasRecordSets (DesignateException) | 400 | shared_zone_has_recordsets | yes | designate/exceptions.py:247 | designate/central/service.py:1343 |
Forbidden (DesignateException) | 403 | forbidden | yes | designate/exceptions.py:253 | designate/mdns/handler.py:197, designate/central/service.py:616, designate/central/service.py:634, designate/central/service.py:3190 |
IllegalChildZone (Forbidden) | 403 | illegal_child | yes | designate/exceptions.py:259 | designate/central/service.py:363, designate/central/service.py:893 |
IllegalParentZone (Forbidden) | 403 | illegal_parent | yes | designate/exceptions.py:263 | designate/storage/sqlalchemy/__init__.py:670, designate/central/service.py:374, designate/central/service.py:905 |
IncorrectZoneTransferKey (Forbidden) | 403 | invalid_key | yes | designate/exceptions.py:267 | designate/central/service.py:2789 |
InvalidTokenScope (Forbidden) | 403 | invalid_token_scope | yes | designate/exceptions.py:271 | designate/policy.py:76 |
Duplicate (DesignateException) | 409 | duplicate | yes | designate/exceptions.py:275 | |
DuplicateServiceStatus (Duplicate) | 409 | duplicate_service_status | yes | designate/exceptions.py:281 | designate/storage/sqlalchemy/__init__.py:2450, designate/storage/sqlalchemy/__init__.py:2461 |
DuplicateQuota (Duplicate) | 409 | duplicate_quota | yes | designate/exceptions.py:285 | designate/storage/sqlalchemy/__init__.py:80, designate/storage/sqlalchemy/__init__.py:126 |
DuplicateServer (Duplicate) | 409 | duplicate_server | yes | designate/exceptions.py:289 | |
DuplicateTsigKey (Duplicate) | 409 | duplicate_tsigkey | yes | designate/exceptions.py:293 | designate/storage/sqlalchemy/__init__.py:232, designate/storage/sqlalchemy/__init__.py:278 |
InvalidTsigKey (BadRequest) | 400 | invalid_tsigkey | yes | designate/exceptions.py:297 | designate/central/service.py:710, designate/central/service.py:718, designate/central/service.py:761, designate/central/service.py:769 |
DuplicateZone (Duplicate) | 409 | duplicate_zone | yes | designate/exceptions.py:301 | designate/storage/sqlalchemy/__init__.py:427, designate/storage/sqlalchemy/__init__.py:502, designate/central/service.py:350, designate/central/service.py:2148 |
DuplicateTld (Duplicate) | 409 | duplicate_tld | yes | designate/exceptions.py:305 | designate/storage/sqlalchemy/__init__.py:157, designate/storage/sqlalchemy/__init__.py:202 |
DuplicateRecordSet (Duplicate) | 409 | duplicate_recordset | yes | designate/exceptions.py:309 | designate/storage/sqlalchemy/__init__.py:1001, designate/storage/sqlalchemy/__init__.py:1079 |
DuplicateRecord (Duplicate) | 409 | duplicate_record | yes | designate/exceptions.py:313 | designate/storage/sqlalchemy/__init__.py:1203, designate/storage/sqlalchemy/__init__.py:1252 |
DuplicateBlacklist (Duplicate) | 409 | duplicate_blacklist | yes | designate/exceptions.py:317 | designate/storage/sqlalchemy/__init__.py:1314, designate/storage/sqlalchemy/__init__.py:1361 |
DuplicatePool (Duplicate) | 409 | duplicate_pool | yes | designate/exceptions.py:321 | designate/storage/sqlalchemy/__init__.py:1443, designate/storage/sqlalchemy/__init__.py:1527, designate/manage/pool.py:144 |
DuplicatePoolAttribute (Duplicate) | 409 | duplicate_pool_attribute | yes | designate/exceptions.py:325 | designate/storage/sqlalchemy/__init__.py:1589, designate/storage/sqlalchemy/__init__.py:1635 |
DuplicatePoolNsRecord (Duplicate) | 409 | duplicate_pool_ns_record | yes | designate/exceptions.py:329 | designate/storage/sqlalchemy/__init__.py:1665, designate/storage/sqlalchemy/__init__.py:1669 |
DuplicatePoolNameserver (Duplicate) | 409 | duplicate_pool_nameserver | yes | designate/exceptions.py:333 | designate/storage/sqlalchemy/__init__.py:1694, designate/storage/sqlalchemy/__init__.py:1711 |
DuplicatePoolTarget (Duplicate) | 409 | duplicate_pool_target | yes | designate/exceptions.py:337 | designate/storage/sqlalchemy/__init__.py:1754, designate/storage/sqlalchemy/__init__.py:1903 |
DuplicatePoolTargetOption (Duplicate) | 409 | duplicate_pool_target_option | yes | designate/exceptions.py:341 | designate/storage/sqlalchemy/__init__.py:1939, designate/storage/sqlalchemy/__init__.py:1944 |
DuplicatePoolTargetMaster (Duplicate) | 409 | duplicate_pool_target_master | yes | designate/exceptions.py:345 | designate/storage/sqlalchemy/__init__.py:1971, designate/storage/sqlalchemy/__init__.py:1976 |
DuplicatePoolAlsoNotify (Duplicate) | 409 | duplicate_pool_also_notify | yes | designate/exceptions.py:349 | designate/storage/sqlalchemy/__init__.py:2001, designate/storage/sqlalchemy/__init__.py:2019 |
DuplicateZoneImport (Duplicate) | 409 | duplicate_zone_import | yes | designate/exceptions.py:353 | designate/storage/sqlalchemy/__init__.py:2240, designate/storage/sqlalchemy/__init__.py:2288 |
DuplicateZoneExport (Duplicate) | 409 | duplicate_zone_export | yes | designate/exceptions.py:357 | designate/storage/sqlalchemy/__init__.py:2327, designate/storage/sqlalchemy/__init__.py:2375 |
MethodNotAllowed (DesignateException) | 405 | method_not_allowed | yes | designate/exceptions.py:361 | designate/api/v2/controllers/errors.py:34 |
DuplicateZoneTransferRequest (Duplicate) | 409 | duplicate_zone_transfer_request | yes | designate/exceptions.py:367 | designate/storage/sqlalchemy/__init__.py:2080, designate/storage/sqlalchemy/__init__.py:2082, designate/storage/sqlalchemy/__init__.py:2113 |
DuplicateZoneTransferAccept (Duplicate) | 409 | duplicate_zone_transfer_accept | yes | designate/exceptions.py:371 | designate/storage/sqlalchemy/__init__.py:2172, designate/storage/sqlalchemy/__init__.py:2199 |
DuplicateZoneAttribute (Duplicate) | 409 | duplicate_zone_attribute | yes | designate/exceptions.py:375 | designate/storage/sqlalchemy/__init__.py:853, designate/storage/sqlalchemy/__init__.py:868 |
DuplicateZoneMaster (Duplicate) | 409 | duplicate_zone_attribute | yes | designate/exceptions.py:379 | designate/storage/sqlalchemy/__init__.py:893, designate/storage/sqlalchemy/__init__.py:898 |
DuplicateSharedZone (Duplicate) | 409 | duplicate_shared_zone | yes | designate/exceptions.py:383 | designate/storage/sqlalchemy/__init__.py:770 |
NotFound (DesignateException) | 404 | not_found | yes | designate/exceptions.py:387 | designate/utils.py:158, designate/utils.py:166, designate/api/v2/controllers/errors.py:28, designate/central/service.py:2004 … |
ServiceStatusNotFound (NotFound) | 404 | service_status_not_found | yes | designate/exceptions.py:393 | designate/storage/sqlalchemy/__init__.py:2411 |
QuotaNotFound (NotFound) | 404 | quota_not_found | yes | designate/exceptions.py:397 | designate/storage/sqlalchemy/__init__.py:65 |
ServerNotFound (NotFound) | 404 | server_not_found | yes | designate/exceptions.py:401 | |
TsigKeyNotFound (NotFound) | 404 | tsigkey_not_found | yes | designate/exceptions.py:405 | designate/storage/sqlalchemy/__init__.py:221 |
BlacklistNotFound (NotFound) | 404 | blacklist_not_found | yes | designate/exceptions.py:409 | designate/storage/sqlalchemy/__init__.py:1303, designate/storage/sqlalchemy/__init__.py:1361 |
ZoneNotFound (NotFound) | 404 | zone_not_found | yes | designate/exceptions.py:413 | designate/mdns/handler.py:390, designate/storage/sqlalchemy/__init__.py:382, designate/storage/sqlalchemy/__init__.py:503, designate/storage/sqlalchemy/__init__.py:658 … |
ZoneMasterNotFound (NotFound) | 404 | zone_master_not_found | yes | designate/exceptions.py:417 | designate/storage/sqlalchemy/__init__.py:887 |
ZoneAttributeNotFound (NotFound) | 404 | zone_attribute_not_found | yes | designate/exceptions.py:421 | designate/storage/sqlalchemy/__init__.py:847 |
TldNotFound (NotFound) | 404 | tld_not_found | yes | designate/exceptions.py:425 | designate/storage/sqlalchemy/__init__.py:146 |
RecordSetNotFound (NotFound) | 404 | recordset_not_found | yes | designate/exceptions.py:429 | designate/storage/sqlalchemy/__init__.py:934, designate/storage/sqlalchemy/__init__.py:1079, designate/central/service.py:1617 |
RecordNotFound (NotFound) | 404 | record_not_found | yes | designate/exceptions.py:433 | designate/storage/sqlalchemy/__init__.py:1173 |
ReportNotFound (NotFound) | 404 | report_not_found | yes | designate/exceptions.py:437 | designate/central/service.py:1277 |
PoolNotFound (NotFound) | 404 | pool_not_found | yes | designate/exceptions.py:441 | designate/storage/sqlalchemy/__init__.py:1381, designate/storage/sqlalchemy/__init__.py:1527, designate/central/service.py:3178 |
NoValidPoolFound (NotFound) | 404 | no_valid_pool_found | yes | designate/exceptions.py:445 | designate/scheduler/base.py:84 |
PoolAttributeNotFound (NotFound) | 404 | pool_attribute_not_found | yes | designate/exceptions.py:449 | designate/storage/sqlalchemy/__init__.py:1575 |
PoolNsRecordNotFound (NotFound) | 404 | pool_ns_record_not_found | yes | designate/exceptions.py:453 | designate/storage/sqlalchemy/__init__.py:1658 |
PoolNameserverNotFound (NotFound) | 404 | pool_nameserver_not_found | yes | designate/exceptions.py:457 | designate/storage/sqlalchemy/__init__.py:1687 |
PoolTargetNotFound (NotFound) | 404 | pool_target_not_found | yes | designate/exceptions.py:461 | designate/storage/sqlalchemy/__init__.py:1728, designate/storage/sqlalchemy/__init__.py:1903 |
PoolTargetOptionNotFound (NotFound) | 404 | pool_target_option_not_found | yes | designate/exceptions.py:465 | designate/storage/sqlalchemy/__init__.py:1931 |
PoolTargetMasterNotFound (NotFound) | 404 | pool_target_master_not_found | yes | designate/exceptions.py:469 | designate/storage/sqlalchemy/__init__.py:1963 |
PoolAlsoNotifyNotFound (NotFound) | 404 | pool_also_notify_not_found | yes | designate/exceptions.py:473 | designate/storage/sqlalchemy/__init__.py:1994 |
ZoneTransferRequestNotFound (NotFound) | 404 | zone_transfer_request_not_found | yes | designate/exceptions.py:477 | designate/storage/sqlalchemy/__init__.py:2062, designate/storage/sqlalchemy/__init__.py:2114 |
ZoneTransferAcceptNotFound (NotFound) | 404 | zone_transfer_accept_not_found | yes | designate/exceptions.py:481 | designate/storage/sqlalchemy/__init__.py:2158 |
ZoneImportNotFound (NotFound) | 404 | zone_import_not_found | yes | designate/exceptions.py:485 | designate/storage/sqlalchemy/__init__.py:2223, designate/storage/sqlalchemy/__init__.py:2288 |
ZoneExportNotFound (NotFound) | 404 | zone_export_not_found | yes | designate/exceptions.py:489 | designate/storage/sqlalchemy/__init__.py:2311, designate/storage/sqlalchemy/__init__.py:2375 |
SharedZoneNotFound (NotFound) | 404 | shared_zone_not_found | yes | designate/exceptions.py:493 | designate/storage/sqlalchemy/__init__.py:758 |
LastServerDeleteNotAllowed (BadRequest) | 400 | last_server_delete_not_allowed | yes | designate/exceptions.py:497 | designate/central/service.py:2477 |
ResourceNotFound (NotFound) | 404 | not_found | yes | designate/exceptions.py:501 | designate/utils.py:89 |
MissingProjectID (BadRequest) | 401 | missing_project_id | yes | designate/exceptions.py:506 | designate/api/v2/controllers/quotas.py:74, designate/central/service.py:391 |
ZoneShared (DesignateException) | 400 | zone_is_shared | no | designate/exceptions.py:515 | designate/central/service.py:1148 |
Source: reverse-spec-designate/02-errors_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.