Share NFS multi-tenant: un gateway NFS-Ganesha per share network, all'interno della rete del tenant.
Go NFS-Ganeshaopenkeel-manila
Il modulo
OpenKeel implementation in Go of OpenStack Manila (manila-api, manila-scheduler, manila-share), generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing: same routes, status codes, error bodies, microversions and policies. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.
Go module: github.com/openkeel/openkeel-manila
Binaries: manila-api (API on port 8786, health and metrics on 9090), manila-scheduler and manila-share (workers fed by the database task queue, no RabbitMQ), manila-ganesha-agent (side-car of the NFS-Ganesha gateway pods). Each process binary is the same program with another default -process.
Back end: multi-tenant (driver_handles_share_servers: true): one NFS-Ganesha gateway pod per share network subnet, attached to the tenant network through a Neutron port, Longhorn RWO volumes behind it, CSI snapshots (07 § 3.5; design in docs/CONFORMANCE.md D1)
Configuration: YAML, see config/config.example.yaml
Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
Database schema, migrations and upgrades: docs/DATABASE.md
Estratto da openkeel-manila/README.md (in inglese).
API REST
258 operazioni dell'API REST originale (route e azioni nel corpo) e il loro stato in OpenKeel.
Gli scenari registrati di Manila Python vengono riprodotti in ordine sul servizio Go, il contratto Neutron viene verificato e condivisioni di tenant sono state montate su un cluster di laboratorio.
Replay degli scambi registrati
Replay E2E degli scenari registrati
283 scambi di 29 scenari ordinati, con tre back end e il Neutron simulato dell'adattatore, restituiscono lo stesso stato, le stesse intestazioni e lo stesso corpo.
Esecuzione
go test -tags e2e ./test/e2e/; E2E_STRICT=1 superato con test/e2e/known-differences.txt.
Ultimo risultato 279 / 283 identici, con le 4 differenze spiegate (due bug di Python non riprodotti).
Fonte: openkeel-manila/docs/CONFORMANCE.md
Contratto client
Flussi client
I flussi registrati di python-manilaclient/OSC, Manila CSI, Skyline e manila-ui funzionano senza modifiche alle rispettive microversioni.
Esecuzione
I loro flussi registrati fanno parte del replay.
Ultimo risultato Riproducono in modo identico.
Fonte: openkeel-manila/docs/CONFORMANCE.md
Contratto client
Contratto Neutron
Le sei richieste a Neutron inviate da Manila (estensioni, reti, subnet, creazione, elenco ed eliminazione di porte) corrispondono alle chiamate registrate.
Esecuzione
Verificato dal replay su un porting in Go del Neutron simulato dell'adattatore.
Fonte: openkeel-manila/docs/CONFORMANCE.md
End-to-end su un laboratorio
Condivisione di tenant su un cluster di laboratorio
Un membro del progetto crea una share network e una condivisione; un client la monta in NFSv4.1 tramite OVN, gli altri vengono rifiutati; l'eliminazione ripulisce tutto.
Esecuzione
scripts/manila-test.sh sul profilo openkeel-lab manila-dataplane (kind, due chassis OVN).
Ultimo risultato Convalidato su un cluster (2026-11-02) per l'attachment openkeel-ovn; kube-ovn e multus non convalidati.
Fonte: openkeel-manila/docs/CONFORMANCE.md
Escluso dal rewrite
Manila mantiene la sua API e il suo scheduler ma serve share NFS da gateway NFS-Ganesha su volumi CSI a blocchi, eliminando i driver dei vendor, il bus RPC, CIFS e il ripristino sul posto.
Gestito dalla piattaforma Cloud Native
Driver di share dei vendor
Gestito da NFS-Ganesha su CSI (Longhorn)
Perché è stato escluso
Un unico back end multi-tenant (DHSS=True): un gateway Ganesha per share network, collegato alla rete del tenant tramite una porta Neutron, con un volume Longhorn per share.
Perché la soluzione non ne risente
Manila CSI, manilaclient, Skyline e manila-ui riproducono i loro flussi in modo identico; l'isolamento dei tenant deriva da Neutron e dalle liste di accesso per export.
Fonte: openkeel-manila/docs/CONFORMANCE.md
Meccanismi interni semplificati
RPC RabbitMQ e lock locali all'host
Gestito da Kubernetes Leases
Perché è stato escluso
I cast diventano task nel database acquisiti tramite un lease; i report di capacità sono righe; una replica di manila-share per back end detiene un Lease Kubernetes.
Perché la soluzione non ne risente
Nessun RabbitMQ per Manila, e i task dei worker in crash vengono ripresi. I servizi Manila Python non possono girare accanto a quelli Go: la migrazione è un passaggio netto.
Fonte: openkeel-manila/docs/CONFORMANCE.md
Gestito dalla piattaforma Cloud Native
Share CIFS e ripristino sul posto da snapshot
Gestito da CSI
Perché è stato escluso
Il back end ganesha serve solo NFS, e CSI non può sostituire un volume sul posto.
Perché la soluzione non ne risente
CIFS viene rifiutato e revert_to_snapshot_support è segnalato come False; è sempre possibile creare nuove share a partire da snapshot.
Fonte: openkeel-manila/docs/CONFORMANCE.md
Qui è elencato solo ciò che è stato escluso per scelta progettuale; il lavoro non ancora svolto si trova nei Known gaps del docs/CONFORMANCE.md del modulo. Tutti i moduli
Interazioni Manila
Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.