API Octavia v2 servie par neutron-api ; load balancers OVN, actifs par défaut.
Go Load balancers OVNopenkeel-ovn-octavia-provider
Le module
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
Extrait de openkeel-ovn-octavia-provider/README.md (en anglais).
API REST
297 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel. Servi par neutron-api (openkeel-neutron, internal/lbaas).
Le provider Go est exécuté étape par étape à côté du vrai provider Python sur le même OVN, puis vérifié avec octavia-tempest-plugin et du vrai trafic sur le lab.
Test différentiel
Comparaison différentielle avec le provider Python
Les mêmes 35 étapes produisent les mêmes lignes OVN et mises à jour de statut depuis les providers Python et Go sur un vrai OVN.
Exécution
test/ovn/differential/record.py exécute le pilote Python ; TestDifferential joue les mêmes étapes sur Go et compare.
Dernier résultat 35 / 35 étapes identiques, hormis une différence volontaire de statut du health monitor (2026-10-31).
Les flux et les lignes Service_Monitor produits par ovn-northd, les événements de monitor, le verrou et la synchronisation se comportent comme attendu.
Le provider OVN devient un service Go appelé en HTTP par l'API Octavia dans neutron-api, sans chargement de driver Python, sans driver agent ni plugin de synchronisation Neutron.
Mécanique interne simplifiée
Chargement de providers Python et driver agent
Pourquoi c'est écarté
neutron-api est le seul appelant : il appelle le driver en HTTP et reçoit les messages d'état sur son port d'administration au lieu des sockets Unix du driver agent.
Pourquoi la solution n'est pas affectée
Les load balancers atteignent ACTIVE via l'API Octavia publique. Un petit shim Python n'existe que pour prendre le relais d'un Octavia Python.
Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules
Interactions de Octavia (OVN)
Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.