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
andOVNAgentExtension.initialize
(in this order). The first one assigns the extension API to the instance. In this case, the OVN agent has a specific instanceOVNAgentExtensionAPI
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.