OpenKeel implementation in Go of OpenStack keystone (keystone-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-keystone
Binaries: keystone-api (API on port 5000, health and metrics on 9090) and keystone-customers (the controller of the OpenKeelCustomer resources, below)
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
Extrait de openkeel-keystone/README.md (en anglais).
API REST
259 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.
Les échanges enregistrés des tests unitaires de Keystone Python sont rejoués contre le service Go ; le Keystone Go est aussi utilisé par Skyline, les CLI et tous les autres services du lab.
Rejeu des échanges enregistrés
Rejeu E2E des échanges enregistrés
Les échanges enregistrés depuis les tests de Keystone Python donnent le même statut et le même corps depuis le service Go.
Exécution
make e2e ; rapport dans test/e2e/report.json, différences acceptées dans test/e2e/known-differences.txt.
Dernier résultat 7345 / 8896 requêtes identiques dans le dernier rapport (1489 fichiers).
Source : openkeel-keystone/test/e2e/report.json
Tests unitaires et golden tests
Tests unitaires et vecteurs s3tokens portés
Tests unitaires, dont les vecteurs de signature EC2 et S3 de test_contrib_s3_core portés à la main.
Exécution
make test (vet et détecteur de race) ; internal/keystone/ec2sign_test.go, internal/api/s3tokens_test.go.
Source : openkeel-keystone/docs/CONFORMANCE.md
Contrat client
Skyline face au Keystone Go
Connexion, profil, politiques, changement de projet, régions, domaines, endpoints, texte de mot de passe erroné et déconnexion fonctionnent comme face à Python.
Exécution
Exécution en direct d'openkeel-skyline contre un Keystone Go alimenté par MariaDB.
Dernier résultat Politiques d'admin système : 1 817 / 1 860 autorisées, comme Python face à son simulacre.
Source : openkeel-skyline/docs/CONFORMANCE.md
De bout en bout sur un lab
Smoke test du lab
Jetons admin à portée projet et système et un catalogue listant chaque service attendu, utilisés par les vérifications des autres services.
Exécution
make lab-smoke exécute labctl smoke dans le cluster du lab.
Source : openkeel-lab/README.md
Écarté de la réécriture
Keystone conserve son API et laisse de côté la plomberie de service oslo et le format de notification basic, et audite plutôt avec des événements CADF.
Mécanique interne simplifiée
Format de notification basic
Pourquoi c'est écarté
Seul CADF, le défaut amont, est implémenté ; les événements passent par l'émetteur d'audit (JSON sur stdout, oslo.messaging s'il est activé).
Pourquoi la solution n'est pas affectée
Choisir basic journalise un avertissement et CADF est envoyé. Aucun service OpenKeel ne consomme les payloads basic de Keystone.
Source : openkeel-keystone/docs/CONFORMANCE.md
Assuré par la plateforme Cloud Native
Logs dans des fichiers, osprofiler, healthcheck, CORS
Repris par Probes Kubernetes, OpenTelemetry, Ingress
Pourquoi c'est écarté
Les logs partent sur stdout en JSON, les traces vers OpenTelemetry, la santé vers les probes Kubernetes et CORS vers l'ingress.
Pourquoi la solution n'est pas affectée
Les opérateurs utilisent les outils du cluster ; l'API d'identité est inchangée.
Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules
Interactions de Keystone
Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.