OpenKeel: die souveräne französische Cloud-Lösung mit europäischer Reichweite der inherent-Gruppe inherent entdecken

Komponenten · Speicher

Manila

Mandantenfähige NFS-Shares: ein NFS-Ganesha-Gateway pro Share-Netz, innerhalb des Mandantennetzes.

Go NFS-Ganeshaopenkeel-manila

Das Modul

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

Auszug aus openkeel-manila/README.md (auf Englisch).

REST-API

258 Operationen der Original-REST-API (Routen und Body-Aktionen) und ihr Status in OpenKeel.

  • 132Implementiert
  • 126Nicht implementiert

Wie die Kompatibilität getestet wird

Die aufgezeichneten Szenarien von Python-Manila werden in Reihenfolge gegen den Go-Dienst wiedergegeben, der Neutron-Vertrag wird geprüft, und Mandanten-Freigaben wurden auf einem Lab-Cluster gemountet.

Replay aufgezeichneter Austausche

E2E-Replay der aufgezeichneten Szenarien

283 Austausche aus 29 geordneten Szenarien liefern mit drei Back-Ends und dem Fake-Neutron des Adapters denselben Status, dieselben Header und denselben Body.

Ausführung

go test -tags e2e ./test/e2e/; E2E_STRICT=1 besteht mit test/e2e/known-differences.txt.

Letztes Ergebnis 279 / 283 identisch, die 4 Unterschiede erklärt (zwei Python-Fehler nicht nachgebildet).

Quelle: openkeel-manila/docs/CONFORMANCE.md

Client-Vertrag

Client-Abläufe

Die aufgezeichneten Abläufe von python-manilaclient/OSC, Manila CSI, Skyline und manila-ui funktionieren unverändert mit ihren Microversions.

Ausführung

Ihre aufgezeichneten Abläufe sind Teil des Replays.

Letztes Ergebnis Identisches Replay.

Quelle: openkeel-manila/docs/CONFORMANCE.md

Client-Vertrag

Neutron-Vertrag

Die sechs Neutron-Anfragen von Manila (Erweiterungen, Netze, Subnetze, Port erstellen, auflisten und löschen) entsprechen den aufgezeichneten Aufrufen.

Ausführung

Durch das Replay gegen eine Go-Portierung des Fake-Neutron des Adapters geprüft.

Quelle: openkeel-manila/docs/CONFORMANCE.md

End-to-End in einem Lab

Mandanten-Freigabe auf einem Lab-Cluster

Ein Projektmitglied erstellt ein Share Network und eine Freigabe; ein Client mountet sie per NFSv4.1 über OVN, andere werden abgewiesen; das Löschen räumt auf.

Ausführung

scripts/manila-test.sh auf dem openkeel-lab-Profil manila-dataplane (kind, zwei OVN-Chassis).

Letztes Ergebnis Auf einem Cluster validiert (2026-11-02) für das Attachment openkeel-ovn; kube-ovn und multus nicht validiert.

Quelle: openkeel-manila/docs/CONFORMANCE.md

Im Rewrite ausgelassen

Manila behält seine API und seinen Scheduler, stellt NFS-Shares aber über NFS-Ganesha-Gateways auf Block-CSI-Volumes bereit; damit entfallen Herstellertreiber, der RPC-Bus, CIFS und der Revert vor Ort.

Von der Cloud-Native-Plattform übernommen

Share-Treiber der Hersteller

Übernommen von NFS-Ganesha auf CSI (Longhorn)

Warum es ausgelassen wurde

Ein einziges mandantenfähiges Back End (DHSS=True): ein Ganesha-Gateway pro Share-Netzwerk, über einen Neutron-Port an das Mandantennetz angebunden, mit einem Longhorn-Volume pro Share.

Warum die Lösung nicht beeinträchtigt ist

Manila CSI, manilaclient, Skyline und manila-ui spielen ihre Abläufe identisch ab; die Mandantenisolation ergibt sich aus Neutron und Zugriffslisten pro Export.

Quelle: openkeel-manila/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

RabbitMQ-RPC und hostlokale Sperren

Übernommen von Kubernetes Leases

Warum es ausgelassen wurde

Casts werden zu Datenbank-Tasks, die per Lease beansprucht werden; Capability-Berichte sind Zeilen; eine manila-share-Replik pro Back End hält einen Kubernetes-Lease.

Warum die Lösung nicht beeinträchtigt ist

Kein RabbitMQ für Manila, und Tasks abgestürzter Worker werden übernommen. Python-Manila-Dienste können nicht neben den Go-Diensten laufen: Die Migration ist eine Umstellung in einem Schritt.

Quelle: openkeel-manila/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

CIFS-Shares und Snapshot-Revert vor Ort

Übernommen von CSI

Warum es ausgelassen wurde

Das ganesha-Back-End stellt nur NFS bereit, und CSI kann ein Volume nicht vor Ort ersetzen.

Warum die Lösung nicht beeinträchtigt ist

CIFS wird abgewiesen und revert_to_snapshot_support wird als False gemeldet; neue Shares können weiterhin aus Snapshots erstellt werden.

Quelle: openkeel-manila/docs/CONFORMANCE.md

Hier ist nur aufgeführt, was bewusst ausgelassen wurde; noch nicht erledigte Arbeit steht in den Known gaps der docs/CONFORMANCE.md des Moduls. Alle Module

Manila-Interaktionen

Dienstansicht, vom Diagramm-Skill aus dem OpenKeel-Modell generiert.

Diagramm openkeel-manila.svg Vollbild
Die 2 Interaktionen des Modells
VonNachProtokollWas
Manila APIManila share driverRabbitMQRPC create/extend
Manila share driverCSI driver (Longhorn)Kubernetes-APIPVC (RWX filesystem)

Spezifikationen