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.
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).
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.
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.