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
Extracto de openkeel-keystone/README.md (en inglés).
API REST
259 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel.
Los intercambios grabados de los tests unitarios de Keystone en Python se reproducen contra el servicio Go; el Keystone en Go también lo utilizan Skyline, las CLI y todos los demás servicios del laboratorio.
Replay de los intercambios grabados
Replay E2E de los intercambios grabados
Los intercambios grabados de los tests de Keystone en Python dan el mismo estado y el mismo cuerpo desde el servicio Go.
Ejecución
make e2e; informe en test/e2e/report.json, diferencias aceptadas en test/e2e/known-differences.txt.
Último resultado 7345 / 8896 peticiones idénticas en el último informe (1489 archivos).
Fuente: openkeel-keystone/test/e2e/report.json
Tests unitarios y golden tests
Tests unitarios y vectores s3tokens portados
Tests unitarios, incluidos los vectores de firma EC2 y S3 de test_contrib_s3_core portados a mano.
Ejecución
make test (vet y detector de carreras); internal/keystone/ec2sign_test.go, internal/api/s3tokens_test.go.
Fuente: openkeel-keystone/docs/CONFORMANCE.md
Contrato de cliente
Skyline frente al Keystone en Go
El inicio de sesión, el perfil, las políticas, el cambio de proyecto, las regiones, los dominios, los endpoints, el texto de contraseña incorrecta y el cierre de sesión funcionan igual que contra Python.
Ejecución
Ejecución en vivo de openkeel-skyline contra un Keystone en Go poblado desde MariaDB.
Último resultado Políticas de administrador del sistema: 1 817 / 1 860 permitidas, como Python frente a su simulación.
Fuente: openkeel-skyline/docs/CONFORMANCE.md
De extremo a extremo en un laboratorio
Smoke test del laboratorio
Tokens de administrador con ámbito de proyecto y de sistema y un catálogo con todos los servicios esperados, utilizados por las comprobaciones de los demás servicios.
Ejecución
make lab-smoke ejecuta labctl smoke en el clúster del laboratorio.
Fuente: openkeel-lab/README.md
Excluido del rewrite
Keystone conserva su API y prescinde de la infraestructura de servicio oslo y del formato de notificación basic, y audita en su lugar con eventos CADF.
Mecánica interna simplificada
Formato de notificación basic
Por qué se excluyó
Solo se implementa CADF, el valor por defecto de upstream; los eventos pasan por el emisor de auditoría (JSON en stdout, oslo.messaging si está habilitado).
Por qué la solución no se ve afectada
Configurar basic registra una advertencia y se envía CADF. Ningún servicio de OpenKeel consume los payloads basic de Keystone.
Fuente: openkeel-keystone/docs/CONFORMANCE.md
Asumido por la plataforma Cloud Native
Logs en archivos, osprofiler, healthcheck, CORS
Asumido por Probes de Kubernetes, OpenTelemetry, Ingress
Por qué se excluyó
Los logs van a stdout en JSON, las trazas a OpenTelemetry, el estado de salud a las probes de Kubernetes y CORS al ingress.
Por qué la solución no se ve afectada
Los operadores usan las herramientas del clúster; la API de identidad no cambia.
Aquí solo figura lo que se excluyó por diseño; el trabajo aún no realizado está en los Known gaps del docs/CONFORMANCE.md del módulo. Todos los módulos
Interacciones Keystone
Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.