OVN agent

The OVN agent is a service that could be executed in any node running the ovn-controller service. This agent provides additional functionalities not provided by OVN; for example, a metadata proxy between the virtual machines and the Nova metadata service. This agent will replace the need of the OVN metadata agent.

OVN and OVS database connectivity

The OVN agent can access the local OVS database where the service is running. It also has access to the Northbound and Southbound OVN databases. The connection strings to these databases are defined in the agent configuration file:

[ovn]
ovn_nb_connection = tcp:192.168.10.100:6641
ovn_sb_connection = tcp:192.168.10.100:6642
[ovs]
ovsdb_connection = tcp:127.0.0.1:6640

Plugable extensions

The OVN agent provides functionalities via extensions. When the agent is started, the OVNAgentExtensionManager instance loads the configured extensions. The extensions are defined in the stevedore entry points, under the section “neutron.agent.ovn.extensions”. The extensions are defined in the agent configuration file in the “extensions” parameter:

[DEFAULT]
extensions = metadata

Each extension will inherit from OVNAgentExtension, which provides the API for an OVN agent extension. The extensions are loaded in two steps:

  • Initialization: this phase involves the call of OVNAgentExtension.consume_api and OVNAgentExtension.initialize (in this order). The first one assigns the extension API to the instance. In this case, the OVN agent has a specific instance OVNAgentExtensionAPI that gives to the extensions the needed access to OVS and OVN databases, using the same IDL instance. The second one is not currently used in the base class; it could be used, for example as in the metadata extension, to spawn the process monitor.

  • Start: in this phase, the OVN and OVS database connections are established and can be accessed. The extension manager will call each extension OVNAgentExtension.start method.

Each extension should define a set of OVS, OVN Northbound and OVN Southbound tables to monitor, and a set of events related to these databases. The OVN agent will create the corresponding IDL connections using the conjunction of these tables and events.

Event-driven service

The OVN agent is a oslo_service.service.Service type class, that is launched when the script is executed. Once initialized, the service is waiting for new events that will trigger actions. As mentioned in the previous section, each extension will subscribe to a set of events from the OVN and OVS databases; these events will trigger a set of actions executed on the OVN agent.