OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

Componentes · Cómputo y capacidad

Placement

Inventarios de recursos y asignaciones; el primer componente reescrito en Go.

Go MariaDB Galeraopenkeel-placement

El módulo

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

Extracto de openkeel-placement/README.md (en inglés).

API REST

37 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel.

  • 37Implementado

Cómo se prueba la compatibilidad

Los intercambios gabbi grabados de Placement en Python se reproducen contra el servicio Go, y la propia suite funcional de Nova se ejecuta con el servicio Go en lugar de Placement en Python.

Replay de los intercambios grabados

Replay E2E de los intercambios gabbi

Cada petición de los 79 archivos gabbi upstream da el mismo estado y el mismo cuerpo que el servicio Python grabado.

Ejecución

make e2e, con E2E_MYSQL_DSN para MariaDB; informe en test/e2e/report.json, diferencias enumeradas en known-differences.txt.

Último resultado 1303 / 1316 idénticos en MariaDB 11.4 (1301 / 1316 en go-mysql-server); ninguna de las diferencias restantes es un error funcional.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Tests unitarios y golden tests

Casos del algoritmo allocation-candidates

El algoritmo allocation-candidates devuelve los mismos candidatos que Python en 83 casos grabados, con hasta 6000 providers.

Ejecución

go test -tags e2e -run TestAllocationCandidateCases ./test/e2e/; informe en test/e2e/cases-report.json.

Último resultado 81 / 83 idénticos, 83 / 83 en el número de candidatos.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Test diferencial

Tests funcionales de Nova contra Placement en Go

La suite de tests funcionales de Nova se supera cuando cada llamada a Placement la sirve el servicio Go en lugar de Placement en Python.

Ejecución

Los tests funcionales de Nova se ejecutan mediante test/nova-functional/run.sh, en go-mysql-server y MariaDB 11.4, comparados con una referencia de Placement en Python.

Último resultado Subconjunto 859 / 859 en MariaDB 11.4 (como Python); suite completa 3314 superados, 1 fallido (un error del motor) en go-mysql-server (2026-10-28).

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

Concurrencia en Galera

Concurrencia en MariaDB Galera

Las asignaciones concurrentes a través de tres instancias del servicio en tres nodos Galera nunca sobreasignan un resource provider.

Ejecución

GALERA_DSNS=... go test -tags galera ./test/galera/ en un clúster MariaDB Galera 11.4 de 3 nodos.

Último resultado Superado: 180 asignaciones concurrentes para 100 VCPU dan exactamente 100 asignaciones, 0 estados inesperados.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Tempest

Tempest con un Placement real

Tempest y tests funcionales de Nova contra un Placement desplegado en un clúster.

Ejecución

Requiere un clúster kind (reverse-spec 07 § 7 paso 5).

Último resultado No ejecutado.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Excluido del rewrite

Placement conserva toda su API y solo prescinde del modo de prueba sin autenticación, las antiguas migraciones de datos y la infraestructura de servicio oslo que Kubernetes ya proporciona.

Mecánica interna simplificada

Modo sin autenticación noauth2

Por qué se excluyó

Una API sin autenticación no tiene cabida en producción; las suites de pruebas inyectan en su lugar un validador de tokens.

Por qué la solución no se ve afectada

Los clientes siempre se autentican a través de Keystone, como en cualquier despliegue real. Nova, Neutron y osc-placement no se ven afectados.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Obsoleto o sin uso en upstream

Migraciones de datos en línea para bases de datos antiguas

Por qué se excluyó

set_root_provider_ids y create_incomplete_consumers solo corrigen bases de datos anteriores a la rama reproducida.

Por qué la solución no se ve afectada

Una base de datos nueva o actualizada nunca las necesita; las bases de datos anteriores a la rama se rechazan en lugar de migrarse in situ.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Middleware CORS

Asumido por Ingress (Gateway API)

Por qué se excluyó

Las cabeceras cross-origin corresponden al borde HTTP, no a cada proceso de API.

Por qué la solución no se ve afectada

Ningún cliente de OpenKeel llama a Placement desde un navegador en otro origen; cuando es necesario, CORS se configura una sola vez en el ingress.

Fuente: openkeel-placement/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Logs en archivos, osprofiler, middleware healthcheck

Asumido por Kubernetes probes, OpenTelemetry

Por qué se excluyó

Los logs van a stdout en JSON, las trazas a OpenTelemetry y el estado de salud a las probes de Kubernetes; 101 de las 108 opciones oslo dejaron de ser útiles.

Por qué la solución no se ve afectada

Los operadores obtienen la misma información con las herramientas de logs, trazas y probes del clúster; la API no cambia.

Fuente: openkeel-placement/config/dropped-options.md

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 Placement

Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.

Diagrama openkeel-placement.svg Pantalla completa
Las 5 interacciones del modelo
DeAProtocoloQué
Nova APIPlacementAPI RESTusages, quotas
Nova conductor + schedulerPlacementAPI RESTallocation candidates, claims
Nova compute agentPlacementAPI RESTinventory, traits
Zun APIPlacementAPI RESTallocation candidates, claims
Zun compute agentPlacementAPI RESTinventory (Node UID provider)

Especificaciones