Interactions — manila — branch stable/2026.2
Branch
stable/2026.2@4fbc4b4f3688— repository https://opendev.org/openstack/manila — analysed on 2026-10-29
Manila talks to five kinds of systems: its SQL database (every process), RabbitMQ (RPC between the four processes, and notifications), Keystone (tokens, through keystonemiddleware), other OpenStack services (Nova, Neutron, Cinder, Glance, Barbican — only for some drivers and features), and the storage back ends (driver-specific protocols: SSH, REST, librados…). The RPC frames below were recorded by the client scenarios ([_rewrite/rpc-frames_stable-2026.2.json](_rewrite/rpc-frames_stable-2026.2.json), 247 frames).
RabbitMQ
Topology
oslo.messaging, driver selected by [DEFAULT]/transport_url. Manila never calls rpc.set_defaults (manila/rpc.py:82-83 is unused), so the **control exchange is the oslo.messaging default openstack**.
| Exchange | Type | Routing key / queue | Producer | Consumer |
|---|---|---|---|---|
openstack | topic | manila-scheduler ([DEFAULT]/scheduler_topic, manila/common/config.py:59-61) | manila-api, manila-share | every manila-scheduler |
openstack | topic | manila-share.<host>@<backend> ([DEFAULT]/share_topic + server, manila/common/config.py:62-64) | manila-api, manila-scheduler, other manila-share | the manila-share service of that back end |
openstack | topic | manila-data ([DEFAULT]/data_topic, manila/common/config.py:65-67) | manila-api, manila-share | manila-data |
manila-scheduler_fanout | fanout | all schedulers | manila-share (update_service_capabilities) | every manila-scheduler |
manila-share_fanout | fanout | all share services | manila-scheduler (publish_service_capabilities) | every manila-share |
notifications exchange (openstack, topic notifications.<priority>) | topic | [oslo_messaging_notifications]/topics | manila-api, manila-scheduler, manila-share | Ceilometer and other listeners |
Each manila-share process runs one service per back end of [DEFAULT]/enabled_share_backends, with host <[DEFAULT]/host>@<backend> (manila/cmd/share.py:44-51); the RPC server listens on manila-share.<host>@<backend> (manila/service.py:160-163). The share-side RPC client strips the pool part of a host (host@backend#pool → host@backend) before sending (manila/share/rpcapi.py:308).
Serialisation: RequestContextSerializer wraps the request context (keys auth_token, user_id, project_id, roles, is_admin, request_id, read_deleted, service_catalog, quota_class, remote_address, timestamp… — 25 keys recorded) and passes arguments through the oslo JSON codec; database models are converted to dictionaries by jsonutils.to_primitive (manila/rpc.py:104-140). There are no versioned objects: the receiving manager gets plain dicts and usually re-reads the rows from the database.
RPC methods
RPC_API_VERSION: share 1.30 (manila/share/manager.py:290, client cap manila/share/rpcapi.py:102), scheduler 1.11 (manila/scheduler/manager.py:71, manila/scheduler/rpcapi.py:49), data 1.1 (manila/data/manager.py:118, manila/data/rpcapi.py:48). "(observed)" marks the methods seen in the recorded frames.
| Method | Mode | Version | Topic | Arguments | Client (*/rpcapi.py) | Server method |
|---|---|---|---|---|---|---|
migration_start | cast | 1.0 | manila-data | share_id, ignore_list, share_instance_id, dest_share_instance_id, connection_info_src, connection_info_dest | manila/data/rpcapi.py:54 | manila/data/manager.py:136 |
data_copy_cancel | call | 1.0 | manila-data | share_id | manila/data/rpcapi.py:66 | manila/data/manager.py:207 |
data_copy_get_progress | call | 1.0 | manila-data | share_id | manila/data/rpcapi.py:70 | manila/data/manager.py:219 |
create_backup (observed) | cast | 1.1 | manila-data | backup | manila/data/rpcapi.py:75 | manila/data/manager.py:393 |
delete_backup | cast | 1.1 | manila-data | backup | manila/data/rpcapi.py:79 | manila/data/manager.py:558 |
restore_backup | cast | 1.1 | manila-data | backup, share_id | manila/data/rpcapi.py:83 | manila/data/manager.py:629 |
create_share_instance (observed) | cast | 1.2 | manila-scheduler | request_spec, filter_properties | manila/scheduler/rpcapi.py:61 | manila/scheduler/manager.py:120 |
update_service_capabilities (observed) | fanout cast | 1.10 | manila-scheduler | service_name, host, capabilities, timestamp | manila/scheduler/rpcapi.py:71 | manila/scheduler/manager.py:106 |
get_pools (observed) | call | 1.9 | manila-scheduler | filters, cached | manila/scheduler/rpcapi.py:80 | manila/scheduler/manager.py:136 |
create_share_group (observed) | cast | 1.8 | manila-scheduler | share_group_id, request_spec, filter_properties | manila/scheduler/rpcapi.py:102 | manila/scheduler/manager.py:263 |
migrate_share_to_host | cast | 1.7 | manila-scheduler | share_id, host, force_host_assisted_migration, preserve_metadata, writable, nondisruptive, preserve_snapshots, new_share_network_id, new_share_type_id, request_spec, filter_properties | manila/scheduler/rpcapi.py:116 | manila/scheduler/manager.py:166 |
create_share_replica (observed) | cast | 1.5 | manila-scheduler | request_spec, filter_properties | manila/scheduler/rpcapi.py:134 | manila/scheduler/manager.py:305 |
manage_share (observed) | cast | 1.6 | manila-scheduler | share_id, driver_options, request_spec, filter_properties | manila/scheduler/rpcapi.py:143 | manila/scheduler/manager.py:140 |
extend_share (observed) | cast | 1.11 | manila-scheduler | manila/scheduler/rpcapi.py:161 | manila/scheduler/manager.py:336 | |
create_share_instance (observed) | cast | 1.4 | manila-share, server host@backend | share_instance_id, request_spec, filter_properties, snapshot_id | manila/share/rpcapi.py:110 | manila/share/manager.py:2184 |
manage_share (observed) | cast | 1.1 | manila-share, server host@backend | share_id, driver_options | manila/share/rpcapi.py:120 | manila/share/manager.py:3080 |
unmanage_share (observed) | cast | 1.1 | manila-share, server host@backend | share_id | manila/share/rpcapi.py:128 | manila/share/manager.py:3293 |
manage_snapshot | cast | 1.9 | manila-share, server host@backend | snapshot_id, driver_options | manila/share/rpcapi.py:134 | manila/share/manager.py:3196 |
unmanage_snapshot | cast | 1.9 | manila-share, server host@backend | snapshot_id | manila/share/rpcapi.py:142 | manila/share/manager.py:3390 |
manage_share_server | cast | 1.19 | manila-share, server host@backend | share_server_id, identifier, driver_opts | manila/share/rpcapi.py:150 | manila/share/manager.py:3456 |
unmanage_share_server | cast | 1.19 | manila-share, server host@backend | share_server_id, force | manila/share/rpcapi.py:158 | manila/share/manager.py:3577 |
revert_to_snapshot (observed) | cast | 1.18 | manila-share, server host@backend | snapshot_id, reservations | manila/share/rpcapi.py:165 | manila/share/manager.py:3627 |
delete_share_instance (observed) | cast | 1.27 | manila-share, server host@backend | share_instance_id, force, deferred_delete | manila/share/rpcapi.py:174 | manila/share/manager.py:3777 |
migration_start | cast | 1.15 | manila-share, server host@backend | share_id, dest_host, force_host_assisted_migration, preserve_metadata, writable, nondisruptive, preserve_snapshots, new_share_network_id, new_share_type_id | manila/share/rpcapi.py:186 | manila/share/manager.py:1664 |
share_server_migration_start | cast | 1.21 | manila-share, server host@backend | share_server_id, dest_host, writable, nondisruptive, preserve_snapshots, new_share_network_id | manila/share/rpcapi.py:204 | manila/share/manager.py:6374 |
share_server_migration_check | call | 1.21 | manila-share, server host@backend | share_server_id, dest_host, writable, nondisruptive, preserve_snapshots, new_share_network_id | manila/share/rpcapi.py:219 | manila/share/manager.py:6282 |
share_server_migration_cancel | cast | 1.21 | manila-share, server host@backend | src_share_server_id, dest_share_server_id | manila/share/rpcapi.py:233 | manila/share/manager.py:6768 |
share_server_migration_get_progress | call | 1.21 | manila-share, server host@backend | src_share_server_id, dest_share_server_id | manila/share/rpcapi.py:243 | manila/share/manager.py:6839 |
share_server_migration_complete | cast | 1.21 | manila-share, server host@backend | src_share_server_id, dest_share_server_id | manila/share/rpcapi.py:252 | manila/share/manager.py:6524 |
connection_get_info | call | 1.12 | manila-share, server host@backend | share_instance_id | manila/share/rpcapi.py:260 | manila/share/manager.py:1250 |
delete_share_server | cast | 1.0 | manila-share, server host@backend | share_server | manila/share/rpcapi.py:267 | manila/share/manager.py:4892 |
create_snapshot (observed) | cast | 1.0 | manila-share, server host@backend | share_id, snapshot_id | manila/share/rpcapi.py:274 | manila/share/manager.py:4116 |
delete_snapshot (observed) | cast | 1.27 | manila-share, server host@backend | snapshot_id, force, deferred_delete | manila/share/rpcapi.py:283 | manila/share/manager.py:4192 |
create_replicated_snapshot | cast | 1.11 | manila-share, server host@backend | snapshot_id, share_id | manila/share/rpcapi.py:292 | manila/share/manager.py:4311 |
delete_replicated_snapshot | cast | 1.11 | manila-share, server host@backend | snapshot_id, share_id, force | manila/share/rpcapi.py:301 | manila/share/manager.py:4445 |
update_access (observed) | cast | 1.14 | manila-share, server host@backend | share_instance_id | manila/share/rpcapi.py:310 | manila/share/manager.py:4648 |
update_access_for_instances | cast | 1.21 | manila-share, server host@backend | share_instance_ids, share_server_id | manila/share/rpcapi.py:317 | manila/share/manager.py:4656 |
publish_service_capabilities (observed) | fanout cast | 1.0 | manila-share, server host@backend | manila/share/rpcapi.py:323 | manila/share/manager.py:4711 | |
transfer_accept (observed) | call | 1.25 | manila-share, server host@backend | manila/share/rpcapi.py:335 | manila/share/manager.py:4053 | |
extend_share (observed) | cast | 1.2 | manila-share, server host@backend | share_id, new_size, reservations | manila/share/rpcapi.py:340 | manila/share/manager.py:5002 |
shrink_share (observed) | cast | 1.3 | manila-share, server host@backend | share_id, new_size | manila/share/rpcapi.py:349 | manila/share/manager.py:5062 |
create_share_group (observed) | cast | 1.16 | manila-share, server host@backend | share_group_id | manila/share/rpcapi.py:357 | manila/share/manager.py:5166 |
delete_share_group | cast | 1.16 | manila-share, server host@backend | share_group_id | manila/share/rpcapi.py:363 | manila/share/manager.py:5324 |
create_share_group_snapshot | cast | 1.16 | manila-share, server host@backend | share_group_snapshot_id | manila/share/rpcapi.py:369 | manila/share/manager.py:5362 |
delete_share_group_snapshot | cast | 1.16 | manila-share, server host@backend | share_group_snapshot_id | manila/share/rpcapi.py:376 | manila/share/manager.py:5460 |
create_share_replica (observed) | cast | 1.8 | manila-share, server host@backend | share_replica_id, request_spec, filter_properties, share_id | manila/share/rpcapi.py:385 | manila/share/manager.py:2486 |
delete_share_replica (observed) | cast | 1.8 | manila-share, server host@backend | share_replica_id, share_id, force | manila/share/rpcapi.py:395 | manila/share/manager.py:2671 |
promote_share_replica (observed) | cast | 1.24 | manila-share, server host@backend | share_replica_id, share_id, quiesce_wait_time | manila/share/rpcapi.py:405 | manila/share/manager.py:2768 |
update_share_replica | cast | 1.8 | manila-share, server host@backend | share_replica_id, share_id | manila/share/rpcapi.py:414 | manila/share/manager.py:2953 |
migration_complete | cast | 1.12 | manila-share, server host@backend | src_instance_id, dest_instance_id | manila/share/rpcapi.py:423 | manila/share/manager.py:1907 |
migration_cancel | cast | 1.12 | manila-share, server host@backend | src_instance_id, dest_instance_id | manila/share/rpcapi.py:431 | manila/share/manager.py:2071 |
migration_get_progress | call | 1.12 | manila-share, server host@backend | src_instance_id, dest_instance_id | manila/share/rpcapi.py:440 | manila/share/manager.py:2139 |
provide_share_server | call | 1.12 | manila-share, server host@backend | share_instance_id, share_network_id, snapshot_id | manila/share/rpcapi.py:449 | manila/share/manager.py:1083 |
create_share_server | cast | 1.20 | manila-share, server host@backend | share_server_id, share_instance_id | manila/share/rpcapi.py:458 | manila/share/manager.py:1064 |
snapshot_update_access | cast | 1.17 | manila-share, server host@backend | snapshot_instance_id | manila/share/rpcapi.py:466 | manila/share/manager.py:5628 |
update_share_network_security_service | cast | 1.22 | manila-share, server host@backend | share_network_id, new_security_service_id, current_security_service_id | manila/share/rpcapi.py:475 | manila/share/manager.py:7029 |
check_update_share_network_security_service | cast | 1.22 | manila-share, server host@backend | share_network_id, new_security_service_id, current_security_service_id | manila/share/rpcapi.py:487 | manila/share/manager.py:7037 |
check_update_share_server_network_allocations | cast | 1.23 | manila-share, server host@backend | share_network_id, new_share_network_subnet | manila/share/rpcapi.py:499 | manila/share/manager.py:7121 |
update_share_server_network_allocations | cast | 1.23 | manila-share, server host@backend | share_network_id, new_share_network_subnet_id | manila/share/rpcapi.py:510 | manila/share/manager.py:7229 |
create_backup (observed) | cast | 1.26 | manila-share, server host@backend | backup | manila/share/rpcapi.py:519 | manila/share/manager.py:5645 |
delete_backup | cast | 1.26 | manila-share, server host@backend | backup | manila/share/rpcapi.py:526 | manila/share/manager.py:5710 |
restore_backup | cast | 1.26 | manila-share, server host@backend | backup, share_id | manila/share/rpcapi.py:533 | manila/share/manager.py:5747 |
update_share_from_metadata | cast | 1.28 | manila-share, server host@backend | share_id, metadata | manila/share/rpcapi.py:541 | manila/share/manager.py:7301 |
update_share_network_subnet_from_metadata | cast | 1.30 | manila-share, server host@backend | share_network_id, share_network_subnet_id, share_server_id, metadata | manila/share/rpcapi.py:553 | manila/share/manager.py:7324 |
ensure_driver_resources | cast | 1.29 | manila-share, server host@backend | skip_backend_info_check | manila/share/rpcapi.py:564 | manila/share/manager.py:427 |
The share-side methods not listed with "(observed)" (snapshot access, replicas' snapshots, share server migration, network updates, backups to the driver…) follow the same pattern: a cast to manila-share.<host>@<backend> with ids, the manager re-reading the rows. The only synchronous calls are get_pools (scheduler), connection_get_info, migration_get_progress, share_server_migration_check|get_progress, get_share_server_network_info, check_update_share_server_network_allocations, transfer_accept (manila/share/rpcapi.py:335) and the data service's data_copy_*: they block the API worker up to [DEFAULT]/rpc_response_timeout.
Notifications
Sent only when [oslo_messaging_notifications]/driver is set (manila/utils.py:597-604), at INFO priority unless stated, with publisher_id = "<service>.<host>" (manila/rpc.py:165-169).
| event_type | Priority | Emitted when | Payload | Emitted at |
|---|---|---|---|---|
share.create.start / .end | INFO | share manager starts / finishes create_share_instance | share_id, user_id, project_id, snapshot_id, share_group_id, size, name, description, proto, is_public, availability_zone, host, status, share_type_id, share_type (manila/share/utils.py:130-150) | manila/share/manager.py:2195, manila/share/manager.py:2441 |
share.delete.start / .end | INFO | delete_share_instance (also .end from deferred deletion) | same | manila/share/manager.py:3783, manila/share/manager.py:3912, manila/share/manager.py:3997 |
share.extend.start / .end, share.shrink.start / .end | INFO | resize in the share manager | same | manila/share/manager.py:5010, manila/share/manager.py:5057, manila/share/manager.py:5074, manila/share/manager.py:5162 |
share.consumed.size | INFO | update_share_usage_size (when enable_gathering_share_usage_size) | same + used_size, gathered_at | manila/share/manager.py:5868 |
share.transfer.create.start / .end, .delete.*, .accept.* | INFO | share transfers (API process) | same | manila/transfer/api.py:93-101, manila/transfer/api.py:203-226 |
scheduler.<method> | ERROR | scheduling failure (create_share_instance, create_share_replica, migrate_share_to_host…) | share_id, state, method, reason | manila/scheduler/manager.py:209-236 |
share_type.create|delete, share_type_extra_specs.create|update|delete | INFO / ERROR | share type API | share_types, type_id, specs | manila/api/v2/share_types.py:50-57, manila/api/v2/share_types_extra_specs.py:104-106 |
Sample frames
update_access, cast from manila-api to the share service of the share's host, as recorded (the oslo.messaging envelope {"oslo.version": "2.0", "oslo.message": "<JSON below as a string>"} is added by the driver):
{
"method": "update_access",
"args": {"share_instance_id": "fa903622-de80-4782-b693-7e7505bd6d46"},
"version": "1.14",
"_unique_id": "…", "_context_user_id": "de5e0000000000000000000000005e00",
"_context_project_id": "de0000000000000000000000000000de", "_context_roles": ["member", "reader"],
"_context_request_id": "req-…", "_context_auth_token": "…", "_context_is_admin": false,
"_context_read_deleted": "no", "_context_service_catalog": null
}
routing key manila-share.node-1@alpha, exchange openstack.
update_service_capabilities, fanout cast from each manila-share every periodic_interval (60 s) to manila-scheduler_fanout (manila/scheduler/rpcapi.py:67-76): service_name: "share", host: "node-1@alpha", timestamp, and capabilities = the driver's _stats (manila/share/driver.py:1344-1406): share_backend_name, driver_handles_share_servers, vendor_name, driver_version, storage_protocol, total_capacity_gb, free_capacity_gb, reserved_percentage, reserved_snapshot_percentage, reserved_share_extend_percentage, qos, pools: [{pool_name, total_capacity_gb, free_capacity_gb, …}], snapshot_support, create_share_from_snapshot_support, revert_to_snapshot_support, mount_snapshot_support, replication_domain, replication_type, filter_function, goodness_function, ipv4_support, ipv6_support, share_group_stats… The full recorded payload is in rpc-frames_stable-2026.2.json.
Database
Tables
SQLAlchemy models in manila/db/sqlalchemy/models.py, schema by alembic migrations (manila/db/migrations/alembic/versions/, head afc3b5e1f406, 76 revisions). Accessed by every process through manila/db/sqlalchemy/api.py (oslo.db enginefacade). 53 tables ([_rewrite/schema-sqlite-migrated_stable-2026.2.sql](_rewrite/schema-sqlite-migrated_stable-2026.2.sql)); almost all are soft-deleted (deleted, deleted_at).
| Table | Role | Written by | Read by |
|---|---|---|---|
shares, share_metadata | the user-visible share and its metadata | API (create/update/delete), share manager (size, task_state) | all |
share_instances, share_instance_metadata | physical copy of a share on a back end: host, status, share_server_id, replica_state, access_rules_status | API (create), scheduler (host), share manager (status) | all |
share_instance_export_locations, share_instance_export_locations_metadata | export paths (path, is_admin_only, preferred…) | share manager (export_locations_update, manila/db/sqlalchemy/api.py:4833-4900) | API |
share_access_map, share_instance_access_map, share_access_rules_metadata | access rules and their per-instance state | API (allow/deny), share manager (states) | share manager, API |
share_snapshots, share_snapshot_instances, share_snapshot_instance_export_locations, share_snapshot_access_map, share_snapshot_instance_access_map, share_snapshot_metadata | snapshots, their instances, exports and access | API, share manager | all |
share_types, share_type_extra_specs, share_type_projects | share types | API (admin) | API, scheduler |
share_group_types, share_group_type_specs, share_group_type_projects, share_group_type_share_type_mappings, share_groups, share_group_share_type_mappings, share_group_snapshots | share groups | API, scheduler, share manager | all |
share_networks, share_network_subnets, share_network_subnet_metadata, security_services, share_network_security_service_association | tenant networking (DHSS=True) | API | share manager |
share_servers, share_server_backend_details, share_server_share_network_subnet_mappings, network_allocations | share servers and their ports | share manager | API (admin), share manager |
services, availability_zones | service registry and heartbeats (report_count, updated_at), AZ names | every service (report_state, manila/service.py:282-325) | scheduler (service_is_up), API |
quotas, quota_classes, quota_usages, reservations, project_user_quotas, project_share_type_quotas | quotas: limits, usage, two-phase reservations | API (reserve/commit/rollback), share manager (commit on extend), scheduler (_expire_reservations) | API |
messages | user messages (§ 02.3) | scheduler, share manager | API; purged by scheduler |
transfers | share transfers | API | API; expired by share manager |
resource_locks | resource locks (2.81) | API | API, share API layer |
share_backups | backups | API, share manager, data manager | API |
drivers_private_data, backend_info, async_operation_data | driver key/value store, back-end info hash (ensure_shares skip), async operation state | share manager / drivers | share manager |
encryption_refs, qos_types, qos_type_specs | encryption key references (2.90), QoS types (2.94) | API | API, scheduler |
alembic_version | migration head | manila-manage db sync | — |
Notable transactions
- Quota reservation (
manila/db/sqlalchemy/api.py:1205-1475):quota_reservelocks the user's and project's usage rows withSELECT … FOR UPDATE(manila/db/sqlalchemy/api.py:1158-1184), refreshes them ifuntil_refresh/max_agesay so, checks the deltas against the limits and insertsreservationsrows (expire afterreservation_expire, 86400 s,manila/quota.py:84);reservation_commit/reservation_rollback(manila/db/sqlalchemy/api.py:1478-1530) move the reserved amounts toin_useor back, also underFOR UPDATE(manila/db/sqlalchemy/api.py:1472). These functions retry deadlocks 5 times (@oslo_db_api.wrap_db_retry,manila/db/sqlalchemy/api.py:1233). - Share create:
share_create+share_instance_createare two transactions; the quota commit is between them (manila/share/api.py:516-528), with a compensatingshare_delete+ rollback on failure. - Access rules: the state changes of
share_instance_access_mapare serialised per share instance by a process-local lockutils.synchronized("locked_access_rules_operation_by_share_instance_<id>", external=True)(manila/share/access.py:28-55) — an oslo.concurrency file lock in[oslo_concurrency]/lock_path, so only processes on the same host are serialised. - Distributed locks: replica and some share operations use tooz (
manila/coordination.py:42-160,[coordination]/backend_url, defaultfile://$state_path) through@coordination.synchronized(manila/share/manager.py:226,manila/share/manager.py:246). With the default file backend these locks are host-local: running two manila-share services for the same back end on two hosts needs a real tooz backend (etcd, Redis…).
Outbound REST calls
All use keystoneauth sessions built from a configuration group (manila/common/client_auth.py:34-99); only admin clients exist: a non-admin context raises "Client (<group>) is not flagged as admin" (manila/common/client_auth.py:87-96). None is used on the path of a DHSS=False back end except Barbican for encryption.
| Target service | Calls | When | Authentication | Defined at |
|---|---|---|---|---|
| Keystone | token validation | every API request (keystonemiddleware authtoken, [keystone_authtoken]) | service user | etc/manila/api-paste.ini:55-56 |
Nova (compute, microversion [nova]/api_microversion = 2.10) | servers create/delete/get/reboot, volume attach/detach, keypairs, security groups | Generic driver and service-instance module (share servers as VMs) | [nova] keystoneauth options, admin | manila/compute/nova.py:62-215 |
| Neutron | ports, networks, subnets, routers, port bindings, security groups (recorded for the DHSS=True back end: [_rewrite/neutron-calls_stable-2026.2.json](_rewrite/neutron-calls_stable-2026.2.json), 07 § 3.5.4) | network plugins of DHSS=True drivers (manila/network/neutron/neutron_network_plugin.py), share network subnet validation | [neutron], admin | manila/network/neutron/api.py:88-425 |
| Cinder | volumes and snapshots CRUD, attach | Generic driver (a share = a Cinder volume in a service VM) | [cinder], admin | manila/volume/cinder.py:72-345 |
Glance ([glance]/api_microversion = 2) | image list | service instance image lookup | [glance], admin | manila/image/glance.py:55-70 |
| Barbican (castellan) | secret ACLs, key references | share encryption (2.90) | user token | manila/keymgr/barbican.py:80-100 |
Other (binaries, files)
- rootwrap / privsep: drivers run storage commands through
sudo manila-rootwrap(manila/utils.py:88, filtersetc/manila/rootwrap.d/share.filters) or SSH to the back end (manila/utils.pySSHPool). - manila-data mounts the source and destination exports locally (
mountthrough rootwrap) and copies files for host-assisted migration and data-manager backups (manila/data/helper.py,manila/data/utils.py). - Driver protocols: one per back end (NetApp ONTAP REST/ZAPI, CephFS via librados/
cephmgr, LVM/ZFS via shell, Generic via SSH into a VM…). Not specified here: OpenKeel replaces them by a CSI-backed driver (07 § 3).
Source: reverse-spec-manila/03-interactions_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.