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

Komponenten · Compute und Kapazität

Placement

Ressourceninventare und Allokationen; die erste in Go neu geschriebene Komponente.

Go MariaDB Galeraopenkeel-placement

Das Modul

OpenKeel implementation in Go of OpenStack placement (placement-api), 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-placement
  • Binary: placement-api (API on port 8778, health and metrics on 9090)
  • 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-placement/README.md (auf Englisch).

REST-API

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

  • 37Implementiert

Wie die Kompatibilität getestet wird

Die aufgezeichneten gabbi-Austausche von Python-Placement werden gegen den Go-Dienst wiedergegeben, und Novas eigene Funktionstest-Suite läuft mit dem Go-Dienst anstelle von Python-Placement.

Replay aufgezeichneter Austausche

E2E-Replay der gabbi-Austausche

Jede Anfrage der 79 Upstream-gabbi-Dateien liefert denselben Status und Body wie der aufgezeichnete Python-Dienst.

Ausführung

make e2e, mit E2E_MYSQL_DSN für MariaDB; Bericht in test/e2e/report.json, Unterschiede aufgeführt in known-differences.txt.

Letztes Ergebnis 1303 / 1316 identisch auf MariaDB 11.4 (1301 / 1316 auf go-mysql-server); keiner der verbleibenden Unterschiede ist ein funktionaler Fehler.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Unit- und Golden Tests

Fälle des allocation-candidates-Algorithmus

Der allocation-candidates-Algorithmus liefert bei 83 aufgezeichneten Fällen mit bis zu 6000 Providern dieselben Kandidaten wie Python.

Ausführung

go test -tags e2e -run TestAllocationCandidateCases ./test/e2e/; Bericht in test/e2e/cases-report.json.

Letztes Ergebnis 81 / 83 identisch, 83 / 83 bei der Anzahl der Kandidaten.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Differenzieller Test

Nova-Funktionstests gegen Go-Placement

Die Funktionstest-Suite von Nova besteht, wenn jeder Placement-Aufruf vom Go-Dienst statt von Python-Placement bedient wird.

Ausführung

Die Nova-Funktionstests laufen über test/nova-functional/run.sh, auf go-mysql-server und MariaDB 11.4, verglichen mit einer Python-Placement-Referenz.

Letztes Ergebnis Teilmenge 859 / 859 auf MariaDB 11.4 (wie Python); vollständige Suite 3314 bestanden, 1 fehlgeschlagen (ein Engine-Fehler) auf go-mysql-server (2026-10-28).

Quelle: openkeel-placement/docs/NOVA-FUNCTIONAL.md

Nebenläufigkeit auf Galera

Nebenläufigkeit auf MariaDB Galera

Nebenläufige Allokationen über drei Dienstinstanzen auf drei Galera-Knoten überbuchen nie einen Resource Provider.

Ausführung

GALERA_DSNS=... go test -tags galera ./test/galera/ auf einem MariaDB-Galera-11.4-Cluster mit 3 Knoten.

Letztes Ergebnis Bestanden: 180 nebenläufige Allokationen für 100 VCPU ergeben genau 100 Allokationen, 0 unerwartete Status.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Tempest

Tempest mit einem echten Placement

Tempest- und Nova-Funktionstests gegen ein auf einem Cluster bereitgestelltes Placement.

Ausführung

Erfordert einen kind-Cluster (reverse-spec 07 § 7 Schritt 5).

Letztes Ergebnis Nicht ausgeführt.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Im Rewrite ausgelassen

Placement behält seine gesamte API und verzichtet nur auf den nicht authentifizierten Testmodus, alte Datenmigrationen und die oslo-Service-Infrastruktur, die Kubernetes bereits bereitstellt.

Vereinfachte interne Mechanik

Nicht authentifizierter Modus noauth2

Warum es ausgelassen wurde

Eine API ohne Authentifizierung hat in der Produktion keinen Platz; die Testsuiten injizieren stattdessen einen Token-Validator.

Warum die Lösung nicht beeinträchtigt ist

Clients authentifizieren sich immer über Keystone, wie in jedem realen Deployment. Nova, Neutron und osc-placement sind nicht betroffen.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Upstream veraltet oder ungenutzt

Online-Datenmigrationen für alte Datenbanken

Warum es ausgelassen wurde

set_root_provider_ids und create_incomplete_consumers korrigieren nur Datenbanken, die älter als der nachgebildete Branch sind.

Warum die Lösung nicht beeinträchtigt ist

Eine neue oder aktuelle Datenbank benötigt sie nie; Datenbanken, die älter als der Branch sind, werden abgewiesen, statt vor Ort migriert zu werden.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

CORS-Middleware

Übernommen von Ingress (Gateway API)

Warum es ausgelassen wurde

Cross-Origin-Header sind Sache des HTTP-Edge, nicht jedes einzelnen API-Prozesses.

Warum die Lösung nicht beeinträchtigt ist

Kein OpenKeel-Client ruft Placement aus einem Browser auf einer anderen Origin auf; wo nötig, wird CORS einmal am Ingress konfiguriert.

Quelle: openkeel-placement/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Logging in Dateien, osprofiler, Healthcheck-Middleware

Übernommen von Kubernetes probes, OpenTelemetry

Warum es ausgelassen wurde

Logs gehen als JSON auf stdout, Traces an OpenTelemetry und der Zustand an Kubernetes-Probes; 101 von 108 oslo-Optionen wurden überflüssig.

Warum die Lösung nicht beeinträchtigt ist

Betreiber erhalten dieselben Informationen über die Log-, Tracing- und Probe-Werkzeuge des Clusters; die API bleibt unverändert.

Quelle: openkeel-placement/config/dropped-options.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

Placement-Interaktionen

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

Diagramm openkeel-placement.svg Vollbild
Die 5 Interaktionen des Modells
VonNachProtokollWas
Nova APIPlacementREST-APIusages, quotas
Nova conductor + schedulerPlacementREST-APIallocation candidates, claims
Nova compute agentPlacementREST-APIinventory, traits
Zun APIPlacementREST-APIallocation candidates, claims
Zun compute agentPlacementREST-APIinventory (Node UID provider)

Spezifikationen