OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Services

skyline-console — Errors

Errors — skyline-console — branch stable/2026.2

Branch stable/2026.2 @ 806d200392ee — repository https://opendev.org/openstack/skyline-console — analysed on 2026-10-29

A client defines no error codes. What matters is how it reacts to the errors of skyline-apiserver and of the OpenStack APIs, and which error bodies it parses (those become requirements on the services, see 07 § 4). The console throws only one exception of its own (Invalid prefixlen, src/stores/neutron/network.js:345, a CIDR helper).

1. Central handling (every request)

SituationWhat the console doesWhere
HTTP 401 from any URL (Skyline or an OpenStack proxy)redirect to /auth/login?referer=<current path>, unless already on the login page; the promise is still rejectedsrc/client/client/request.js:38, src/client/client/request.js:42, src/stores/root.js:254
non-2xx status that axios resolved anywayrejected with the body instead of the error objectsrc/client/client/request.js:139
HEAD, application/octet-stream, Content-Disposition: attachmentthe raw axios response is returned (downloads, Swift objects)src/client/client/request.js:133
network error, timeoutno special handling: the axios error propagates (no retry, no timeout set)src/client/client/request.js:148
time_expired cookie missing or in the pastX-Auth-Token is not sent; the next OpenStack call gets a 401 and the user is logged outsrc/client/client/request.js:56

There is no retry and no client timeout anywhere in the request layer (src/client/client/request.js:157): a hung upstream keeps the spinner until the browser gives up.

2. How errors are shown

Where it happensRuleShown asWhere
list or detail fetch401 → "The session has expired, please log in again."; 500 → "Get {name} error. System is error, please try again later."; other → "Get {name} error." with the body in a JSON viewer; auto refresh is stoppedsticky error notification (no timeout)src/containers/List/index.jsx:723, src/components/Notify/index.jsx:62
page policy denied by the policy listsynthetic 403 "You don't have access to get {name}." — no request is sentnotificationsrc/containers/List/index.jsx:664
page whose required endpoint is missing from the profile"not found" page with endpointErrorpagesrc/containers/List/index.jsx:254
action submit (confirm, modal, form, step)the response body (error.response.data, else the error) is shown under the action's error title (submitErrorMsg or "Unable to {action}")notification + "Click to show detail" JSON viewersrc/components/Tables/Base/ActionButton/index.jsx:235, src/components/Form/index.jsx:372
batch actionone notification per failed item; the batch counts as failed only when every item failednotificationssrc/components/Tables/Base/ActionButton/index.jsx:355
status ≥ 500 in errorWithDetailtitle + statusMap text ("Internal Server Error (code: 500)", 501, 502, 503, 504, 505); body not shown unless the status is outside the mapnotificationsrc/components/Notify/index.jsx:128, src/utils/code.js:1
action not allowed for the item's stateperformErrorMsg of the action (e.g. 'Instance "{ name }" status is not in active or suspended, can not stop it.'), no requestconfirm dialogsrc/pages/compute/containers/Instance/actions/Stop.jsx:59

The error body is not parsed in general: it is displayed as JSON (HTML entities decoded). OpenStack services can change error texts without breaking the console, except for the cases below.

3. Error bodies the console parses (hard expectations)

Service responseParsed field / textEffectWhere
skyline POST login 401detail object with totp_required: true and receiptTOTP stepsrc/pages/auth/containers/Login/index.jsx:296
skyline POST login 401detail string containing The password is expired and needs to be changed for user; the user ID is taken from itchange-password pagesrc/pages/auth/containers/Login/index.jsx:306
skyline POST login/totp 401detail equal to receipt_expired or invalid_totpmessage choicesrc/pages/auth/containers/Login/index.jsx:346
Keystone POST /v3/users/{id}/password errorerror.messageshown under the formsrc/pages/auth/containers/ChangePassword/index.jsx:89
Nova POST /servers 403forbidden.message containing Quota exceeded"Quota exceeded" instead of the raw bodysrc/pages/compute/containers/Instance/actions/StepCreate/index.jsx:794
Nova POST /servers (bare metal flavor) 403same rulesamesrc/pages/compute/containers/Instance/actions/CreateIronic/index.jsx:361
Neutron GET routers/{id}/l3-agents 404treated as "no L3 agent information" (OVN has no L3 agents)empty column, no errorsrc/stores/neutron/router.js:117
Swift DELETE container 409replaced by 'Cannot delete container "{name}". The container is not empty.'notificationsrc/stores/swift/container.js:96

4. Asynchronous errors

The console has no background worker. Asynchronous failures of OpenStack (a server in ERROR, a volume in error_extending…) appear only as statuses in the next list refresh; the console shows them as returned (with fault.message for servers in the detail page). Refresh behaviour after an error: 05.

5. Key console messages (browser console)

MessageSituationWhere
error.response …every failed requestsrc/client/client/request.js:148
fetch list errorlist fetch failedsrc/containers/List/index.jsx:723
policy rule not exit <rule> <action>a rule used by the UI is missing from skyline-apiserver's policy list (then treated as allowed)src/resources/skyline/policy.js:129
parse marker error!marker paging could not read the last item's markersrc/stores/base.js:287

Source: reverse-spec-skyline-console/02-errors_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.