OpenKeel: la soluzione Cloud sovrana, francese e di portata europea, del gruppo inherent Scopri inherent

Componenti · Calcolo e capacità

Placement

Inventari delle risorse e allocazioni; il primo componente riscritto in Go.

Go MariaDB Galeraopenkeel-placement

Il modulo

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

Estratto da openkeel-placement/README.md (in inglese).

API REST

37 operazioni dell'API REST originale (route e azioni nel corpo) e il loro stato in OpenKeel.

  • 37Implementato

Come viene testata la compatibilità

Gli scambi gabbi registrati di Placement Python vengono riprodotti sul servizio Go, e la suite funzionale di Nova stessa viene eseguita con il servizio Go al posto di Placement Python.

Replay degli scambi registrati

Replay E2E degli scambi gabbi

Ogni richiesta dei 79 file gabbi upstream restituisce lo stesso stato e lo stesso corpo del servizio Python registrato.

Esecuzione

make e2e, con E2E_MYSQL_DSN per MariaDB; report in test/e2e/report.json, differenze elencate in known-differences.txt.

Ultimo risultato 1303 / 1316 identici su MariaDB 11.4 (1301 / 1316 su go-mysql-server); nessuna delle differenze residue è un bug funzionale.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Test unitari e golden test

Casi dell'algoritmo allocation-candidates

L'algoritmo allocation-candidates restituisce gli stessi candidati di Python su 83 casi registrati, fino a 6000 provider.

Esecuzione

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

Ultimo risultato 81 / 83 identici, 83 / 83 sul numero di candidati.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Test differenziale

Test funzionali di Nova su Placement Go

La suite di test funzionali di Nova viene superata quando ogni chiamata a Placement è servita dal servizio Go invece che da Placement Python.

Esecuzione

I test funzionali di Nova vengono eseguiti tramite test/nova-functional/run.sh, su go-mysql-server e MariaDB 11.4, a confronto con un riferimento Placement Python.

Ultimo risultato Sottoinsieme 859 / 859 su MariaDB 11.4 (come Python); suite completa 3314 superati, 1 fallito (un bug del motore) su go-mysql-server (2026-10-28).

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

Concorrenza su Galera

Concorrenza su MariaDB Galera

Allocazioni concorrenti tramite tre istanze del servizio su tre nodi Galera non sovrallocano mai un resource provider.

Esecuzione

GALERA_DSNS=... go test -tags galera ./test/galera/ su un cluster MariaDB Galera 11.4 a 3 nodi.

Ultimo risultato Superato: 180 allocazioni concorrenti per 100 VCPU danno esattamente 100 allocazioni, 0 stati imprevisti.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Tempest

Tempest con un Placement reale

Tempest e test funzionali di Nova su un Placement distribuito in un cluster.

Esecuzione

Richiede un cluster kind (reverse-spec 07 § 7 passo 5).

Ultimo risultato Non eseguito.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Escluso dal rewrite

Placement mantiene tutta la sua API e tralascia solo la modalità di test non autenticata, le vecchie migrazioni dei dati e l'infrastruttura di servizio oslo che Kubernetes fornisce già.

Meccanismi interni semplificati

Modalità non autenticata noauth2

Perché è stato escluso

Un'API senza autenticazione non ha posto in produzione; le suite di test iniettano invece un validatore di token.

Perché la soluzione non ne risente

I client si autenticano sempre tramite Keystone, come in qualsiasi deployment reale. Nova, Neutron e osc-placement non sono interessati.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Obsoleto o inutilizzato upstream

Migrazioni dei dati online per database datati

Perché è stato escluso

set_root_provider_ids e create_incomplete_consumers correggono solo database precedenti al branch riprodotto.

Perché la soluzione non ne risente

Un database nuovo o aggiornato non ne ha mai bisogno; i database precedenti al branch vengono rifiutati anziché migrati sul posto.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Middleware CORS

Gestito da Ingress (Gateway API)

Perché è stato escluso

Gli header cross-origin riguardano l'edge HTTP, non ogni singolo processo API.

Perché la soluzione non ne risente

Nessun client OpenKeel chiama Placement da un browser su un'altra origine; dove necessario, CORS si configura una sola volta sull'ingress.

Fonte: openkeel-placement/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Log su file, osprofiler, middleware healthcheck

Gestito da Kubernetes probes, OpenTelemetry

Perché è stato escluso

I log vanno su stdout in JSON, le tracce a OpenTelemetry e lo stato di salute alle probes Kubernetes; 101 delle 108 opzioni oslo sono diventate inutili.

Perché la soluzione non ne risente

Gli operatori ottengono le stesse informazioni tramite gli strumenti di log, tracing e probe del cluster; l'API resta invariata.

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

Qui è elencato solo ciò che è stato escluso per scelta progettuale; il lavoro non ancora svolto si trova nei Known gaps del docs/CONFORMANCE.md del modulo. Tutti i moduli

Interazioni Placement

Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.

Diagramma openkeel-placement.svg Schermo intero
Le 5 interazioni del modello
DaAProtocolloCosa
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)

Specifiche