L'API Octavia v2 servita da neutron-api; load balancer OVN, attivati per impostazione predefinita.
Go Load balancer OVNopenkeel-ovn-octavia-provider
Il modulo
OpenKeel implementation in Go of OpenStack ovn-octavia-provider, generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It is the OVN load-balancing back end of OpenKeel's Octavia API: each load balancer becomes rows of the OVN Northbound Load_Balancer table, with the same keys and statuses as the Python provider, so that clients, Neutron and existing OVN databases see no difference. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.
okadm install deploys it by default. The public Octavia v2 API lives in the neutron-api binary of openkeel-neutron, under /load-balancer, and Neutron is the only caller of the driver API. The provider sends status updates and reads objects back over HTTP, to Neutron's admin port. See docs/DEPLOYMENT.md.
The Python shim and the octavia-driver-agent sidecar (off by default) stay in this project only to take over from a Python Octavia; they are not part of OpenKeel's normal path.
Go module: github.com/openkeel/openkeel-ovn-octavia-provider
Binaries: ovn-octavia-provider (driver API on port 9877, health and metrics on 9090) and octavia-ovn-db-sync-util
Python shim, to take over from a Python Octavia: shim/, entry point octavia.api.drivers = ovn
Configuration: YAML, see config/config.example.yaml
State: none of its own, the OVN NB database is the database, so there are no migrations
Development environment and tests: docs/GETTING-STARTED.md
Estratto da openkeel-ovn-octavia-provider/README.md (in inglese).
API REST
297 operazioni dell'API REST originale (route e azioni nel corpo) e il loro stato in OpenKeel. Servito da neutron-api (openkeel-neutron, internal/lbaas).
Il provider Go viene eseguito passo per passo accanto al vero provider Python sullo stesso OVN, quindi verificato con octavia-tempest-plugin e traffico reale sul laboratorio.
Test differenziale
Confronto differenziale con il provider Python
Gli stessi 35 passi producono le stesse righe OVN e gli stessi aggiornamenti di stato dai provider Python e Go su un OVN reale.
Esecuzione
test/ovn/differential/record.py esegue il driver Python; TestDifferential esegue gli stessi passi su Go e confronta.
Ultimo risultato 35 / 35 passi identici, salvo una differenza deliberata nello stato dell'health monitor (2026-10-31).
Il provider OVN diventa un servizio Go chiamato via HTTP dall'API Octavia in neutron-api, senza caricamento di driver Python, driver agent o plugin di sincronizzazione Neutron.
Meccanismi interni semplificati
Caricamento dei provider Python e driver agent
Perché è stato escluso
neutron-api è l'unico chiamante: chiama il driver via HTTP e riceve i messaggi di stato sulla sua porta di amministrazione anziché sui socket Unix del driver agent.
Perché la soluzione non ne risente
I load balancer raggiungono ACTIVE tramite l'API pubblica di Octavia. Un piccolo shim Python esiste solo per subentrare a un Octavia Python.
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 Octavia (OVN)
Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.