Merge "[OVN] The OVN agent should be able to re-register"
This commit is contained in:
@@ -44,9 +44,7 @@ class SbGlobalUpdateEvent(row_event.RowEvent):
|
||||
self.event_name = self.__class__.__name__
|
||||
|
||||
def run(self, event, row, old):
|
||||
ext_ids = {ovn_const.OVN_AGENT_NEUTRON_SB_CFG_KEY: str(row.nb_cfg)}
|
||||
self.ovn_agent.sb_idl.db_set('Chassis_Private', self.ovn_agent.chassis,
|
||||
('external_ids', ext_ids)).execute()
|
||||
self.ovn_agent.update_neutron_sb_cfg_key(nb_cfg=row.nb_cfg)
|
||||
|
||||
|
||||
class ChassisPrivateCreateEvent(row_event.RowEvent):
|
||||
@@ -73,6 +71,7 @@ class ChassisPrivateCreateEvent(row_event.RowEvent):
|
||||
# Re-register the OVN agent with the local chassis in case its
|
||||
# entry was re-created (happens when restarting the ovn-controller)
|
||||
self.ovn_agent.register_ovn_agent()
|
||||
self.ovn_agent.update_neutron_sb_cfg_key()
|
||||
|
||||
|
||||
class OVNNeutronAgent(service.Service):
|
||||
@@ -205,9 +204,10 @@ class OVNNeutronAgent(service.Service):
|
||||
'Chassis_Private', self.chassis, 'external_ids',
|
||||
*metadata_keys, if_exists=True).execute(check_error=True)
|
||||
|
||||
def update_neutron_sb_cfg_key(self):
|
||||
nb_cfg = self.sb_idl.db_get('Chassis_Private',
|
||||
self.chassis, 'nb_cfg').execute()
|
||||
def update_neutron_sb_cfg_key(self, nb_cfg=None):
|
||||
nb_cfg = (nb_cfg or
|
||||
self.sb_idl.db_get('Chassis_Private',
|
||||
self.chassis, 'nb_cfg').execute())
|
||||
external_ids = {ovn_const.OVN_AGENT_NEUTRON_SB_CFG_KEY: str(nb_cfg)}
|
||||
self.sb_idl.db_set(
|
||||
'Chassis_Private', self.chassis,
|
||||
|
||||
@@ -19,6 +19,7 @@ import threading
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from ovsdbapp.backend.ovs_idl import event as row_event
|
||||
from ovsdbapp.backend.ovs_idl import vlog
|
||||
|
||||
from neutron.agent.linux import external_process
|
||||
@@ -65,6 +66,29 @@ def _sync_lock(f):
|
||||
return wrapped
|
||||
|
||||
|
||||
|
||||
class ChassisPrivateCreateEvent(extension_manager.OVNExtensionEvent,
|
||||
row_event.RowEvent):
|
||||
"""Row create event - Chassis name == our_chassis."""
|
||||
def __init__(self, ovn_agent):
|
||||
self._first_time = True
|
||||
events = (self.ROW_CREATE,)
|
||||
super().__init__(events, 'Chassis_Private', None)
|
||||
self._agent = ovn_agent
|
||||
self.conditions = (('name', '=', self._agent.chassis),)
|
||||
self.event_name = self.__class__.__name__
|
||||
|
||||
def run(self, event, row, old):
|
||||
if self._first_time:
|
||||
self._first_time = False
|
||||
return
|
||||
|
||||
# Re-register the OVN agent with the local chassis in case its
|
||||
# entry was re-created (happens when restarting the ovn-controller)
|
||||
self.agent._update_chassis_private_config()
|
||||
self.agent.sync()
|
||||
|
||||
|
||||
class MetadataExtension(extension_manager.OVNAgentExtension,
|
||||
metadata_agent.MetadataAgent):
|
||||
|
||||
@@ -115,6 +139,7 @@ class MetadataExtension(extension_manager.OVNAgentExtension,
|
||||
def sb_idl_events(self):
|
||||
return [metadata_agent.PortBindingUpdatedEvent,
|
||||
metadata_agent.PortBindingDeletedEvent,
|
||||
ChassisPrivateCreateEvent,
|
||||
]
|
||||
|
||||
# NOTE(ralonsoh): the following properties are needed during the migration
|
||||
|
||||
@@ -105,8 +105,13 @@ class TestOVNNeutronAgent(TestOVNNeutronAgentBase):
|
||||
ext_ids = self.ovn_agent.sb_idl.db_get(
|
||||
'Chassis_Private', self.chassis_name,
|
||||
'external_ids').execute(check_error=True)
|
||||
return (ext_ids.get(ovn_const.OVN_AGENT_NEUTRON_ID_KEY)
|
||||
is not None)
|
||||
neutron_id = (ext_ids.get(ovn_const.OVN_AGENT_NEUTRON_ID_KEY)
|
||||
is not None)
|
||||
agt_cfg = (ext_ids.get(ovn_const.OVN_AGENT_NEUTRON_SB_CFG_KEY)
|
||||
is not None)
|
||||
bridge = (ext_ids.get(ovn_const.OVN_AGENT_OVN_BRIDGE)
|
||||
is not None)
|
||||
return neutron_id and agt_cfg and bridge
|
||||
except idlutils.RowNotFound:
|
||||
return False
|
||||
|
||||
@@ -115,6 +120,7 @@ class TestOVNNeutronAgent(TestOVNNeutronAgentBase):
|
||||
self.ovn_agent.sb_idl.chassis_del(self.chassis_name).execute(
|
||||
check_error=True)
|
||||
self.add_fake_chassis(self.host_name, name=self.chassis_name)
|
||||
|
||||
n_utils.wait_until_true(_check_chassis_private, timeout=10)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user