OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Components · Networking

Octavia (OVN)

The Octavia v2 API served by neutron-api; OVN load balancers, enabled by default.

Go OVN load balancersopenkeel-ovn-octavia-provider

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

client ──/load-balancer/v2/lbaas──> neutron-api ──HTTP, bearer token──> ovn-octavia-provider ──OVSDB──> OVN NB, SB
                                        ^                                    │  │  └──REST──> Neutron, Keystone
                                        └──/internal/lbaas :9878, token──────┘  │
                                                                                └────events, maintenance (OVSDB lock neutron_ovn_octavia_event_lock)

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

Excerpt from openkeel-ovn-octavia-provider/README.md (in English).

REST API

297 operations of the original REST API (routes and body actions), and their state in OpenKeel. Served by neutron-api (openkeel-neutron, internal/lbaas).

  • 297Implemented

How compatibility is tested

The Go provider is run step by step next to the real Python provider on the same OVN, then checked with octavia-tempest-plugin and real traffic on the lab.

Differential test

Differential against the Python provider

The same 35 steps produce the same OVN rows and status updates from the Python and Go providers on a real OVN.

How it runs

test/ovn/differential/record.py runs the Python driver; TestDifferential plays the same steps on Go and compares.

Latest result 35 / 35 steps identical, apart from one deliberate health monitor status difference (2026-10-31).

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Unit and golden tests

Unit tests and vectors

VIP framing vectors, refusal messages with exact text and status, and driver logic match the Python provider.

How it runs

go test ./... on an in-memory Northbound with the real schema, also under -race.

Latest result 96 passed, 0 failed (2026-11-01); vips vectors 57 / 57.

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Unit and golden tests

Real OVN

Flows and Service_Monitor rows produced by ovn-northd, monitor events, lock and sync behave as expected.

How it runs

make ovn-test against OVN 25.03 (schema 7.11.0).

Latest result 6 passed.

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Tempest

octavia-tempest-plugin, provider ovn

The upstream Octavia API and scenario tests, with the settings of the upstream OVN job, pass through the API in neutron-api.

How it runs

octavia-tempest-plugin with provider=ovn on the lab profile dataplane, real Keystone tokens.

Latest result API 82 passed, 0 failed; scenario 22 passed, 0 failed (2026-11-01). Traffic tests (56) not run.

Source: openkeel-neutron/docs/CONFORMANCE.md

End to end on a lab

Real traffic with real guests

VIPs reachable from another subnet and through a floating IP, members with floating IPs, OVN health checks removing a stopped guest.

How it runs

openkeel-lab/scripts/dataplane-test.sh (78 checks) with the Go Neutron.

Latest result Pass (2026-11-01).

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Client contract

Shim in a real octavia-api

The takeover path: the Go provider behind a real Python octavia-api and driver agent.

How it runs

Socket framing tested against a stand-in only.

Latest result Not run.

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Left out of the rewrite

The OVN provider becomes a Go service called over HTTP by the Octavia API in neutron-api, without Python driver loading, the driver agent or the Neutron sync plugin.

Internal machinery simplified

Python provider loading and driver agent

Why it was left out

neutron-api is the only caller: it calls the driver over HTTP and receives the status messages on its admin port instead of the driver agent's Unix sockets.

Why the solution is not affected

Load balancers reach ACTIVE through the public Octavia API. A small Python shim exists only to take over from a Python Octavia.

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Internal machinery simplified

neutron-ovn-db-sync-util Octavia plugin

Why it was left out

The plugin belongs to the Python Neutron tool, which OpenKeel does not ship.

Why the solution is not affected

octavia-ovn-db-sync-util covers the repair of OVN load balancer rows.

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Obsolete or unused upstream

Deprecated keystoneauth endpoint options

Why it was left out

endpoint, endpoint_type and ca_certificates_file are deprecated upstream; service_auth with secret files replaces them.

Why the solution is not affected

Configuration only; the provider reaches Neutron the same way.

Source: openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Only what was left out by design is listed here; the work not done yet is in the Known gaps of the module's docs/CONFORMANCE.md. Every module

Octavia (OVN) interactions

Service view generated by the diagram skill from the OpenKeel model.

Diagram openkeel-ovn-octavia-provider.svg Full screen
The 5 interactions of the model
FromToProtocolWhat
Neutron serverOVN Octavia providerREST APIOctavia driver API (:9877)
OVN Octavia providerNeutron serverREST API/internal/lbaas status updates, ports, subnets
OVN Octavia providerKeystoneREST APIservice token
OVN Octavia providerOVN Northbound DBOVSDBLoad_Balancer rows; events, maintenance (OVSDB lock)
OVN Octavia providerOVN Southbound DBOVSDBreads chassis, port bindings

Specifications