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_sharecomposite (etc/manila/api-paste.ini:5-9, factorymanila/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 bypipeline_factoryfrom[DEFAULT]/auth_strategy(manila/api/middleware/auth.py:47-59).noauth/noauthv2replace the last two filters by a fake authentication that trustsX-Auth-Token: user:project. - Request context:
ManilaKeystoneContextbuildsmanila.contextfrom 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 checkX-Identity-Status: it relies onauthtokenhaving rejected invalid tokens.X-Forwarded-Foris used forremote_addressonly 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 throughauthtoken: anonymous calls get 401 (scenarioversions).
1.2 URLs
- Every resource exists twice:
/v2/{project_id}/<resource>and/v2/<resource>(manila/api/v2/router.py:107-110and 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 (scenarioauth-and-routing). mapper.resourcealso declaresnew,editand the CRUD verbs a controller does not implement: they answer 404itemNotFound(_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 nolatest:latestand2.xare 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) → 406computeFault"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: Truein addition (manila/api/openstack/wsgi.py:54,manila/api/openstack/wsgi.py:244-247). A method markedexperimental=Truecalled 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, andX-OpenStack-Manila-API-Experimentalwhen the request asked for it (manila/api/openstack/wsgi.py:1322-1331for 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_schemaandresponse_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, explicitHTTPBadRequest), so unknown fields are silently ignored onPOST /shares(scenarioshare-validation,unknown_field→ 200) and a size given as a string"1"is accepted (manila/share/api.py:323-326usesis_int_like). response_body_schemavalidates the response in production too, after the handler has run. OnPOST /resource-locksa 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 (scenarioresource-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" (scenarioshare-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>"}}withfaultNameamongbadRequest,unauthorized,forbidden,itemNotFound,badMethod,conflictingRequest,overLimit,badMediaType,notImplemented,serviceUnavailable, otherwisecomputeFault(manila/api/openstack/wsgi.py:1294-1320). A 413 addsretryAfter(manila/api/openstack/wsgi.py:1320-1322). The 401 ofauthtokenis 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'scode, and the message is shown **only forsafeexceptions** (NotFound,Found,QuotaErrorand 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(osloRequestId). - 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 whenlimitis given and the page is full; they carry amarker(scenariolist-filters-and-paging). Unknown filters are dropped byremove_invalid_optionsfor non-admins (manila/api/common.py:450-470); thename~,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.authorizemust be below@wsgi.Controller.api_version:api_versionregisters the function it receives (manila/api/openstack/wsgi.py:1095-1125), so a decorator placed above it is never executed. On this branchGET /share-transfers/{id}is in that case (manila/api/v2/share_transfer.py:49(decorators on the two lines above)): **share_transfer:getis never checked**; only the database scoping oftransfer_getprotects the transfer (scenarioshare-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:adminis a cloud administrator (manila/policies/base.py). Share types, quotas, services, pools and share servers are admin-only; **GET /types/{id}/extra_specsis admin-only by default** (scenarioshare-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
sizeGiB exported withshare_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 toerror(manila/scheduler/drivers/filter.py:146-160). A snapshot source must beavailable(manila/share/api.py:313-317). The availability zone, when given, must exist (404 "Availability zone nowhere could not be found."). - Business rules:
sizemust 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'sprovisioning: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 andgigabytes+size are reserved (andshare_replicas,replica_gigabytesfor a replicated type); over quota → 413 (manila/share/api.py:413-421, scenarioshare-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:
- (synchronous) Validation, quota reservation,
INSERT sharesand commit of the reservation (manila/share/api.py:516-528). - (synchronous)
create_instance:INSERT share_instances(creating), thencast create_share_instanceto the scheduler, or directly to the share host when the host is already known (manila/share/api.py:724-871). - (synchronous) 200 response with
status: creating(not 202: scenariocsi-driver-flow; gophercloud accepts 200 and 201). - (asynchronous) The scheduler filters and weighs the pools (07 § 3), writes the chosen
hostand castscreate_share_instancetomanila-shareon that host (manila/scheduler/drivers/filter.py:90-111). No valid host → share instanceerrorand a user message "allocate host: No storage could be allocated for this share request, Capabilities filter didn't succeed." (scenariono-valid-host). - (asynchronous) The share manager calls
driver.create_share(orcreate_share_from_snapshot), stores the export locations and sets the instanceavailable(manila/share/manager.py:2184-2440). See 05 § "create_share_instance".
- (synchronous) Validation, quota reservation,
- Outcome:
creatingin the response;availableorerroronce processed; the client pollsGET /shares/{id}, and onerrorreadsGET /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_idgiven 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 inerror(scenarioshare-networks-security-services). Scheduler hints (same_host,different_host,only_host) exist from 2.65;mount_point_namefrom 2.84;encryption_key_reffrom 2.90.
GET /shares, /shares/detail, /shares/{id}
- Purpose: list or read shares.
detailandshowreturn the full view; the plain list returnsid,name,links. - Rules: a member sees the shares of the project, plus public shares with
is_public=true;all_tenants=1is honoured only for admins (others: silently ignored, scenarioisolation). 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,inactiveand the*_errorstatuses (manila/share/api.py:1615-1626); refused with 403 when the share has snapshots or backups (InvalidShareconverted 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 (scenarioresource-locks). The response is 202; instances go todeletingand the share manager deletes them, then the share row (05). With[DEFAULT]/is_deferred_deletion_enabledthe driver deletion is deferred to the periodic taskdo_deferred_share_deletion.
Share actions (POST /shares/{id}/action)
| Action | Rule | Effect |
|---|---|---|
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 |
shrink | share:shrink | new 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_access | share:allow_access | see § 2.2. 200 with the rule |
deny_access | share:deny_access | see § 2.2. 202 |
access_list | share:access_get_all | rules of the share (replaced by GET /share-access-rules from 2.45). 200 |
reset_status, force_delete | admin | set status without driver call; delete ignoring status. 202 |
revert (2.27) | share:revert_to_snapshot | revert 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.98 | admin | two-phase migration driven by the share manager and, for the generic path, manila-data |
unmanage (2.7) | admin | forget the share without deleting data (manila/share/api.py:1368-1388). 202 |
soft_delete, restore (2.69) | share:soft_delete, share:restore | move 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
manageregisters an existing export (export_path,service_host,protocol,share_type,driver_options): statusmanage_starting, castmanage_share, thenavailableormanage_error(manila/share/api.py:1142-1267, scenariomanage-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_metadataare reserved to admins.POSTmerges,PUTreplaces. - Export locations:
GET /shares/{id}/export_locations[/{uuid}](2.9+) returnspath,preferred(2.14),is_admin_onlyandshare_instance_idfor 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). Levelsrw/ro. - Business rules: the level must be
rworro(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_tois 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_deletionfrom 2.82. - Flow: (synchronous)
INSERT share_access_mapwithstate: queued_to_apply, the share instances'access_rules_statusgoes tosyncing, 200 with the rule (manila/share/api.py:2718-2722); (asynchronous) castupdate_access(version 1.14) to the share host; the share manager sends the full rule set todriver.update_access, then sets rulesactive(orerror) and the instanceaccess_rules_statusback toactive(05 § update_access). - Deny:
queued_to_deny→denying→ row deleted. A rule inerrorcan always be denied. - List:
GET /share-access-rules?share_id=…(2.45) — the Manila CSI driver uses it at 2.45 — andGET /share-access-rules/{id},PUT /share-access-rules/{id}/metadata.
2.3 Snapshots (/snapshots)
- Create (
POST /snapshots,share:create_snapshot): the share must beavailableunlessforce(manila/share/api.py:1792-1801); the share type must havesnapshot_support; quotassnapshots/snapshot_gigabytes(413,manila/share/api.py:1810-1830). Response 202 withstatus: creating; castcreate_snapshotto the share host →availableorerror. - Delete:
availableorerror(orforce_deletefor admins); 202;deleting→ row gone (scenariocsi-driver-flow:GETafter 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 /typesrequires the extra specdriver_handles_share_servers(400 "Required extra specs 'driver_handles_share_servers' not specified.") and refuses duplicates (409) (scenarioshare-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> Trueby the capabilities filter (manila/scheduler/drivers/filter.py:162-168). - Private types:
share_type_access:is_public=falseplusaddProjectAccess/removeProjectAccessactions;GET /types/{id}/share_type_access. GET /types/defaultreturns the type named by[DEFAULT]/default_share_type;PUT /types/{id}updates name, description andis_public(2.50).- Group types and share groups are experimental until 2.55 (scenario
microversion-bounds:GET /share-groupsat 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 (scenarioshare-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-replicascreates a replica of a share whose type hasreplication_type(readable,dr,writable) on a back end of the samereplication_domain(manila/share/api.py:872-1103). The periodicperiodic_share_replica_updatemoves it toin_sync;promoteswaps the active replica (manila/share/api.py:1104-1141);resync,reset_replica_state,force_delete. Scenarioreplicascovers create →in_sync→ promote → delete of the old replica.
2.7 Transfers, locks, backups, groups, quotas, others
- Share transfers (2.77):
POST /share-transfersreturnsauth_keyonce; the share goes toawaiting_transfer;POST /share-transfers/{id}/acceptby another project with the key (wrong key → 400) moves the share and, withclear_access_rules, drops its rules. Response 202 for create and accept. Expired aftertransfer_retention_time(300 s) bydelete_expired_transfers. - Resource locks (2.81):
POST /resource-lockson a share (deleteaction) or an access rule; delete of a locked resource → 403; lock owner or admin can unlock (DELETE /resource-locks/{id}→ 204).lock_contextisuser,adminorservice. - Share backups (2.80, experimental):
POST /share-backups→ cast to the share driver or tomanila-datadepending on the backup type;restoreaction. See 02 for thefail_reasondefect. - 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 withaction_id,detail_id,user_message; expired aftermessage_ttl, 30 days), quota sets (per project, per user, per share type from 2.39;os-quota-setspath until 2.6 only: 404 at 2.7, scenarioquotas-limits), quota class sets, limits, availability zones, services (disable/enable/ensure-shares2.86), scheduler-stats/pools (admin; filter byshare_typefrom 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.
| Method | Path (after /v2/{project_id}) | Handler | Policy rule(s) | Microversion | Request schema(s) (manila/api/schemas/) | Success (code) | Observed (scenarios) |
|---|---|---|---|---|---|---|---|
| GET | /os-availability-zone | manila/api/v2/availability_zones.py:51 | availability_zone:index | 2.0+ | availability_zones.index_request_query | 200 | 200 |
| GET | /availability-zones | manila/api/v2/availability_zones.py:65 | availability_zone:index | 2.7+ | availability_zones.index_request_query | 200 | 200 |
| GET | /os-services | manila/api/v2/services.py:151 | service:index | 2.0+ | — | 200 | |
| PUT | /os-services/{id} | manila/api/v2/services.py:155 | service:update | 2.0+ | — | 200 | |
| GET | /services | manila/api/v2/services.py:170 | service:index | 2.7–2.85 / 2.86–2.92 / 2.93+ | — | 200 | 200, 403 |
| PUT | /services/{id} | manila/api/v2/services.py:182 | service:update | 2.7–2.82 / 2.83+ | — | 200 | 200 |
| POST | /services/ensure-shares | manila/api/v2/services.py:193 | service:ensure_shares | 2.86+ | services.ensure_shares_request_body | 202 | |
| GET | /os-quota-sets/{id}/defaults | manila/api/v2/quota_sets.py:298 | quota_set:show | 2.0+ | — | 200 | |
| PUT | /os-quota-sets/{id} | manila/api/v2/quota_sets.py:302 | quota_set:update | 2.0+ | — | 200 | |
| DELETE | /os-quota-sets/{id} | manila/api/v2/quota_sets.py:311 | quota_set:delete | 2.0+ | — | 200 | |
| GET | /os-quota-sets/{id} | manila/api/v2/quota_sets.py:293 | quota_set:show | 2.0+ | — | 200 | 200, 404 |
| GET | /quota-sets/{id}/defaults | manila/api/v2/quota_sets.py:335 | quota_set:show | 2.7+ | — | 200 | 200 |
| GET | /quota-sets/{id}/detail | manila/api/v2/quota_sets.py:329 | quota_set:show | 2.25+ | — | 200 | 200 |
| PUT | /quota-sets/{id} | manila/api/v2/quota_sets.py:339 | quota_set:update | 2.7+ | — | 200 | 200, 400, 403 |
| DELETE | /quota-sets/{id} | manila/api/v2/quota_sets.py:360 | quota_set:delete | 2.7+ | — | 200 | 202 |
| GET | /quota-sets/{id} | manila/api/v2/quota_sets.py:323 | quota_set:show | 2.7+ | — | 200 | 200 |
| PUT | /os-quota-class-sets/{id} | manila/api/v2/quota_class_sets.py:87 | quota_class_set:update | 2.0+ | quota_class_sets.update_request_body | 200 | |
| GET | /os-quota-class-sets/{id} | manila/api/v2/quota_class_sets.py:81 | quota_class_set:show | 2.0+ | quota_class_sets.show_request_query | 200 | |
| PUT | /quota-class-sets/{id} | manila/api/v2/quota_class_sets.py:135 | quota_class_set:update | 2.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.90 | 200 | |
| GET | /quota-class-sets/{id} | manila/api/v2/quota_class_sets.py:111 | quota_class_set:show | 2.7+ | quota_class_sets.show_request_query@2.7 | 200 | 200 |
| POST | /os-share-manage | manila/api/v2/share_manage.py:134 | share:manage | 2.0+ | — | 200 | |
| POST | /os-share-unmanage/{id}/unmanage | manila/api/v2/share_unmanage.py:41 | share:unmanage | 2.0+ | — | 202 | |
| GET | /shares/detail | manila/api/v2/shares.py:1613 | share:get_all | 2.0+ | — | 200 | 200 |
| POST | /shares | manila/api/v2/shares.py:372 | share:create | 2.0–2.23 / 2.24–2.30 / 2.31–2.47 / 2.48–2.64 / 2.65–2.89 / 2.90+ | — | 200 | 200, 400, 403, 404, 413, 422 |
| GET | /shares | manila/api/v2/shares.py:1586 | share:get_all | 2.0+ | — | 200 | 200, 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:858 | share:allow_access | 2.7+ | — | 200 | 200, 400, 403, 404 |
| POST | /shares/{id}/action {"deny_access"} | manila/api/v2/shares.py:972 | share:deny_access | 2.7+ | — | 200 | 202 |
| POST | /shares/{id}/action {"extend"} | manila/api/v2/shares.py:1062 | share:extend | 2.7+ | shares.extend_request_body_v264@2.64, shares.extend_request_body_v27@2.7 | 200 | 202 |
| POST | /shares/{id}/action {"force_delete"} | manila/api/v2/shares.py:420 | share:force_delete | 2.7+ | shares.force_delete_request_body_v27 | 200 | |
| POST | /shares/{id}/action {"migration_cancel"} | manila/api/v2/shares.py:600 | share:migration_cancel | 2.22–2.95 / 2.96+ (exp.) | shares.migration_cancel_request_body | 200 | |
| POST | /shares/{id}/action {"migration_complete"} | manila/api/v2/shares.py:571 | share:migration_complete | 2.22–2.95 / 2.96+ (exp.) | shares.migration_complete_request_body | 200 | |
| POST | /shares/{id}/action {"migration_get_progress"} | manila/api/v2/shares.py:632 | share:migration_get_progress | 2.22–2.95 / 2.96–2.97 (exp.) | shares.migration_get_progress_request_body | 200 | |
| POST | /shares/{id}/action {"migration_start"} | manila/api/v2/shares.py:489 | share:migration_start | 2.29–2.95 / 2.96+ (exp.) | shares.migration_start_request_body | 200 | |
| 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:852 | share:allow_access | 2.0+ | — | 200 | |
| POST | /shares/{id}/action {"os-deny_access"} | manila/api/v2/shares.py:966 | share:deny_access | 2.0+ | — | 200 | |
| POST | /shares/{id}/action {"os-extend"} | manila/api/v2/shares.py:1052 | share:extend | 2.0+ | shares.extend_request_body | 200 | |
| POST | /shares/{id}/action {"os-force_delete"} | manila/api/v2/shares.py:413 | share:force_delete | 2.0+ | shares.force_delete_request_body | 200 | |
| POST | /shares/{id}/action {"os-reset_status"} | manila/api/v2/shares.py:380 | share:reset_status | 2.0+ | shares.reset_status_request_body@2.0 | 200 | |
| POST | /shares/{id}/action {"os-shrink"} | manila/api/v2/shares.py:1105 | share:shrink | 2.0+ | shares.shrink_request_body | 200 | |
| POST | /shares/{id}/action {"reset_status"} | manila/api/v2/shares.py:397 | share:reset_status | 2.7+ | shares.reset_status_request_body_v27, shares.reset_status_request_body_v27@2.7 | 200 | |
| POST | /shares/{id}/action {"reset_task_state"} | manila/api/v2/shares.py:676 | share:reset_statusshare:reset_task_state | 2.22–2.95 / 2.96+ (exp.) | shares.reset_task_state_request_body | 200 | |
| POST | /shares/{id}/action {"restore"} | manila/api/v2/shares.py:453 | share:restore | 2.69+ | shares.restore_request_body | 200, 202 | 202 |
| POST | /shares/{id}/action {"revert"} | manila/api/v2/shares.py:1409 | share:revert_to_snapshot | 2.27+ | shares.revert_request_body | 200 | 202 |
| POST | /shares/{id}/action {"shrink"} | manila/api/v2/shares.py:1113 | share:shrink | 2.7+ | shares.shrink_request_body_v27@2.7 | 200 | 202 |
| POST | /shares/{id}/action {"soft_delete"} | manila/api/v2/shares.py:428 | share:soft_delete | 2.69+ | shares.soft_delete_request_body | 202 | 202, 403 |
| POST | /shares/{id}/action {"unmanage"} | manila/api/v2/shares.py:1287 | share:unmanage | 2.7+ | shares.unmanage_request_body | 200 | 202 |
| PUT | /shares/{id} | manila/api/v2/shares.py:1425 | share:update | — | 200 | 200 | |
| DELETE | /shares/{id} | manila/api/v2/shares.py:1466 | share:delete | — | 202 | 202, 403, 404 | |
| GET | /shares/{id} | manila/api/v2/shares.py:1413 | share:get | — | 200 | 200, 404 | |
| GET | /shares/{id}/migration-progress | manila/api/v2/shares.py:652 | share:migration_get_progress | 2.98+ | — | 200 | |
| POST | /shares/manage | manila/api/v2/shares.py:1219 | share:manage | 2.7+ | — | 200 | 200 |
| POST | /shares/{resource_id}/metadata | manila/api/v2/shares.py:1673 | share:update_admin_only_metadatashare:update_share_metadata | 2.0+ | — | 200 | 200 |
| PUT | /shares/{resource_id}/metadata | manila/api/v2/shares.py:1690 | share:update_admin_only_metadatashare:update_share_metadata | 2.0+ | — | 200 | 200 |
| POST | /shares/{resource_id}/metadata/{key} | manila/api/v2/shares.py:1706 | share:update_admin_only_metadatashare:update_share_metadata | 2.0+ | — | 200 | |
| GET | /shares/{resource_id}/metadata | manila/api/v2/shares.py:1667 | share:get_share_metadata | 2.0+ | — | 200 | 200 |
| GET | /shares/{resource_id}/metadata/{key} | manila/api/v2/shares.py:1723 | share:get_share_metadata | 2.0+ | — | 200 | |
| DELETE | /shares/{resource_id}/metadata/{key} | manila/api/v2/shares.py:1728 | share:delete_share_metadatashare:update_admin_only_metadata | 2.0+ | — | 200 | 200 |
| GET | /share_instances | manila/api/v2/share_instances.py:68 | share_instance:index | 2.3–2.34 / 2.35–2.68 / 2.69+ | — | 200 | 200 |
| POST | /share_instances/{id}/action {"force_delete"} | manila/api/v2/share_instances.py:63 | share_instance:force_delete | 2.7+ | — | 200 | |
| POST | /share_instances/{id}/action {"os-force_delete"} | manila/api/v2/share_instances.py:58 | share_instance:force_delete | 2.3+ | — | 200 | |
| POST | /share_instances/{id}/action {"os-reset_status"} | manila/api/v2/share_instances.py:48 | share_instance:reset_status | 2.3+ | — | 200 | |
| POST | /share_instances/{id}/action {"reset_status"} | manila/api/v2/share_instances.py:53 | share_instance:reset_status | 2.7+ | — | 200 | |
| GET | /share_instances/{id} | manila/api/v2/share_instances.py:107 | share_instance:show | 2.3+ | — | 200 | |
| GET | /share_instances/{share_instance_id}/export_locations | manila/api/v2/share_instance_export_locations.py:54 | ?:indexshare_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 | ?:showshare_instance:show | 2.9+ | — | 200 | |
| GET | /shares/{share_id}/instances | manila/api/v2/share_instances.py:119 | share_instance:index | 2.3+ | — | 200 | |
| GET | /shares/{share_id}/export_locations | manila/api/v2/share_export_locations.py:94 | ?:index | 2.9–2.46 / 2.47+ | share_export_locations.empty_query_schema | 200 | 200 |
| GET | /shares/{share_id}/export_locations/{export_location_uuid} | manila/api/v2/share_export_locations.py:114 | ?:show | 2.9–2.46 / 2.47+ | share_export_locations.empty_query_schema | 200 | |
| POST | /shares/{share_id}/export_locations/{resource_id}/metadata | manila/api/v2/share_export_locations.py:176 | ?:update_metadatashare_export_location:update_admin_only_metadata | 2.87+ | share_export_locations.create_metadata_response_body | 200 | |
| PUT | /shares/{share_id}/export_locations/{resource_id}/metadata | manila/api/v2/share_export_locations.py:191 | ?:update_metadatashare_export_location:update_admin_only_metadata | 2.87+ | share_export_locations.update_metadata_request_body | 200 | 200, 403 |
| POST | /shares/{share_id}/export_locations/{resource_id}/metadata/{key} | manila/api/v2/share_export_locations.py:205 | ?:update_metadatashare_export_location:update_admin_only_metadata | 2.87+ | share_export_locations.update_metadata_request_body | 200 | |
| GET | /shares/{share_id}/export_locations/{resource_id}/metadata | manila/api/v2/share_export_locations.py:166 | ?:get_metadata | 2.87+ | share_export_locations.empty_query_schema | 200 | 404 |
| GET | /shares/{share_id}/export_locations/{resource_id}/metadata/{key} | manila/api/v2/share_export_locations.py:220 | ?:get_metadata | 2.87+ | share_export_locations.empty_query_schema | 200 | |
| DELETE | /shares/{share_id}/export_locations/{resource_id}/metadata/{key} | manila/api/v2/share_export_locations.py:230 | ?:delete_metadata | 2.87+ | — | 200 | |
| GET | /snapshots/detail | manila/api/v2/share_snapshots.py:577 | share_snapshot:get_all_snapshotsshare_snapshot:list_all_projects [inferred] | 2.0+ | — | 200 | 200 |
| POST | /snapshots | manila/api/v2/share_snapshots.py:118 | share:create_snapshot [inferred] | — | 202 | 202 | |
| GET | /snapshots | manila/api/v2/share_snapshots.py:564 | share_snapshot:get_all_snapshotsshare_snapshot:list_all_projectsshare_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.79 | 200 | |
| POST | /snapshots/{id}/action {"allow_access"} | manila/api/v2/share_snapshots.py:418 | share_snapshot:allow_access | 2.32+ | — | 202 | |
| POST | /snapshots/{id}/action {"deny_access"} | manila/api/v2/share_snapshots.py:459 | share_snapshot:deny_access | 2.32+ | — | 200 | |
| POST | /snapshots/{id}/action {"force_delete"} | manila/api/v2/share_snapshots.py:217 | share_snapshot:force_delete | 2.7+ | — | 200 | |
| POST | /snapshots/{id}/action {"os-force_delete"} | manila/api/v2/share_snapshots.py:212 | share_snapshot:force_delete | 2.0+ | — | 200 | |
| POST | /snapshots/{id}/action {"os-reset_status"} | manila/api/v2/share_snapshots.py:202 | share_snapshot:reset_status | 2.0+ | — | 200 | |
| POST | /snapshots/{id}/action {"reset_status"} | manila/api/v2/share_snapshots.py:207 | share_snapshot:reset_status | 2.7+ | — | 200 | |
| POST | /snapshots/{id}/action {"unmanage"} | manila/api/v2/share_snapshots.py:341 | share_snapshot:unmanage_snapshot | 2.12–2.48 / 2.49+ | — | 200 | |
| PUT | /snapshots/{id} | manila/api/v2/share_snapshots.py:84 | share:snapshot_update | — | 200 | ||
| DELETE | /snapshots/{id} | manila/api/v2/share_snapshots.py:70 | share:delete_snapshot | — | 202 | 202 | |
| GET | /snapshots/{id} | manila/api/v2/share_snapshots.py:591 | share_snapshot:get_snapshotshare_snapshot:list_snapshots_in_deferred_deletion_states [inferred] | 2.0+ | share_snapshots.show_request_query | 200 | 200, 404 |
| POST | /snapshots/{resource_id}/metadata | manila/api/v2/share_snapshots.py:614 | share_snapshot:update_metadata | 2.73+ | — | 200 | |
| PUT | /snapshots/{resource_id}/metadata | manila/api/v2/share_snapshots.py:619 | share_snapshot:update_metadata | 2.73+ | — | 200 | |
| POST | /snapshots/{resource_id}/metadata/{key} | manila/api/v2/share_snapshots.py:624 | share_snapshot:update_metadata | 2.73+ | — | 200 | |
| GET | /snapshots/{resource_id}/metadata | manila/api/v2/share_snapshots.py:608 | share_snapshot:get_metadata | 2.73+ | — | 200 | |
| GET | /snapshots/{resource_id}/metadata/{key} | manila/api/v2/share_snapshots.py:629 | share_snapshot:get_metadata | 2.73+ | — | 200 | |
| DELETE | /snapshots/{resource_id}/metadata/{key} | manila/api/v2/share_snapshots.py:634 | share_snapshot:delete_metadata | 2.73+ | — | 200 | |
| POST | /snapshots/manage | manila/api/v2/share_snapshots.py:302 | share_snapshot:manage_snapshot | 2.12+ | — | 202 | |
| GET | /snapshots/{snapshot_id}/access-list | manila/api/v2/share_snapshots.py:473 | share_snapshot:access_list | 2.32+ | — | 200 | |
| GET | /snapshots/{snapshot_id}/export-locations | manila/api/v2/share_snapshot_export_locations.py:36 | ?:indexshare:get | 2.32+ | — | 200 | 200 |
| GET | /snapshots/{snapshot_id}/export-locations/{export_location_id} | manila/api/v2/share_snapshot_export_locations.py:44 | ?:showshare:get | 2.32+ | — | 200 | |
| GET | /snapshot-instances/detail | manila/api/v2/share_snapshot_instances.py:57 | share_snapshot_instance:detail | 2.19+ | — | 200 | |
| GET | /snapshot-instances | manila/api/v2/share_snapshot_instances.py:51 | share_snapshot_instance:index | 2.19+ | — | 200 | |
| POST | /snapshot-instances/{id}/action {"reset_status"} | manila/api/v2/share_snapshot_instances.py:77 | share_snapshot_instance:reset_status | 2.19+ | — | 200 | |
| GET | /snapshot-instances/{id} | manila/api/v2/share_snapshot_instances.py:39 | share_snapshot_instance:show | 2.19+ | — | 200 | |
| GET | /snapshot-instances/{snapshot_instance_id}/export-locations | manila/api/v2/share_snapshot_instance_export_locations.py:36 | ?:indexshare: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 | ?:showshare:get | 2.32+ | — | 200 | |
| GET | /limits | manila/api/v2/limits.py:51 | — (deeper) | — | 200 | 200 | |
| GET | /security-services/detail | manila/api/v2/security_service.py:87 | security_service:detailsecurity_service:get_all_security_services | — | 200 | 200 | |
| POST | /security-services | manila/api/v2/security_service.py:216 | security_service:create | — | 200 | 200, 400 | |
| GET | /security-services | manila/api/v2/security_service.py:81 | security_service:get_all_security_servicessecurity_service:index | — | 200 | ||
| PUT | /security-services/{id} | manila/api/v2/security_service.py:167 | security_service:update | — | 200 | ||
| DELETE | /security-services/{id} | manila/api/v2/security_service.py:57 | security_service:delete | — | 202 | 202 | |
| GET | /security-services/{id} | manila/api/v2/security_service.py:45 | security_service:show | — | 200 | ||
| GET | /share-networks/detail | manila/api/v2/share_networks.py:271 | share_network:detailshare_network:show_network_details | — | 200 | 200 | |
| POST | /share-networks | manila/api/v2/share_networks.py:355 | share_network:create | — | 200 | 200 | |
| GET | /share-networks | manila/api/v2/share_networks.py:265 | share_network:indexshare_network:show_network_details | — | 200 | ||
| POST | /share-networks/{id}/action {"add_security_service"} | manila/api/v2/share_networks.py:445 | share_network:add_security_service | — | 200 | 200 | |
| POST | /share-networks/{id}/action {"add_security_service_check"} | manila/api/v2/share_networks.py:618 | share_network:add_security_service_check | 2.63+ | — | 202 | |
| POST | /share-networks/{id}/action {"remove_security_service"} | manila/api/v2/share_networks.py:493 | share_network:remove_security_service | — | 200 | 200 | |
| POST | /share-networks/{id}/action {"reset_status"} | manila/api/v2/share_networks.py:704 | share_network:reset_status | 2.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:522 | share_network:update_security_service | 2.63+ | — | 202 | |
| POST | /share-networks/{id}/action {"update_security_service_check"} | manila/api/v2/share_networks.py:573 | share_network:update_security_service_check | 2.63+ | — | 202 | |
| PUT | /share-networks/{id} | manila/api/v2/share_networks.py:277 | share_network:update | — | 200 | ||
| DELETE | /share-networks/{id} | manila/api/v2/share_networks.py:87 | share_network:delete | — | 202 | 202, 409 | |
| GET | /share-networks/{id} | manila/api/v2/share_networks.py:65 | share_network:show | — | 200 | 200 | |
| POST | /share-networks/{share_network_id}/subnets | manila/api/v2/share_network_subnets.py:134 | share_network_subnet:create | 2.51+ | — | 200 | |
| DELETE | /share-networks/{share_network_id}/subnets/{share_network_subnet_id} | manila/api/v2/share_network_subnets.py:74 | share_network_subnet:delete | 2.51+ | — | 202 | |
| GET | /share-networks/{share_network_id}/subnets/{share_network_subnet_id} | manila/api/v2/share_network_subnets.py:203 | share_network_subnet:show | 2.51+ | — | 200 | |
| GET | /share-networks/{share_network_id}/subnets | manila/api/v2/share_network_subnets.py:56 | share_network_subnet:index | 2.51+ | — | 200 | |
| POST | /share-networks/{share_network_id}/subnets/{resource_id}/metadata | manila/api/v2/share_network_subnets.py:230 | share_network_subnet:update_metadata | 2.78+ | — | 200 | |
| PUT | /share-networks/{share_network_id}/subnets/{resource_id}/metadata | manila/api/v2/share_network_subnets.py:245 | share_network_subnet:update_metadata | 2.78+ | — | 200 | |
| POST | /share-networks/{share_network_id}/subnets/{resource_id}/metadata/{key} | manila/api/v2/share_network_subnets.py:260 | share_network_subnet:update_metadata | 2.78+ | — | 200 | |
| GET | /share-networks/{share_network_id}/subnets/{resource_id}/metadata | manila/api/v2/share_network_subnets.py:223 | share_network_subnet:get_metadata | 2.78+ | — | 200 | |
| GET | /share-networks/{share_network_id}/subnets/{resource_id}/metadata/{key} | manila/api/v2/share_network_subnets.py:276 | share_network_subnet:get_metadata | 2.78+ | — | 200 | |
| DELETE | /share-networks/{share_network_id}/subnets/{resource_id}/metadata/{key} | manila/api/v2/share_network_subnets.py:283 | share_network_subnet:delete_metadata | 2.78+ | — | 200 | |
| GET | /share-servers | manila/api/v2/share_servers.py:60 | share_server:index | — | 200 | 200, 403 | |
| POST | /share-servers/{id}/action {"migration_cancel"} | manila/api/v2/share_servers.py:389 | share_server:share_server_migration_cancel | 2.57+ (exp.) | — | 202 | |
| POST | /share-servers/{id}/action {"migration_check"} | manila/api/v2/share_servers.py:429 | share_server:share_server_migration_check | 2.57+ (exp.) | — | 200 | |
| POST | /share-servers/{id}/action {"migration_complete"} | manila/api/v2/share_servers.py:367 | share_server:share_server_migration_complete | 2.57+ (exp.) | — | 200 | |
| POST | /share-servers/{id}/action {"migration_get_progress"} | manila/api/v2/share_servers.py:407 | share_server:share_server_migration_get_progress | 2.57+ (exp.) | — | 200 | |
| POST | /share-servers/{id}/action {"migration_start"} | manila/api/v2/share_servers.py:296 | share_server:share_server_migration_start | 2.57+ (exp.) | — | 202 | |
| POST | /share-servers/{id}/action {"reset_status"} | manila/api/v2/share_servers.py:123 | share_server:reset_status | 2.49+ | — | 200 | |
| POST | /share-servers/{id}/action {"reset_task_state"} | manila/api/v2/share_servers.py:423 | share_server:reset_statusshare_server:share_server_reset_task_state | 2.57+ (exp.) | — | 200 | |
| POST | /share-servers/{id}/action {"unmanage"} | manila/api/v2/share_servers.py:210 | share_server:unmanage_share_server | 2.49+ | — | 200 | |
| DELETE | /share-servers/{id} | manila/api/v2/share_servers.py:98 | share_server:delete | — | 202 | ||
| GET | /share-servers/{id} | manila/api/v2/share_servers.py:72 | share_server:show | — | 200 | 200 | |
| GET | /share-servers/{id}/details | manila/api/v2/share_servers.py:86 | share_server:details | — | 200 | 200 | |
| POST | /share-servers/manage | manila/api/v2/share_servers.py:152 | share_server:manage_share_server | 2.49+ / 2.51+ | — | 202 | |
| GET | /types/default | manila/api/v2/share_types.py:104 | share_type:default | — | 200 | 200 | |
| POST | /types | manila/api/v2/share_types.py:151 | share_type:create | 2.0–2.23 / 2.24+ | — | 200 | 200, 400, 403, 409 |
| GET | /types | manila/api/v2/share_types.py:70 | share_type:index | — | 200 | 200 | |
| POST | /types/{id}/action {"addProjectAccess"} | manila/api/v2/share_types.py:351 | share_type:add_project_access | — | 202 | 202 | |
| POST | /types/{id}/action {"create"} | manila/api/v2/share_types.py:151 | share_type:create | 2.0–2.23 / 2.24+ | — | 200 | |
| POST | /types/{id}/action {"delete"} | manila/api/v2/share_types.py:229 | share_type:delete | — | 202 | ||
| POST | /types/{id}/action {"removeProjectAccess"} | manila/api/v2/share_types.py:367 | share_type:remove_project_access | — | 202 | ||
| POST | /types/{id}/action {"update"} | manila/api/v2/share_types.py:256 | share_type:update | 2.50+ | — | 200 | |
| GET | /types/{id}/share_type_access | manila/api/v2/share_types.py:333 | share_type:list_project_access | — | 200 | 200 | |
| PUT | /types/{id} | manila/api/v2/share_types.py:256 | share_type:update | 2.50+ | — | 200 | 200 |
| DELETE | /types/{id} | manila/api/v2/share_types.py:229 | share_type:delete | — | 202 | 202 | |
| GET | /types/{id} | manila/api/v2/share_types.py:78 | share_type:show | — | 200 | ||
| POST | /types/{type_id}/extra_specs | manila/api/v2/share_types_extra_specs.py:88 | share_types_extra_spec:create | — | 200 | ||
| GET | /types/{type_id}/extra_specs | manila/api/v2/share_types_extra_specs.py:81 | share_types_extra_spec:index | — | 200 | 403 | |
| PUT | /types/{type_id}/extra_specs/{id} | manila/api/v2/share_types_extra_specs.py:110 | share_types_extra_spec:update | — | 200 | ||
| DELETE | /types/{type_id}/extra_specs/{id} | manila/api/v2/share_types_extra_specs.py:143 | share_types_extra_spec:delete | 2.0–2.23 / 2.24+ | — | 200 | 202, 403 |
| GET | /types/{type_id}/extra_specs/{id} | manila/api/v2/share_types_extra_specs.py:131 | share_types_extra_spec:show | — | 200 | ||
| GET | /scheduler-stats/pools | manila/api/v2/scheduler_stats.py:36 | scheduler_stats:pools:index | 2.0–2.22 / 2.23+ | — | 200 | 200 |
| GET | /scheduler-stats/pools/detail | manila/api/v2/scheduler_stats.py:47 | scheduler_stats:pools:detail | 2.0–2.22 / 2.23+ | — | 200 | 200 |
| GET | /share-groups/detail | manila/api/v2/share_groups.py:101 | share_group:get_all | 2.31–2.54 / 2.55+ (exp.) | — | 200 | 200 |
| POST | /share-groups | manila/api/v2/share_groups.py:290 | share_group:create | 2.31–2.54 / 2.55+ (exp.) | — | 202 | 202 |
| GET | /share-groups | manila/api/v2/share_groups.py:93 | share_group:get_all | 2.31–2.54 / 2.55+ (exp.) | — | 200 | 200, 404 |
| PUT | /share-groups/{id} | manila/api/v2/share_groups.py:163 | share_group:update | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| DELETE | /share-groups/{id} | manila/api/v2/share_groups.py:85 | share_group:delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-groups/{id} | manila/api/v2/share_groups.py:64 | share_group:get | 2.31–2.54 / 2.55+ (exp.) | — | 200 | 200 |
| POST | /share-groups/{id}/action {"force_delete"} | manila/api/v2/share_groups.py:329 | share_group:force_delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-groups/{id}/action {"reset_status"} | manila/api/v2/share_groups.py:317 | share_group:reset_status | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-types/default | manila/api/v2/share_group_types.py:95 | share_group_type:default | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-types | manila/api/v2/share_group_types.py:172 | share_group_type:create | 2.31–2.54 / 2.55+ (exp.) | — | 200 | 200 |
| GET | /share-group-types | manila/api/v2/share_group_types.py:54 | share_group_type:index | 2.31–2.54 / 2.55+ (exp.) | — | 200 | 200 |
| POST | /share-group-types/{id}/action {"addProjectAccess"} | manila/api/v2/share_group_types.py:251 | share_group_type:add_project_access | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-types/{id}/action {"create"} | manila/api/v2/share_group_types.py:172 | share_group_type:create | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-types/{id}/action {"delete"} | manila/api/v2/share_group_types.py:196 | share_group_type:delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-types/{id}/action {"removeProjectAccess"} | manila/api/v2/share_group_types.py:276 | share_group_type:remove_project_access | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| DELETE | /share-group-types/{id} | manila/api/v2/share_group_types.py:196 | share_group_type:delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-types/{id} | manila/api/v2/share_group_types.py:75 | share_group_type:show | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-types/{id}/access | manila/api/v2/share_group_types.py:227 | share_group_type:list_project_access | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-types/{id}/group-specs | manila/api/v2/share_group_type_specs.py:71 | share_group_types_spec:index | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-types/{id}/group-specs | manila/api/v2/share_group_type_specs.py:92 | share_group_types_spec:create | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-types/{id}/group-specs/{key} | manila/api/v2/share_group_type_specs.py:138 | share_group_types_spec:show | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| DELETE | /share-group-types/{id}/group-specs/{key} | manila/api/v2/share_group_type_specs.py:157 | share_group_types_spec:delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| PUT | /share-group-types/{id}/group-specs/{key} | manila/api/v2/share_group_type_specs.py:117 | share_group_types_spec:update | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-snapshots/detail | manila/api/v2/share_group_snapshots.py:102 | share_group_snapshot:get_all | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-snapshots | manila/api/v2/share_group_snapshots.py:206 | share_group_snapshot:create | 2.31–2.54 / 2.55+ (exp.) | — | 202 | |
| GET | /share-group-snapshots | manila/api/v2/share_group_snapshots.py:92 | share_group_snapshot:get_all | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-snapshots/{id}/members | manila/api/v2/share_group_snapshots.py:228 | share_group_snapshot:get | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-snapshots/{id}/action {"force_delete"} | manila/api/v2/share_group_snapshots.py:258 | share_group_snapshot:force_delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| POST | /share-group-snapshots/{id}/action {"reset_status"} | manila/api/v2/share_group_snapshots.py:246 | share_group_snapshot:reset_status | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| PUT | /share-group-snapshots/{id} | manila/api/v2/share_group_snapshots.py:162 | share_group_snapshot:update | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| DELETE | /share-group-snapshots/{id} | manila/api/v2/share_group_snapshots.py:84 | share_group_snapshot:delete | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-group-snapshots/{id} | manila/api/v2/share_group_snapshots.py:62 | share_group_snapshot:get | 2.31–2.54 / 2.55+ (exp.) | — | 200 | |
| GET | /share-replicas/detail | manila/api/v2/share_replicas.py:77 | share_replica:get_all | 2.11–2.55 / 2.56+ (exp.) | — | 200 | 200 |
| POST | /share-replicas | manila/api/v2/share_replicas.py:173 | share_replica:create | 2.11–2.55 / 2.56–2.66 / 2.67–2.94 / 2.95+ (exp.) | — | 202 | 202, 403 |
| GET | /share-replicas | manila/api/v2/share_replicas.py:66 | share_replica:get_all | 2.11–2.55 / 2.56+ (exp.) | — | 200 | |
| POST | /share-replicas/{id}/action {"force_delete"} | manila/api/v2/share_replicas.py:374 | share_replica:force_delete | 2.11–2.55 / 2.56+ (exp.) | — | 200 | |
| POST | /share-replicas/{id}/action {"promote"} | manila/api/v2/share_replicas.py:293 | share_replica:promote | 2.11–2.55 / 2.56–2.74 / 2.75+ (exp.) | — | 202 | 202 |
| POST | /share-replicas/{id}/action {"reset_replica_state"} | manila/api/v2/share_replicas.py:390 | share_replica:reset_replica_stateshare_replica:reset_status | 2.11–2.55 / 2.56+ (exp.) | — | 200 | |
| POST | /share-replicas/{id}/action {"reset_status"} | manila/api/v2/share_replicas.py:359 | share_replica:reset_status | 2.11–2.55 / 2.56+ (exp.) | — | 200 | |
| POST | /share-replicas/{id}/action {"resync"} | manila/api/v2/share_replicas.py:407 | share_replica:resync | 2.11–2.55 / 2.56+ (exp.) | — | 202 | |
| DELETE | /share-replicas/{id} | manila/api/v2/share_replicas.py:264 | share_replica:delete | 2.11–2.55 / 2.56+ (exp.) | — | 200 | 202 |
| GET | /share-replicas/{id} | manila/api/v2/share_replicas.py:143 | share_replica:show | 2.11–2.55 / 2.56+ (exp.) | — | 200 | |
| POST | /share-replicas/{resource_id}/metadata | manila/api/v2/share_replicas.py:94 | share_replica:update_metadata | 2.95+ | — | 200 | |
| PUT | /share-replicas/{resource_id}/metadata | manila/api/v2/share_replicas.py:99 | share_replica:update_metadata | 2.95+ | — | 200 | |
| POST | /share-replicas/{resource_id}/metadata/{key} | manila/api/v2/share_replicas.py:104 | share_replica:update_metadata | 2.95+ | — | 200 | |
| GET | /share-replicas/{resource_id}/metadata | manila/api/v2/share_replicas.py:88 | share_replica:get_metadata | 2.95+ | — | 200 | |
| GET | /share-replicas/{resource_id}/metadata/{key} | manila/api/v2/share_replicas.py:109 | share_replica:get_metadata | 2.95+ | — | 200 | |
| DELETE | /share-replicas/{resource_id}/metadata/{key} | manila/api/v2/share_replicas.py:114 | share_replica:delete_metadata | 2.95+ | — | 200 | |
| GET | /share-transfers/detail | manila/api/v2/share_transfer.py:64 | share_transfer:get_all | 2.77+ | — | 200 | |
| POST | /share-transfers | manila/api/v2/share_transfer.py:102 | share_transfer:create | 2.77+ | — | 202 | 202 |
| GET | /share-transfers | manila/api/v2/share_transfer.py:59 | share_transfer:get_all | 2.77+ | — | 200 | |
| POST | /share-transfers/{id}/accept | manila/api/v2/share_transfer.py:140 | share_transfer:accept | 2.77+ | — | 202 | 202, 400 |
| DELETE | /share-transfers/{id} | manila/api/v2/share_transfer.py:189 | share_transfer:delete | 2.77+ | — | 200 | |
| GET | /share-transfers/{id} | manila/api/v2/share_transfer.py:49 | share_transfer:get [inferred] | 2.77+ | — | 200 | 200, 404 |
| GET | /share-replicas/{share_replica_id}/export-locations | manila/api/v2/share_replica_export_locations.py:44 | ?:index | 2.47–2.55 / 2.56+ (exp.) | — | 200 | 200 |
| GET | /share-replicas/{share_replica_id}/export-locations/{export_location_uuid} | manila/api/v2/share_replica_export_locations.py:66 | ?:show | 2.47–2.55 / 2.56+ (exp.) | — | 200 | |
| GET | /messages | manila/api/v2/messages.py:91 | message:get_all | 2.37+ | messages.index_request_query@2.37, messages.index_request_query_v252@2.52 | 200 | 200 |
| DELETE | /messages/{id} | manila/api/v2/messages.py:70 | message:delete | 2.37+ | — | 204 | |
| GET | /messages/{id} | manila/api/v2/messages.py:55 | message:get | 2.37+ | messages.show_request_query | 200 | |
| GET | /share-access-rules | manila/api/v2/share_accesses.py:140 | share_access_rule:index | 2.45–2.81 / 2.82+ | — | 200 | 200 |
| PUT | /share-access-rules/{id} | manila/api/v2/share_accesses.py:149 | share_access_rule:update | 2.88+ | — | 200 | |
| GET | /share-access-rules/{id} | manila/api/v2/share_accesses.py:45 | share_access_rule:get | 2.45+ | — | 200 | 200 |
| PUT | /share-access-rules/{access_id}/metadata | manila/api/v2/share_access_metadata.py:40 | share_access_metadata:update | 2.45+ | — | 200 | 200 |
| DELETE | /share-access-rules/{access_id}/metadata/{key} | manila/api/v2/share_access_metadata.py:52 | share_access_metadata:delete | 2.45+ | — | 200 | |
| GET | /share-backups/detail | manila/api/v2/share_backups.py:53 | share_backup:get_allshare_backup:get_all_project | 2.80+ (exp.) | — | 200 | |
| POST | /share-backups | manila/api/v2/share_backups.py:145 | share_backup:create | 2.80+ (exp.) | — | 202 | 202 |
| GET | /share-backups | manila/api/v2/share_backups.py:48 | share_backup:get_allshare_backup:get_all_project | 2.80+ (exp.) | — | 200 | |
| POST | /share-backups/{id}/action {"reset_status"} | manila/api/v2/share_backups.py:270 | share_backup:reset_status | 2.80+ (exp.) | — | 200 | |
| POST | /share-backups/{id}/action {"restore"} | manila/api/v2/share_backups.py:227 | share_backup:restore | 2.80–2.90 / 2.91+ (exp.) | — | 202 | |
| PUT | /share-backups/{id} | manila/api/v2/share_backups.py:242 | share_backup:update | 2.80+ (exp.) | — | 200 | |
| DELETE | /share-backups/{id} | manila/api/v2/share_backups.py:183 | share_backup:delete | 2.80+ (exp.) | — | 202 | |
| GET | /share-backups/{id} | manila/api/v2/share_backups.py:130 | share_backup:get | 2.80+ (exp.) | — | 200 | 200 |
| POST | /resource-locks | manila/api/v2/resource_locks.py:167 | resource_lock:create | 2.81+ | resource_locks.create_request_body | 200 | 200, 400 |
| GET | /resource-locks | manila/api/v2/resource_locks.py:100 | resource_lock:get_all | 2.81+ | resource_locks.index_request_query | 200 | 200 |
| PUT | /resource-locks/{id} | manila/api/v2/resource_locks.py:195 | resource_lock:update | 2.81+ | resource_locks.update_request_body | 200 | |
| DELETE | /resource-locks/{id} | manila/api/v2/resource_locks.py:154 | resource_lock:delete | 2.81+ | — | 204 | 204 |
| GET | /resource-locks/{id} | manila/api/v2/resource_locks.py:141 | resource_lock:get | 2.81+ | resource_locks.show_request_query | 200 | |
| POST | /qos-types | manila/api/v2/qos_types.py:107 | qos_type:create | 2.94+ | — | 200 | |
| GET | /qos-types | manila/api/v2/qos_types.py:63 | qos_type:index | 2.94+ | — | 200 | |
| PUT | /qos-types/{id} | manila/api/v2/qos_types.py:175 | qos_type:update | 2.94+ | — | 200 | |
| DELETE | /qos-types/{id} | manila/api/v2/qos_types.py:150 | qos_type:delete | 2.94+ | — | 204 | |
| GET | /qos-types/{id} | manila/api/v2/qos_types.py:94 | qos_type:show | 2.94+ | — | 200 | |
| POST | /qos-types/{id}/specs | manila/api/v2/qos_type_specs.py:74 | qos_type_specs:create | 2.94+ | — | 200 | |
| GET | /qos-types/{id}/specs/{key} | manila/api/v2/qos_type_specs.py:61 | qos_type_specs:show | 2.94+ | — | 200 | |
| GET | /qos-types/{id}/specs | manila/api/v2/qos_type_specs.py:53 | qos_type_specs:index | 2.94+ | — | 200 | |
| DELETE | /qos-types/{id}/specs/{key} | manila/api/v2/qos_type_specs.py:121 | qos_type_specs:delete | 2.94+ | — | 204 | |
| PUT | /qos-types/{id}/specs/{key} | manila/api/v2/qos_type_specs.py:96 | qos_type_specs:update | 2.94+ | — | 200 | |
| POST | /extensions | manila/api/extensions.py:110 | — (deeper) | — | 200 | ||
| GET | /extensions | manila/api/extensions.py:92 | — (deeper) | — | 200 | 200 | |
| 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.