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

Reverse-spec · Services

manila — REST API

REST API — manila — branch stable/2026.2

Branch stable/2026.2 @ 4fbc4b4f3688 — repository https://opendev.org/openstack/manila — analysed on 2026-10-29

This file describes the Shared File Systems API v2 as the code serves it. The operation table (§ 3) was extracted from the live router (manila.api.v2.router.APIRouter, by [_rewrite/tools/manila_routes.py](_rewrite/tools/manila_routes.py)), so it lists what a client can really call, with the real handler of each microversion variant and the policy rule the handler checks. The machine-readable versions are [_rewrite/routes_stable-2026.2.json](_rewrite/routes_stable-2026.2.json) and [_rewrite/openapi_stable-2026.2.json](_rewrite/openapi_stable-2026.2.json). The column "Observed" gives the statuses seen in the client scenarios ([_rewrite/exchanges_stable-2026.2.json](_rewrite/exchanges_stable-2026.2.json), 07 § 7). Errors are detailed in 02-errors_stable-2026.2.md, and the asynchronous follow-up of each operation in 05-async-processing_stable-2026.2.md.

1. Conventions shared by every endpoint

1.1 Entry point and pipeline

  • Root: osapi_share composite (etc/manila/api-paste.ini:5-9, factory manila/api/__init__.py:20): / → version document, /healthcheck → oslo.middleware health check (disabled by the file /etc/manila/healthcheck_disable, etc/manila/api-paste.ini:62-66), /v2 → the API. The v1 API was removed in 2026.1 (manila/api/openstack/rest_api_version_history.rst:10-18).
  • v2 pipeline with auth_strategy = keystone (etc/manila/api-paste.ini:11-16): cors → request_id → faultwrap → http_proxy_to_wsgi → sizelimit → osprofiler → authtoken (keystonemiddleware) → keystonecontext → apiv2. The pipeline is chosen by pipeline_factory from [DEFAULT]/auth_strategy (manila/api/middleware/auth.py:47-59). noauth / noauthv2 replace the last two filters by a fake authentication that trusts X-Auth-Token: user:project.
  • Request context: ManilaKeystoneContext builds manila.context from the identity headers set by keystonemiddleware, and answers 401 without body when no user is identified (manila/api/middleware/auth.py:74-118). It does not check X-Identity-Status: it relies on authtoken having rejected invalid tokens. X-Forwarded-For is used for remote_address only with [DEFAULT]/use_forwarded_for (manila/api/middleware/auth.py:81-83).
  • Version document: GET / answers 300 with the list of versions (manila/api/versions.py:82-86); GET /v2/ answers 200 with exactly one version entry {"id": "v2.0", "status": "CURRENT", "version": "2.99", "min_version": "2.0", "updated": "2015-08-27T11:33:21Z", …} (manila/api/versions.py:40-50, manila/api/versions.py:72-77). GET /v2/ goes through authtoken: anonymous calls get 401 (scenario versions).

1.2 URLs

  • Every resource exists twice: /v2/{project_id}/<resource> and /v2/<resource> (manila/api/v2/router.py:107-110 and the following loops; manila/api/openstack/__init__.py:97-140).
  • {project_id} must match [DEFAULT]/project_id_regex (default [0-9a-f\-]+, manila/api/openstack/__init__.py:30-37); a project id with other characters is not routed at all (plain webob 404). When present, it must equal the project of the token, otherwise 400 "Malformed request url" (manila/api/openstack/wsgi.py:812-816).
  • A method that the router does not know for a path (for example PATCH /shares) gets a plain webob 404 whose body is {"message": "The resource could not be found.<br /><br />…", "code": "404 Not Found", "title": "Not Found"}, not a Manila fault (scenario auth-and-routing).
  • mapper.resource also declares new, edit and the CRUD verbs a controller does not implement: they answer 404 itemNotFound (_rewrite/routes-unimplemented_stable-2026.2.json).

1.3 Microversions

  • Header X-OpenStack-Manila-API-Version: 2.x (manila/api/openstack/wsgi.py:53). Without it the request is served at 2.0, the minimum (manila/api/openstack/api_version_request.py:228-230, manila/api/openstack/wsgi.py:240-242). There is no latest: latest and 2.x are rejected with 400 "API Version String … is of invalid format" (manila/api/openstack/wsgi.py:741-743).
  • Range 2.0 – 2.99 (manila/api/openstack/api_version_request.py:228-229); history in [_rewrite/microversions_stable-2026.2.md](_rewrite/microversions_stable-2026.2.md). Out of range (2.100, 1.9, 3.0) → 406 computeFault "Version 2.100 is not supported by the API. Minimum is 2.0 and maximum is 2.99." (manila/api/openstack/wsgi.py:744-746).
  • Experimental APIs need X-OpenStack-Manila-API-Experimental: True in addition (manila/api/openstack/wsgi.py:54, manila/api/openstack/wsgi.py:244-247). A method marked experimental=True called without it, or a versioned method called outside its range, answers 404 without explanation, as if the route did not exist (manila/api/openstack/wsgi.py:918-925). 64 variants are experimental on this branch: share groups, group types and group snapshots 2.31–2.54, share replicas 2.11–2.55, share migration 2.22–2.95, and — still experimental at 2.99 — share backups (2.80+) and share server migration (2.57+) (column "Microversion" of § 3).
  • Every response carries X-OpenStack-Manila-API-Version: <served version>, Vary: X-OpenStack-Manila-API-Version, and X-OpenStack-Manila-API-Experimental when the request asked for it (manila/api/openstack/wsgi.py:1322-1331 for faults; same code path for successes).

1.4 Body-dispatched actions

POST …/{id}/action dispatches on the single key of the JSON body ({"extend": {"new_size": 2}}): action_peek_json rejects a body that is not JSON ("cannot understand JSON") or has more than one key ("too many body keys") as 400 "Malformed request body" (manila/api/openstack/wsgi.py:484-499, manila/api/openstack/wsgi.py:806-808), and an unknown key gives 400 "There is no such action: …" (manila/api/openstack/wsgi.py:887-912). Most actions exist in two spellings: os-<name> until 2.6 and <name> from 2.7 (os-allow_access / allow_access…). 70 body actions are listed in § 3.

1.5 Request validation

  • Two mechanisms coexist. A minority of handlers use the JSON-schema decorators @validation.request_body_schema, request_query_schema and response_body_schema (manila/api/validation/__init__.py:82-229); they apply a schema only inside its microversion range (manila/api/validation/__init__.py:33-80). The 102 schemas are in [_rewrite/request-schemas_stable-2026.2.json](_rewrite/request-schemas_stable-2026.2.json). Most handlers still validate by hand (is_valid_body, explicit HTTPBadRequest), so unknown fields are silently ignored on POST /shares (scenario share-validation, unknown_field → 200) and a size given as a string "1" is accepted (manila/share/api.py:323-326 uses is_int_like).
  • response_body_schema validates the response in production too, after the handler has run. On POST /resource-locks a user whose id is not UUID-like (LDAP-backed or federated Keystone users) gets 400 "Invalid input for field/attribute user_id … is not a 'uuid'" while the lock has been written and blocks the share (scenario resource-locks-non-uuid-user, manila/api/validation/validators.py:173-179).
  • A missing body where one is required gives 422 computeFault "Unable to process the contained instructions" (scenario share-validation, no_body).
  • Body size limited by oslo.middleware sizelimit ([oslo_middleware]/max_request_body_size).

1.6 Responses

  • Error body: {"<faultName>": {"code": <status>, "message": "<text>"}} with faultName among badRequest, unauthorized, forbidden, itemNotFound, badMethod, conflictingRequest, overLimit, badMediaType, notImplemented, serviceUnavailable, otherwise computeFault (manila/api/openstack/wsgi.py:1294-1320). A 413 adds retryAfter (manila/api/openstack/wsgi.py:1320-1322). The 401 of authtoken is keystonemiddleware's own {"error": {...}} body.
  • Exceptions not converted by the handler reach FaultWrapper (manila/api/middleware/fault.py:29-75): the status is the exception's code, and the message is shown **only for safe exceptions** (NotFound, Found, QuotaError and their subclasses, manila/exception.py:206-209, manila/exception.py:440-444), prefixed by the class name, for example "ShareSizeExceedsAvailableQuota: Requested share exceeds allowed project/user or share type gigabytes quota.". Other exceptions give the bare reason phrase of the status.
  • Request ID: x-openstack-request-id (oslo RequestId).
  • Lists: limit (bounded by [DEFAULT]/osapi_max_limit, default 1000, manila/api/common.py:37-41, manila/api/common.py:91-113), offset (manila/api/common.py:115-138), marker, sort_key / sort_dir (manila/api/common.py:185-200), with_count (2.42). Next-page links (shares_links…) are returned only when limit is given and the page is full; they carry a marker (scenario list-filters-and-paging). Unknown filters are dropped by remove_invalid_options for non-admins (manila/api/common.py:450-470); the name~, description~ "like" filters exist from 2.36.

1.7 Authorisation

Policies (230 default rules in [_rewrite/policies_stable-2026.2.json](_rewrite/policies_stable-2026.2.json)) are checked in two places: by the @wsgi.Controller.authorize decorator of the handler (manila/api/openstack/wsgi.py:1128-1160, rule <resource_name>:<action>, denial → 403 "Access was denied to this resource."), and by policy.check_policy in the business layer (manila/policy.py:239-242, manila/share/api.py). The column "Policy rule(s)" of § 3 gives the rules found on the handler (decorator, literal check_policy calls, and helpers of the same controller); "— (deeper)" means the rule is checked only in manila/share/api.py or not at all.

  • @wsgi.Controller.authorize must be below @wsgi.Controller.api_version: api_version registers the function it receives (manila/api/openstack/wsgi.py:1095-1125), so a decorator placed above it is never executed. On this branch GET /share-transfers/{id} is in that case (manila/api/v2/share_transfer.py:49 (decorators on the two lines above)): **share_transfer:get is never checked**; only the database scoping of transfer_get protects the transfer (scenario share-transfer: another project gets 404, a reader of the owner project gets 200).
  • Default roles (enforce_new_defaults): readers can list and show, members can create and modify their project's resources, role:admin is a cloud administrator (manila/policies/base.py). Share types, quotas, services, pools and share servers are admin-only; **GET /types/{id}/extra_specs is admin-only by default** (scenario share-types: member → 403), which matters for the Manila CSI driver (07 § 4).

2. Functional description by area

2.1 Shares (/shares)

POST /shares — create a share

  • Purpose: provision a file system of size GiB exported with share_proto (NFS, CIFS, CephFS, GlusterFS, HDFS, MapRFS, ultimately limited by [DEFAULT]/enabled_share_protocols), empty or populated from a snapshot.
  • Actor: project member (share:create, manila/api/v2/shares.py:81).
  • Preconditions: a share type is resolved: the requested one (by name or id), otherwise [DEFAULT]/default_share_type; without any, the scheduler records the user message "NO_DEFAULT_SHARE_TYPE" and the share goes to error (manila/scheduler/drivers/filter.py:146-160). A snapshot source must be available (manila/share/api.py:313-317). The availability zone, when given, must exist (404 "Availability zone nowhere could not be found.").
  • Business rules:
    • size must be an integer-like value > 0 (manila/share/api.py:323-326), ≥ the snapshot size (manila/share/api.py:329-332), within the share type's provisioning:min_share_size / max_share_size (manila/share/api.py:334) and within the per-share quota (manila/share/api.py:376).
    • The protocol must be enabled (manila/share/api.py:366-374).
    • From a snapshot: the share type must be the source share's (or is taken from it), and the availability zone must be the source's unless use_scheduler_creating_share_from_snapshot (manila/share/api.py:336-364). When that option is False (default), the new share is created on the source share's host without scheduling (manila/share/api.py:532-536).
    • Quotas shares +1 and gigabytes +size are reserved (and share_replicas, replica_gigabytes for a replicated type); over quota → 413 (manila/share/api.py:413-421, scenario share-validation, quota_gigabytes).
    • Share group membership: the group must be available, support the share type and use the same share network (manila/share/api.py:423-460).
    • Share type extra specs prefixed provisioning: / metadata defaults are merged into the share metadata (manila/share/api.py:462-464).
  • Flow:
    1. (synchronous) Validation, quota reservation, INSERT shares and commit of the reservation (manila/share/api.py:516-528).
    2. (synchronous) create_instance: INSERT share_instances (creating), then cast create_share_instance to the scheduler, or directly to the share host when the host is already known (manila/share/api.py:724-871).
    3. (synchronous) 200 response with status: creating (not 202: scenario csi-driver-flow; gophercloud accepts 200 and 201).
    4. (asynchronous) The scheduler filters and weighs the pools (07 § 3), writes the chosen host and casts create_share_instance to manila-share on that host (manila/scheduler/drivers/filter.py:90-111). No valid host → share instance error and a user message "allocate host: No storage could be allocated for this share request, Capabilities filter didn't succeed." (scenario no-valid-host).
    5. (asynchronous) The share manager calls driver.create_share (or create_share_from_snapshot), stores the export locations and sets the instance available (manila/share/manager.py:2184-2440). See 05 § "create_share_instance".
  • Outcome: creating in the response; available or error once processed; the client polls GET /shares/{id}, and on error reads GET /messages?resource_id=… (what the Manila CSI driver does).
  • Effects visible elsewhere: notifications share.create.start / share.create.end (03 § notifications); quota usage rows.
  • Limitations: a share_network_id given with a DHSS=False share type is accepted by the API and fails in the share manager ("driver does not expect share-network to be provided with current configuration", manila/share/manager.py:2205-2216), leaving the share in error (scenario share-networks-security-services). Scheduler hints (same_host, different_host, only_host) exist from 2.65; mount_point_name from 2.84; encryption_key_ref from 2.90.

GET /shares, /shares/detail, /shares/{id}

  • Purpose: list or read shares. detail and show return the full view; the plain list returns id, name, links.
  • Rules: a member sees the shares of the project, plus public shares with is_public=true; all_tenants=1 is honoured only for admins (others: silently ignored, scenario isolation). Admin-only fields (host, share_server_id, export_location…) are hidden from members (manila/api/views/shares.py). Filters: name, status, share_type_id, snapshot_id, share_network_id, metadata, extra_specs, export_location_id|path (2.35), name~ / description~ (2.36), is_soft_deleted (2.69), availability_zone (2.97). A share of another project gives 404, not 403.

PUT /shares/{id}, DELETE /shares/{id}

  • Update: name, description, is_public (manila/api/v2/shares.py:1425-1465).
  • Delete: allowed in available, error, inactive and the *_error statuses (manila/share/api.py:1615-1626); refused with 403 when the share has snapshots or backups (InvalidShare converted to 403, manila/share/api.py:1634-1642, manila/api/v2/shares.py:1493-1494), with 409 when it has replicas (manila/share/api.py:1628-1631), and with 403 "Resource lock/s … prevent delete action" when a resource lock exists (scenario resource-locks). The response is 202; instances go to deleting and the share manager deletes them, then the share row (05). With [DEFAULT]/is_deferred_deletion_enabled the driver deletion is deferred to the periodic task do_deferred_share_deletion.

Share actions (POST /shares/{id}/action)

ActionRuleEffect
extend (os-extend < 2.7)share:extend, share:force_extend with force (2.64)share must be available, new size > current (manila/share/api.py:2928-2953); quota reserved; status extending; cast extend_share → available or extending_error. 202
shrinkshare:shrinknew size < current; shrinking → available; a driver that raises ShareShrinkingPossibleDataLoss or NotImplementedError puts the share back to available with a user message, any other error gives shrinking_error (manila/share/manager.py:5077-5145). 202
allow_accessshare:allow_accesssee § 2.2. 200 with the rule
deny_accessshare:deny_accesssee § 2.2. 202
access_listshare:access_get_allrules of the share (replaced by GET /share-access-rules from 2.45). 200
reset_status, force_deleteadminset status without driver call; delete ignoring status. 202
revert (2.27)share:revert_to_snapshotrevert to the latest snapshot only (otherwise 409, manila/api/v2/shares.py:1355-1373); reverting → available (manila/share/api.py:1445-1520). 202
migration_start (2.29), migration_complete, _cancel, _get_progress (2.22) — experimental until 2.95; GET /shares/{id}/migration-progress from 2.98admintwo-phase migration driven by the share manager and, for the generic path, manila-data
unmanage (2.7)adminforget the share without deleting data (manila/share/api.py:1368-1388). 202
soft_delete, restore (2.69)share:soft_delete, share:restoremove to / from the recycle bin; purged after soft_deleted_share_retention_time (default 604800 s) by delete_expired_share. 202

POST /shares/manage (2.7), metadata, export locations

  • manage registers an existing export (export_path, service_host, protocol, share_type, driver_options): status manage_starting, cast manage_share, then available or manage_error (manila/share/api.py:1142-1267, scenario manage-unmanage). Response 200.
  • Metadata: GET|POST|PUT /shares/{id}/metadata, GET|PUT|DELETE /shares/{id}/metadata/{key} (manila/api/v2/metadata.py). Keys listed in [DEFAULT]/admin_only_metadata are reserved to admins. POST merges, PUT replaces.
  • Export locations: GET /shares/{id}/export_locations[/{uuid}] (2.9+) returns path, preferred (2.14), is_admin_only and share_instance_id for admins, metadata (2.87). This is what a client mounts.

2.2 Access rules

  • Purpose: decide which clients may mount a share. Types: ip (NFS, CIFS on some drivers), user (CIFS, GlusterFS), cert (GlusterFS), cephx (CephFS). Levels rw / ro.
  • Business rules: the level must be rw or ro (manila/share/api.py:2685-2687); a rule identical to an existing one → 400 "Share access ip:… exists." (manila/share/api.py:2693-2694); no rule may be added while an instance is in a transitional status (manila/share/api.py:2697-2701); access_to is validated by type in the controller (IP or CIDR, user name 4–255 characters, cephx id) (manila/api/v2/shares.py:785-841). Metadata on rules from 2.45; lock_visibility / lock_deletion from 2.82.
  • Flow: (synchronous) INSERT share_access_map with state: queued_to_apply, the share instances' access_rules_status goes to syncing, 200 with the rule (manila/share/api.py:2718-2722); (asynchronous) cast update_access (version 1.14) to the share host; the share manager sends the full rule set to driver.update_access, then sets rules active (or error) and the instance access_rules_status back to active (05 § update_access).
  • Deny: queued_to_deny → denying → row deleted. A rule in error can always be denied.
  • List: GET /share-access-rules?share_id=… (2.45) — the Manila CSI driver uses it at 2.45 — and GET /share-access-rules/{id}, PUT /share-access-rules/{id}/metadata.

2.3 Snapshots (/snapshots)

  • Create (POST /snapshots, share:create_snapshot): the share must be available unless force (manila/share/api.py:1792-1801); the share type must have snapshot_support; quotas snapshots / snapshot_gigabytes (413, manila/share/api.py:1810-1830). Response 202 with status: creating; cast create_snapshot to the share host → available or error.
  • Delete: available or error (or force_delete for admins); 202; deleting → row gone (scenario csi-driver-flow: GET after delete → 404).
  • Manage / unmanage (2.12), snapshot access rules and export locations (mount_snapshot_support, 2.32), metadata (2.73).
  • Creating a share from a snapshot keeps the source share type and, by default, the source host (§ 2.1).

2.4 Share types and group types (/types, /share-group-types)

  • Admin-only writes. POST /types requires the extra spec driver_handles_share_servers (400 "Required extra specs 'driver_handles_share_servers' not specified.") and refuses duplicates (409) (scenario share-types). The required spec cannot be unset (403 "Extra spec 'driver_handles_share_servers' can't be deleted.").
  • Well-known extra specs used by the scheduler and the API: driver_handles_share_servers, snapshot_support, create_share_from_snapshot_support, revert_to_snapshot_support, mount_snapshot_support, replication_type, availability_zones, share_backend_name, provisioning:min_share_size|max_share_size|max_share_extend_size, capabilities:* (manila/share/share_types.py). Boolean specs are compared as <is> True by the capabilities filter (manila/scheduler/drivers/filter.py:162-168).
  • Private types: share_type_access:is_public=false plus addProjectAccess / removeProjectAccess actions; GET /types/{id}/share_type_access.
  • GET /types/default returns the type named by [DEFAULT]/default_share_type; PUT /types/{id} updates name, description and is_public (2.50).
  • Group types and share groups are experimental until 2.55 (scenario microversion-bounds: GET /share-groups at 2.30 without the experimental header → 404).

2.5 Share networks, subnets, security services, share servers

  • Only meaningful for DHSS=True back ends, which create a share server (a storage VM or a vserver) per share network. POST /share-networks (and subnets from 2.51) store Neutron network/subnet ids; security-services (ldap, kerberos, active_directory) describe directory services; add_security_service, update_security_service (2.63) actions. Deleting a share network used by a share → 409 (scenario share-networks-security-services).
  • Share servers: admin GET /share-servers, POST /share-servers/manage (2.49), reset_status, unmanage, migration (2.57).
  • Required by OpenKeel's back end (DHSS=True: one NFS gateway pod per share network subnet, attached to the tenant network): see 07 § 3.5. Scenarios dhss-* cover share network creation, share server creation and reuse, admin-only share server views, cleanup and Neutron failures (07 § 3.5.4).

2.6 Replicas (/share-replicas, experimental until 2.56)

  • POST /share-replicas creates a replica of a share whose type has replication_type (readable, dr, writable) on a back end of the same replication_domain (manila/share/api.py:872-1103). The periodic periodic_share_replica_update moves it to in_sync; promote swaps the active replica (manila/share/api.py:1104-1141); resync, reset_replica_state, force_delete. Scenario replicas covers create → in_sync → promote → delete of the old replica.

2.7 Transfers, locks, backups, groups, quotas, others

  • Share transfers (2.77): POST /share-transfers returns auth_key once; the share goes to awaiting_transfer; POST /share-transfers/{id}/accept by another project with the key (wrong key → 400) moves the share and, with clear_access_rules, drops its rules. Response 202 for create and accept. Expired after transfer_retention_time (300 s) by delete_expired_transfers.
  • Resource locks (2.81): POST /resource-locks on a share (delete action) or an access rule; delete of a locked resource → 403; lock owner or admin can unlock (DELETE /resource-locks/{id} → 204). lock_context is user, admin or service.
  • Share backups (2.80, experimental): POST /share-backups → cast to the share driver or to manila-data depending on the backup type; restore action. See 02 for the fail_reason defect.
  • Share groups and group snapshots (2.31, GA 2.55), share instances and snapshot instances (admin views), messages (GET /messages, 2.37: user-visible asynchronous errors with action_id, detail_id, user_message; expired after message_ttl, 30 days), quota sets (per project, per user, per share type from 2.39; os-quota-sets path until 2.6 only: 404 at 2.7, scenario quotas-limits), quota class sets, limits, availability zones, services (disable / enable / ensure-shares 2.86), scheduler-stats/pools (admin; filter by share_type from 2.23), QoS types (2.94), share network subnet metadata (2.78), extensions (legacy list).

3. Operation table

258 operations (each also reachable without /{project_id}); 13 have no policy rule on the handler (checked deeper or not at all, see § 1.7). Experimental variants are marked "(exp.)". "Success (code)" is the code declared by @wsgi.response or built in the handler body; "Observed" lists the statuses seen in the client scenarios.

MethodPath (after /v2/{project_id})HandlerPolicy rule(s)MicroversionRequest schema(s) (manila/api/schemas/)Success (code)Observed (scenarios)
GET/os-availability-zonemanila/api/v2/availability_zones.py:51availability_zone:index2.0+availability_zones.index_request_query200200
GET/availability-zonesmanila/api/v2/availability_zones.py:65availability_zone:index2.7+availability_zones.index_request_query200200
GET/os-servicesmanila/api/v2/services.py:151service:index2.0+—200
PUT/os-services/{id}manila/api/v2/services.py:155service:update2.0+—200
GET/servicesmanila/api/v2/services.py:170service:index2.7–2.85 / 2.86–2.92 / 2.93+—200200, 403
PUT/services/{id}manila/api/v2/services.py:182service:update2.7–2.82 / 2.83+—200200
POST/services/ensure-sharesmanila/api/v2/services.py:193service:ensure_shares2.86+services.ensure_shares_request_body202
GET/os-quota-sets/{id}/defaultsmanila/api/v2/quota_sets.py:298quota_set:show2.0+—200
PUT/os-quota-sets/{id}manila/api/v2/quota_sets.py:302quota_set:update2.0+—200
DELETE/os-quota-sets/{id}manila/api/v2/quota_sets.py:311quota_set:delete2.0+—200
GET/os-quota-sets/{id}manila/api/v2/quota_sets.py:293quota_set:show2.0+—200200, 404
GET/quota-sets/{id}/defaultsmanila/api/v2/quota_sets.py:335quota_set:show2.7+—200200
GET/quota-sets/{id}/detailmanila/api/v2/quota_sets.py:329quota_set:show2.25+—200200
PUT/quota-sets/{id}manila/api/v2/quota_sets.py:339quota_set:update2.7+—200200, 400, 403
DELETE/quota-sets/{id}manila/api/v2/quota_sets.py:360quota_set:delete2.7+—200202
GET/quota-sets/{id}manila/api/v2/quota_sets.py:323quota_set:show2.7+—200200
PUT/os-quota-class-sets/{id}manila/api/v2/quota_class_sets.py:87quota_class_set:update2.0+quota_class_sets.update_request_body200
GET/os-quota-class-sets/{id}manila/api/v2/quota_class_sets.py:81quota_class_set:show2.0+quota_class_sets.show_request_query200
PUT/quota-class-sets/{id}manila/api/v2/quota_class_sets.py:135quota_class_set:update2.7+quota_class_sets.update_request_body@2.7, quota_class_sets.update_request_body_v253@2.53, quota_class_sets.update_request_body_v262@2.62, quota_class_sets.update_request_body_v280@2.80, quota_class_sets.update_request_body_v290@2.90200
GET/quota-class-sets/{id}manila/api/v2/quota_class_sets.py:111quota_class_set:show2.7+quota_class_sets.show_request_query@2.7200200
POST/os-share-managemanila/api/v2/share_manage.py:134share:manage2.0+—200
POST/os-share-unmanage/{id}/unmanagemanila/api/v2/share_unmanage.py:41share:unmanage2.0+—202
GET/shares/detailmanila/api/v2/shares.py:1613share:get_all2.0+—200200
POST/sharesmanila/api/v2/shares.py:372share:create2.0–2.23 / 2.24–2.30 / 2.31–2.47 / 2.48–2.64 / 2.65–2.89 / 2.90+—200200, 400, 403, 404, 413, 422
GET/sharesmanila/api/v2/shares.py:1586share:get_all2.0+—200200, 400, 406
POST/shares/{id}/action {"access_list"}manila/api/v2/shares.py:997— (deeper)2.7+—200
POST/shares/{id}/action {"allow_access"}manila/api/v2/shares.py:858share:allow_access2.7+—200200, 400, 403, 404
POST/shares/{id}/action {"deny_access"}manila/api/v2/shares.py:972share:deny_access2.7+—200202
POST/shares/{id}/action {"extend"}manila/api/v2/shares.py:1062share:extend2.7+shares.extend_request_body_v264@2.64, shares.extend_request_body_v27@2.7200202
POST/shares/{id}/action {"force_delete"}manila/api/v2/shares.py:420share:force_delete2.7+shares.force_delete_request_body_v27200
POST/shares/{id}/action {"migration_cancel"}manila/api/v2/shares.py:600share:migration_cancel2.22–2.95 / 2.96+ (exp.)shares.migration_cancel_request_body200
POST/shares/{id}/action {"migration_complete"}manila/api/v2/shares.py:571share:migration_complete2.22–2.95 / 2.96+ (exp.)shares.migration_complete_request_body200
POST/shares/{id}/action {"migration_get_progress"}manila/api/v2/shares.py:632share:migration_get_progress2.22–2.95 / 2.96–2.97 (exp.)shares.migration_get_progress_request_body200
POST/shares/{id}/action {"migration_start"}manila/api/v2/shares.py:489share:migration_start2.29–2.95 / 2.96+ (exp.)shares.migration_start_request_body200
POST/shares/{id}/action {"os-access_list"}manila/api/v2/shares.py:991— (deeper)2.0+—200
POST/shares/{id}/action {"os-allow_access"}manila/api/v2/shares.py:852share:allow_access2.0+—200
POST/shares/{id}/action {"os-deny_access"}manila/api/v2/shares.py:966share:deny_access2.0+—200
POST/shares/{id}/action {"os-extend"}manila/api/v2/shares.py:1052share:extend2.0+shares.extend_request_body200
POST/shares/{id}/action {"os-force_delete"}manila/api/v2/shares.py:413share:force_delete2.0+shares.force_delete_request_body200
POST/shares/{id}/action {"os-reset_status"}manila/api/v2/shares.py:380share:reset_status2.0+shares.reset_status_request_body@2.0200
POST/shares/{id}/action {"os-shrink"}manila/api/v2/shares.py:1105share:shrink2.0+shares.shrink_request_body200
POST/shares/{id}/action {"reset_status"}manila/api/v2/shares.py:397share:reset_status2.7+shares.reset_status_request_body_v27, shares.reset_status_request_body_v27@2.7200
POST/shares/{id}/action {"reset_task_state"}manila/api/v2/shares.py:676share:reset_status
share:reset_task_state
2.22–2.95 / 2.96+ (exp.)shares.reset_task_state_request_body200
POST/shares/{id}/action {"restore"}manila/api/v2/shares.py:453share:restore2.69+shares.restore_request_body200, 202202
POST/shares/{id}/action {"revert"}manila/api/v2/shares.py:1409share:revert_to_snapshot2.27+shares.revert_request_body200202
POST/shares/{id}/action {"shrink"}manila/api/v2/shares.py:1113share:shrink2.7+shares.shrink_request_body_v27@2.7200202
POST/shares/{id}/action {"soft_delete"}manila/api/v2/shares.py:428share:soft_delete2.69+shares.soft_delete_request_body202202, 403
POST/shares/{id}/action {"unmanage"}manila/api/v2/shares.py:1287share:unmanage2.7+shares.unmanage_request_body200202
PUT/shares/{id}manila/api/v2/shares.py:1425share:update—200200
DELETE/shares/{id}manila/api/v2/shares.py:1466share:delete—202202, 403, 404
GET/shares/{id}manila/api/v2/shares.py:1413share:get—200200, 404
GET/shares/{id}/migration-progressmanila/api/v2/shares.py:652share:migration_get_progress2.98+—200
POST/shares/managemanila/api/v2/shares.py:1219share:manage2.7+—200200
POST/shares/{resource_id}/metadatamanila/api/v2/shares.py:1673share:update_admin_only_metadata
share:update_share_metadata
2.0+—200200
PUT/shares/{resource_id}/metadatamanila/api/v2/shares.py:1690share:update_admin_only_metadata
share:update_share_metadata
2.0+—200200
POST/shares/{resource_id}/metadata/{key}manila/api/v2/shares.py:1706share:update_admin_only_metadata
share:update_share_metadata
2.0+—200
GET/shares/{resource_id}/metadatamanila/api/v2/shares.py:1667share:get_share_metadata2.0+—200200
GET/shares/{resource_id}/metadata/{key}manila/api/v2/shares.py:1723share:get_share_metadata2.0+—200
DELETE/shares/{resource_id}/metadata/{key}manila/api/v2/shares.py:1728share:delete_share_metadata
share:update_admin_only_metadata
2.0+—200200
GET/share_instancesmanila/api/v2/share_instances.py:68share_instance:index2.3–2.34 / 2.35–2.68 / 2.69+—200200
POST/share_instances/{id}/action {"force_delete"}manila/api/v2/share_instances.py:63share_instance:force_delete2.7+—200
POST/share_instances/{id}/action {"os-force_delete"}manila/api/v2/share_instances.py:58share_instance:force_delete2.3+—200
POST/share_instances/{id}/action {"os-reset_status"}manila/api/v2/share_instances.py:48share_instance:reset_status2.3+—200
POST/share_instances/{id}/action {"reset_status"}manila/api/v2/share_instances.py:53share_instance:reset_status2.7+—200
GET/share_instances/{id}manila/api/v2/share_instances.py:107share_instance:show2.3+—200
GET/share_instances/{share_instance_id}/export_locationsmanila/api/v2/share_instance_export_locations.py:54?:index
share_instance:show
2.9+—200
GET/share_instances/{share_instance_id}/export_locations/{export_location_uuid}manila/api/v2/share_instance_export_locations.py:68?:show
share_instance:show
2.9+—200
GET/shares/{share_id}/instancesmanila/api/v2/share_instances.py:119share_instance:index2.3+—200
GET/shares/{share_id}/export_locationsmanila/api/v2/share_export_locations.py:94?:index2.9–2.46 / 2.47+share_export_locations.empty_query_schema200200
GET/shares/{share_id}/export_locations/{export_location_uuid}manila/api/v2/share_export_locations.py:114?:show2.9–2.46 / 2.47+share_export_locations.empty_query_schema200
POST/shares/{share_id}/export_locations/{resource_id}/metadatamanila/api/v2/share_export_locations.py:176?:update_metadata
share_export_location:update_admin_only_metadata
2.87+share_export_locations.create_metadata_response_body200
PUT/shares/{share_id}/export_locations/{resource_id}/metadatamanila/api/v2/share_export_locations.py:191?:update_metadata
share_export_location:update_admin_only_metadata
2.87+share_export_locations.update_metadata_request_body200200, 403
POST/shares/{share_id}/export_locations/{resource_id}/metadata/{key}manila/api/v2/share_export_locations.py:205?:update_metadata
share_export_location:update_admin_only_metadata
2.87+share_export_locations.update_metadata_request_body200
GET/shares/{share_id}/export_locations/{resource_id}/metadatamanila/api/v2/share_export_locations.py:166?:get_metadata2.87+share_export_locations.empty_query_schema200404
GET/shares/{share_id}/export_locations/{resource_id}/metadata/{key}manila/api/v2/share_export_locations.py:220?:get_metadata2.87+share_export_locations.empty_query_schema200
DELETE/shares/{share_id}/export_locations/{resource_id}/metadata/{key}manila/api/v2/share_export_locations.py:230?:delete_metadata2.87+—200
GET/snapshots/detailmanila/api/v2/share_snapshots.py:577share_snapshot:get_all_snapshots
share_snapshot:list_all_projects [inferred]
2.0+—200200
POST/snapshotsmanila/api/v2/share_snapshots.py:118share:create_snapshot [inferred]—202202
GET/snapshotsmanila/api/v2/share_snapshots.py:564share_snapshot:get_all_snapshots
share_snapshot:list_all_projects
share_snapshot:list_snapshots_in_deferred_deletion_states [inferred]
2.0+share_snapshots.index_request_query@2.0, share_snapshots.index_request_query_v236@2.36, share_snapshots.index_request_query_v273@2.73, share_snapshots.index_request_query_v279@2.79200
POST/snapshots/{id}/action {"allow_access"}manila/api/v2/share_snapshots.py:418share_snapshot:allow_access2.32+—202
POST/snapshots/{id}/action {"deny_access"}manila/api/v2/share_snapshots.py:459share_snapshot:deny_access2.32+—200
POST/snapshots/{id}/action {"force_delete"}manila/api/v2/share_snapshots.py:217share_snapshot:force_delete2.7+—200
POST/snapshots/{id}/action {"os-force_delete"}manila/api/v2/share_snapshots.py:212share_snapshot:force_delete2.0+—200
POST/snapshots/{id}/action {"os-reset_status"}manila/api/v2/share_snapshots.py:202share_snapshot:reset_status2.0+—200
POST/snapshots/{id}/action {"reset_status"}manila/api/v2/share_snapshots.py:207share_snapshot:reset_status2.7+—200
POST/snapshots/{id}/action {"unmanage"}manila/api/v2/share_snapshots.py:341share_snapshot:unmanage_snapshot2.12–2.48 / 2.49+—200
PUT/snapshots/{id}manila/api/v2/share_snapshots.py:84share:snapshot_update—200
DELETE/snapshots/{id}manila/api/v2/share_snapshots.py:70share:delete_snapshot—202202
GET/snapshots/{id}manila/api/v2/share_snapshots.py:591share_snapshot:get_snapshot
share_snapshot:list_snapshots_in_deferred_deletion_states [inferred]
2.0+share_snapshots.show_request_query200200, 404
POST/snapshots/{resource_id}/metadatamanila/api/v2/share_snapshots.py:614share_snapshot:update_metadata2.73+—200
PUT/snapshots/{resource_id}/metadatamanila/api/v2/share_snapshots.py:619share_snapshot:update_metadata2.73+—200
POST/snapshots/{resource_id}/metadata/{key}manila/api/v2/share_snapshots.py:624share_snapshot:update_metadata2.73+—200
GET/snapshots/{resource_id}/metadatamanila/api/v2/share_snapshots.py:608share_snapshot:get_metadata2.73+—200
GET/snapshots/{resource_id}/metadata/{key}manila/api/v2/share_snapshots.py:629share_snapshot:get_metadata2.73+—200
DELETE/snapshots/{resource_id}/metadata/{key}manila/api/v2/share_snapshots.py:634share_snapshot:delete_metadata2.73+—200
POST/snapshots/managemanila/api/v2/share_snapshots.py:302share_snapshot:manage_snapshot2.12+—202
GET/snapshots/{snapshot_id}/access-listmanila/api/v2/share_snapshots.py:473share_snapshot:access_list2.32+—200
GET/snapshots/{snapshot_id}/export-locationsmanila/api/v2/share_snapshot_export_locations.py:36?:index
share:get
2.32+—200200
GET/snapshots/{snapshot_id}/export-locations/{export_location_id}manila/api/v2/share_snapshot_export_locations.py:44?:show
share:get
2.32+—200
GET/snapshot-instances/detailmanila/api/v2/share_snapshot_instances.py:57share_snapshot_instance:detail2.19+—200
GET/snapshot-instancesmanila/api/v2/share_snapshot_instances.py:51share_snapshot_instance:index2.19+—200
POST/snapshot-instances/{id}/action {"reset_status"}manila/api/v2/share_snapshot_instances.py:77share_snapshot_instance:reset_status2.19+—200
GET/snapshot-instances/{id}manila/api/v2/share_snapshot_instances.py:39share_snapshot_instance:show2.19+—200
GET/snapshot-instances/{snapshot_instance_id}/export-locationsmanila/api/v2/share_snapshot_instance_export_locations.py:36?:index
share:get
2.32+—200
GET/snapshot-instances/{snapshot_instance_id}/export-locations/{export_location_id}manila/api/v2/share_snapshot_instance_export_locations.py:48?:show
share:get
2.32+—200
GET/limitsmanila/api/v2/limits.py:51— (deeper)—200200
GET/security-services/detailmanila/api/v2/security_service.py:87security_service:detail
security_service:get_all_security_services
—200200
POST/security-servicesmanila/api/v2/security_service.py:216security_service:create—200200, 400
GET/security-servicesmanila/api/v2/security_service.py:81security_service:get_all_security_services
security_service:index
—200
PUT/security-services/{id}manila/api/v2/security_service.py:167security_service:update—200
DELETE/security-services/{id}manila/api/v2/security_service.py:57security_service:delete—202202
GET/security-services/{id}manila/api/v2/security_service.py:45security_service:show—200
GET/share-networks/detailmanila/api/v2/share_networks.py:271share_network:detail
share_network:show_network_details
—200200
POST/share-networksmanila/api/v2/share_networks.py:355share_network:create—200200
GET/share-networksmanila/api/v2/share_networks.py:265share_network:index
share_network:show_network_details
—200
POST/share-networks/{id}/action {"add_security_service"}manila/api/v2/share_networks.py:445share_network:add_security_service—200200
POST/share-networks/{id}/action {"add_security_service_check"}manila/api/v2/share_networks.py:618share_network:add_security_service_check2.63+—202
POST/share-networks/{id}/action {"remove_security_service"}manila/api/v2/share_networks.py:493share_network:remove_security_service—200200
POST/share-networks/{id}/action {"reset_status"}manila/api/v2/share_networks.py:704share_network:reset_status2.63+—200
POST/share-networks/{id}/action {"share_network_subnet_create_check"}manila/api/v2/share_networks.py:657— (deeper)2.70+—202
POST/share-networks/{id}/action {"update_security_service"}manila/api/v2/share_networks.py:522share_network:update_security_service2.63+—202
POST/share-networks/{id}/action {"update_security_service_check"}manila/api/v2/share_networks.py:573share_network:update_security_service_check2.63+—202
PUT/share-networks/{id}manila/api/v2/share_networks.py:277share_network:update—200
DELETE/share-networks/{id}manila/api/v2/share_networks.py:87share_network:delete—202202, 409
GET/share-networks/{id}manila/api/v2/share_networks.py:65share_network:show—200200
POST/share-networks/{share_network_id}/subnetsmanila/api/v2/share_network_subnets.py:134share_network_subnet:create2.51+—200
DELETE/share-networks/{share_network_id}/subnets/{share_network_subnet_id}manila/api/v2/share_network_subnets.py:74share_network_subnet:delete2.51+—202
GET/share-networks/{share_network_id}/subnets/{share_network_subnet_id}manila/api/v2/share_network_subnets.py:203share_network_subnet:show2.51+—200
GET/share-networks/{share_network_id}/subnetsmanila/api/v2/share_network_subnets.py:56share_network_subnet:index2.51+—200
POST/share-networks/{share_network_id}/subnets/{resource_id}/metadatamanila/api/v2/share_network_subnets.py:230share_network_subnet:update_metadata2.78+—200
PUT/share-networks/{share_network_id}/subnets/{resource_id}/metadatamanila/api/v2/share_network_subnets.py:245share_network_subnet:update_metadata2.78+—200
POST/share-networks/{share_network_id}/subnets/{resource_id}/metadata/{key}manila/api/v2/share_network_subnets.py:260share_network_subnet:update_metadata2.78+—200
GET/share-networks/{share_network_id}/subnets/{resource_id}/metadatamanila/api/v2/share_network_subnets.py:223share_network_subnet:get_metadata2.78+—200
GET/share-networks/{share_network_id}/subnets/{resource_id}/metadata/{key}manila/api/v2/share_network_subnets.py:276share_network_subnet:get_metadata2.78+—200
DELETE/share-networks/{share_network_id}/subnets/{resource_id}/metadata/{key}manila/api/v2/share_network_subnets.py:283share_network_subnet:delete_metadata2.78+—200
GET/share-serversmanila/api/v2/share_servers.py:60share_server:index—200200, 403
POST/share-servers/{id}/action {"migration_cancel"}manila/api/v2/share_servers.py:389share_server:share_server_migration_cancel2.57+ (exp.)—202
POST/share-servers/{id}/action {"migration_check"}manila/api/v2/share_servers.py:429share_server:share_server_migration_check2.57+ (exp.)—200
POST/share-servers/{id}/action {"migration_complete"}manila/api/v2/share_servers.py:367share_server:share_server_migration_complete2.57+ (exp.)—200
POST/share-servers/{id}/action {"migration_get_progress"}manila/api/v2/share_servers.py:407share_server:share_server_migration_get_progress2.57+ (exp.)—200
POST/share-servers/{id}/action {"migration_start"}manila/api/v2/share_servers.py:296share_server:share_server_migration_start2.57+ (exp.)—202
POST/share-servers/{id}/action {"reset_status"}manila/api/v2/share_servers.py:123share_server:reset_status2.49+—200
POST/share-servers/{id}/action {"reset_task_state"}manila/api/v2/share_servers.py:423share_server:reset_status
share_server:share_server_reset_task_state
2.57+ (exp.)—200
POST/share-servers/{id}/action {"unmanage"}manila/api/v2/share_servers.py:210share_server:unmanage_share_server2.49+—200
DELETE/share-servers/{id}manila/api/v2/share_servers.py:98share_server:delete—202
GET/share-servers/{id}manila/api/v2/share_servers.py:72share_server:show—200200
GET/share-servers/{id}/detailsmanila/api/v2/share_servers.py:86share_server:details—200200
POST/share-servers/managemanila/api/v2/share_servers.py:152share_server:manage_share_server2.49+ / 2.51+—202
GET/types/defaultmanila/api/v2/share_types.py:104share_type:default—200200
POST/typesmanila/api/v2/share_types.py:151share_type:create2.0–2.23 / 2.24+—200200, 400, 403, 409
GET/typesmanila/api/v2/share_types.py:70share_type:index—200200
POST/types/{id}/action {"addProjectAccess"}manila/api/v2/share_types.py:351share_type:add_project_access—202202
POST/types/{id}/action {"create"}manila/api/v2/share_types.py:151share_type:create2.0–2.23 / 2.24+—200
POST/types/{id}/action {"delete"}manila/api/v2/share_types.py:229share_type:delete—202
POST/types/{id}/action {"removeProjectAccess"}manila/api/v2/share_types.py:367share_type:remove_project_access—202
POST/types/{id}/action {"update"}manila/api/v2/share_types.py:256share_type:update2.50+—200
GET/types/{id}/share_type_accessmanila/api/v2/share_types.py:333share_type:list_project_access—200200
PUT/types/{id}manila/api/v2/share_types.py:256share_type:update2.50+—200200
DELETE/types/{id}manila/api/v2/share_types.py:229share_type:delete—202202
GET/types/{id}manila/api/v2/share_types.py:78share_type:show—200
POST/types/{type_id}/extra_specsmanila/api/v2/share_types_extra_specs.py:88share_types_extra_spec:create—200
GET/types/{type_id}/extra_specsmanila/api/v2/share_types_extra_specs.py:81share_types_extra_spec:index—200403
PUT/types/{type_id}/extra_specs/{id}manila/api/v2/share_types_extra_specs.py:110share_types_extra_spec:update—200
DELETE/types/{type_id}/extra_specs/{id}manila/api/v2/share_types_extra_specs.py:143share_types_extra_spec:delete2.0–2.23 / 2.24+—200202, 403
GET/types/{type_id}/extra_specs/{id}manila/api/v2/share_types_extra_specs.py:131share_types_extra_spec:show—200
GET/scheduler-stats/poolsmanila/api/v2/scheduler_stats.py:36scheduler_stats:pools:index2.0–2.22 / 2.23+—200200
GET/scheduler-stats/pools/detailmanila/api/v2/scheduler_stats.py:47scheduler_stats:pools:detail2.0–2.22 / 2.23+—200200
GET/share-groups/detailmanila/api/v2/share_groups.py:101share_group:get_all2.31–2.54 / 2.55+ (exp.)—200200
POST/share-groupsmanila/api/v2/share_groups.py:290share_group:create2.31–2.54 / 2.55+ (exp.)—202202
GET/share-groupsmanila/api/v2/share_groups.py:93share_group:get_all2.31–2.54 / 2.55+ (exp.)—200200, 404
PUT/share-groups/{id}manila/api/v2/share_groups.py:163share_group:update2.31–2.54 / 2.55+ (exp.)—200
DELETE/share-groups/{id}manila/api/v2/share_groups.py:85share_group:delete2.31–2.54 / 2.55+ (exp.)—200
GET/share-groups/{id}manila/api/v2/share_groups.py:64share_group:get2.31–2.54 / 2.55+ (exp.)—200200
POST/share-groups/{id}/action {"force_delete"}manila/api/v2/share_groups.py:329share_group:force_delete2.31–2.54 / 2.55+ (exp.)—200
POST/share-groups/{id}/action {"reset_status"}manila/api/v2/share_groups.py:317share_group:reset_status2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-types/defaultmanila/api/v2/share_group_types.py:95share_group_type:default2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-typesmanila/api/v2/share_group_types.py:172share_group_type:create2.31–2.54 / 2.55+ (exp.)—200200
GET/share-group-typesmanila/api/v2/share_group_types.py:54share_group_type:index2.31–2.54 / 2.55+ (exp.)—200200
POST/share-group-types/{id}/action {"addProjectAccess"}manila/api/v2/share_group_types.py:251share_group_type:add_project_access2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-types/{id}/action {"create"}manila/api/v2/share_group_types.py:172share_group_type:create2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-types/{id}/action {"delete"}manila/api/v2/share_group_types.py:196share_group_type:delete2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-types/{id}/action {"removeProjectAccess"}manila/api/v2/share_group_types.py:276share_group_type:remove_project_access2.31–2.54 / 2.55+ (exp.)—200
DELETE/share-group-types/{id}manila/api/v2/share_group_types.py:196share_group_type:delete2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-types/{id}manila/api/v2/share_group_types.py:75share_group_type:show2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-types/{id}/accessmanila/api/v2/share_group_types.py:227share_group_type:list_project_access2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-types/{id}/group-specsmanila/api/v2/share_group_type_specs.py:71share_group_types_spec:index2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-types/{id}/group-specsmanila/api/v2/share_group_type_specs.py:92share_group_types_spec:create2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-types/{id}/group-specs/{key}manila/api/v2/share_group_type_specs.py:138share_group_types_spec:show2.31–2.54 / 2.55+ (exp.)—200
DELETE/share-group-types/{id}/group-specs/{key}manila/api/v2/share_group_type_specs.py:157share_group_types_spec:delete2.31–2.54 / 2.55+ (exp.)—200
PUT/share-group-types/{id}/group-specs/{key}manila/api/v2/share_group_type_specs.py:117share_group_types_spec:update2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-snapshots/detailmanila/api/v2/share_group_snapshots.py:102share_group_snapshot:get_all2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-snapshotsmanila/api/v2/share_group_snapshots.py:206share_group_snapshot:create2.31–2.54 / 2.55+ (exp.)—202
GET/share-group-snapshotsmanila/api/v2/share_group_snapshots.py:92share_group_snapshot:get_all2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-snapshots/{id}/membersmanila/api/v2/share_group_snapshots.py:228share_group_snapshot:get2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-snapshots/{id}/action {"force_delete"}manila/api/v2/share_group_snapshots.py:258share_group_snapshot:force_delete2.31–2.54 / 2.55+ (exp.)—200
POST/share-group-snapshots/{id}/action {"reset_status"}manila/api/v2/share_group_snapshots.py:246share_group_snapshot:reset_status2.31–2.54 / 2.55+ (exp.)—200
PUT/share-group-snapshots/{id}manila/api/v2/share_group_snapshots.py:162share_group_snapshot:update2.31–2.54 / 2.55+ (exp.)—200
DELETE/share-group-snapshots/{id}manila/api/v2/share_group_snapshots.py:84share_group_snapshot:delete2.31–2.54 / 2.55+ (exp.)—200
GET/share-group-snapshots/{id}manila/api/v2/share_group_snapshots.py:62share_group_snapshot:get2.31–2.54 / 2.55+ (exp.)—200
GET/share-replicas/detailmanila/api/v2/share_replicas.py:77share_replica:get_all2.11–2.55 / 2.56+ (exp.)—200200
POST/share-replicasmanila/api/v2/share_replicas.py:173share_replica:create2.11–2.55 / 2.56–2.66 / 2.67–2.94 / 2.95+ (exp.)—202202, 403
GET/share-replicasmanila/api/v2/share_replicas.py:66share_replica:get_all2.11–2.55 / 2.56+ (exp.)—200
POST/share-replicas/{id}/action {"force_delete"}manila/api/v2/share_replicas.py:374share_replica:force_delete2.11–2.55 / 2.56+ (exp.)—200
POST/share-replicas/{id}/action {"promote"}manila/api/v2/share_replicas.py:293share_replica:promote2.11–2.55 / 2.56–2.74 / 2.75+ (exp.)—202202
POST/share-replicas/{id}/action {"reset_replica_state"}manila/api/v2/share_replicas.py:390share_replica:reset_replica_state
share_replica:reset_status
2.11–2.55 / 2.56+ (exp.)—200
POST/share-replicas/{id}/action {"reset_status"}manila/api/v2/share_replicas.py:359share_replica:reset_status2.11–2.55 / 2.56+ (exp.)—200
POST/share-replicas/{id}/action {"resync"}manila/api/v2/share_replicas.py:407share_replica:resync2.11–2.55 / 2.56+ (exp.)—202
DELETE/share-replicas/{id}manila/api/v2/share_replicas.py:264share_replica:delete2.11–2.55 / 2.56+ (exp.)—200202
GET/share-replicas/{id}manila/api/v2/share_replicas.py:143share_replica:show2.11–2.55 / 2.56+ (exp.)—200
POST/share-replicas/{resource_id}/metadatamanila/api/v2/share_replicas.py:94share_replica:update_metadata2.95+—200
PUT/share-replicas/{resource_id}/metadatamanila/api/v2/share_replicas.py:99share_replica:update_metadata2.95+—200
POST/share-replicas/{resource_id}/metadata/{key}manila/api/v2/share_replicas.py:104share_replica:update_metadata2.95+—200
GET/share-replicas/{resource_id}/metadatamanila/api/v2/share_replicas.py:88share_replica:get_metadata2.95+—200
GET/share-replicas/{resource_id}/metadata/{key}manila/api/v2/share_replicas.py:109share_replica:get_metadata2.95+—200
DELETE/share-replicas/{resource_id}/metadata/{key}manila/api/v2/share_replicas.py:114share_replica:delete_metadata2.95+—200
GET/share-transfers/detailmanila/api/v2/share_transfer.py:64share_transfer:get_all2.77+—200
POST/share-transfersmanila/api/v2/share_transfer.py:102share_transfer:create2.77+—202202
GET/share-transfersmanila/api/v2/share_transfer.py:59share_transfer:get_all2.77+—200
POST/share-transfers/{id}/acceptmanila/api/v2/share_transfer.py:140share_transfer:accept2.77+—202202, 400
DELETE/share-transfers/{id}manila/api/v2/share_transfer.py:189share_transfer:delete2.77+—200
GET/share-transfers/{id}manila/api/v2/share_transfer.py:49share_transfer:get [inferred]2.77+—200200, 404
GET/share-replicas/{share_replica_id}/export-locationsmanila/api/v2/share_replica_export_locations.py:44?:index2.47–2.55 / 2.56+ (exp.)—200200
GET/share-replicas/{share_replica_id}/export-locations/{export_location_uuid}manila/api/v2/share_replica_export_locations.py:66?:show2.47–2.55 / 2.56+ (exp.)—200
GET/messagesmanila/api/v2/messages.py:91message:get_all2.37+messages.index_request_query@2.37, messages.index_request_query_v252@2.52200200
DELETE/messages/{id}manila/api/v2/messages.py:70message:delete2.37+—204
GET/messages/{id}manila/api/v2/messages.py:55message:get2.37+messages.show_request_query200
GET/share-access-rulesmanila/api/v2/share_accesses.py:140share_access_rule:index2.45–2.81 / 2.82+—200200
PUT/share-access-rules/{id}manila/api/v2/share_accesses.py:149share_access_rule:update2.88+—200
GET/share-access-rules/{id}manila/api/v2/share_accesses.py:45share_access_rule:get2.45+—200200
PUT/share-access-rules/{access_id}/metadatamanila/api/v2/share_access_metadata.py:40share_access_metadata:update2.45+—200200
DELETE/share-access-rules/{access_id}/metadata/{key}manila/api/v2/share_access_metadata.py:52share_access_metadata:delete2.45+—200
GET/share-backups/detailmanila/api/v2/share_backups.py:53share_backup:get_all
share_backup:get_all_project
2.80+ (exp.)—200
POST/share-backupsmanila/api/v2/share_backups.py:145share_backup:create2.80+ (exp.)—202202
GET/share-backupsmanila/api/v2/share_backups.py:48share_backup:get_all
share_backup:get_all_project
2.80+ (exp.)—200
POST/share-backups/{id}/action {"reset_status"}manila/api/v2/share_backups.py:270share_backup:reset_status2.80+ (exp.)—200
POST/share-backups/{id}/action {"restore"}manila/api/v2/share_backups.py:227share_backup:restore2.80–2.90 / 2.91+ (exp.)—202
PUT/share-backups/{id}manila/api/v2/share_backups.py:242share_backup:update2.80+ (exp.)—200
DELETE/share-backups/{id}manila/api/v2/share_backups.py:183share_backup:delete2.80+ (exp.)—202
GET/share-backups/{id}manila/api/v2/share_backups.py:130share_backup:get2.80+ (exp.)—200200
POST/resource-locksmanila/api/v2/resource_locks.py:167resource_lock:create2.81+resource_locks.create_request_body200200, 400
GET/resource-locksmanila/api/v2/resource_locks.py:100resource_lock:get_all2.81+resource_locks.index_request_query200200
PUT/resource-locks/{id}manila/api/v2/resource_locks.py:195resource_lock:update2.81+resource_locks.update_request_body200
DELETE/resource-locks/{id}manila/api/v2/resource_locks.py:154resource_lock:delete2.81+—204204
GET/resource-locks/{id}manila/api/v2/resource_locks.py:141resource_lock:get2.81+resource_locks.show_request_query200
POST/qos-typesmanila/api/v2/qos_types.py:107qos_type:create2.94+—200
GET/qos-typesmanila/api/v2/qos_types.py:63qos_type:index2.94+—200
PUT/qos-types/{id}manila/api/v2/qos_types.py:175qos_type:update2.94+—200
DELETE/qos-types/{id}manila/api/v2/qos_types.py:150qos_type:delete2.94+—204
GET/qos-types/{id}manila/api/v2/qos_types.py:94qos_type:show2.94+—200
POST/qos-types/{id}/specsmanila/api/v2/qos_type_specs.py:74qos_type_specs:create2.94+—200
GET/qos-types/{id}/specs/{key}manila/api/v2/qos_type_specs.py:61qos_type_specs:show2.94+—200
GET/qos-types/{id}/specsmanila/api/v2/qos_type_specs.py:53qos_type_specs:index2.94+—200
DELETE/qos-types/{id}/specs/{key}manila/api/v2/qos_type_specs.py:121qos_type_specs:delete2.94+—204
PUT/qos-types/{id}/specs/{key}manila/api/v2/qos_type_specs.py:96qos_type_specs:update2.94+—200
POST/extensionsmanila/api/extensions.py:110— (deeper)—200
GET/extensionsmanila/api/extensions.py:92— (deeper)—200200
DELETE/extensions/{id}manila/api/extensions.py:107— (deeper)—200
GET/extensions/{id}manila/api/extensions.py:98— (deeper)—200

4. Lifecycles

4.1 Share (status of the share instance, shown as the share's status)

Constants in manila/common/constants.py:23-57. The share's status is the status of its active instance.

stateDiagram-v2
  [*] --> creating: POST /shares (API)
  creating --> available: cast create_share_instance done (share manager)
  creating --> error: NoValidHost (scheduler) / driver exception (share manager)
  creating --> creating_from_snapshot: driver answers creating_from_snapshot
  creating_from_snapshot --> available: periodic_share_status_update (driver get_share_status)
  available --> extending: POST action extend (API)
  extending --> available: extend_share done
  extending --> extending_error: driver exception
  available --> shrinking: POST action shrink (API)
  shrinking --> available: shrink_share done
  shrinking --> shrinking_error: driver exception
  shrinking --> available: driver refuses (possible data loss / not supported), user message
  available --> reverting: POST action revert (API)
  reverting --> available: revert_to_snapshot done
  reverting --> reverting_error: driver exception
  available --> awaiting_transfer: POST /share-transfers (API)
  awaiting_transfer --> available: accept / delete / expiry (delete_expired_transfers)
  available --> backup_creating: POST /share-backups (API)
  backup_creating --> available: backup done or failed
  available --> deleting: DELETE /shares (API)
  error --> deleting: DELETE /shares (API)
  deleting --> [*]: delete_share_instance done
  deleting --> error_deleting: driver exception
  available --> deferred_deleting: DELETE with is_deferred_deletion_enabled
  deferred_deleting --> [*]: do_deferred_share_deletion (periodic)
  available --> unmanage_starting: POST action unmanage
  unmanage_starting --> [*]: unmanage_share done
  [*] --> manage_starting: POST /shares/manage
  manage_starting --> available: manage_share done
  manage_starting --> manage_error: driver exception
  available --> migrating: migration_start
  migrating --> available: migration_complete / cancel
  available --> error: POST action reset_status (admin, from any status)

4.2 Access rule (share_access_map / share_instance_access_map.state)

Constants in manila/common/constants.py:64-81; transitions in manila/share/access.py:253-470.

stateDiagram-v2
  [*] --> queued_to_apply: POST action allow_access (API)
  queued_to_apply --> applying: update_access (share manager, before driver call)
  applying --> active: driver.update_access returned
  applying --> error: driver exception or driver update {state: error}
  active --> queued_to_update: PUT share-access-rules (access level, 2.88)
  queued_to_update --> updating: update_access
  updating --> active: driver returned
  active --> queued_to_deny: POST action deny_access (API)
  error --> queued_to_deny: deny_access
  queued_to_deny --> denying: update_access
  denying --> [*]: driver returned (row soft-deleted)

The instance aggregate access_rules_status is active, syncing (rules being applied) or error (manila/common/constants.py:75-80); while it is syncing, allow_access is still accepted but update_access loops until the queue is empty (manila/share/access.py:434-469).

4.3 Snapshot

creating → available | error (cast create_snapshot); available → deleting → gone | error_deleting; available → restoring (share revert); manage_starting → available | manage_error; unmanage_starting → gone; with deferred deletion deferred_deleting → gone (do_deferred_snapshot_deletion).

4.4 Replica (replica_state)

creating (status) → out_of_sync → in_sync (periodic_share_replica_update every replica_state_update_interval, default 300 s, or on demand with resync); promote swaps active and the target replica (replication_change status during the operation); error on driver failure (scenario replicas).

Source: reverse-spec-manila/01-rest-api_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.