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