[OVN] Try to bind ports only to the ovn-controller agents

Patch [1] added getting ovn agents from the agents cache and check
if agent is alive to bound port to it.
Small issue with it was that it could check e.g. ovn metadata agent from
the host as it was only filtering agents by the host on which they are.

This patch adds filter on the agent_type so only ovn-controller agents
are taken from the cache.

[1] https://review.opendev.org/c/openstack/neutron/+/825428

Conflicts:
    neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py
    neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py

Related-Bug: #1958501
Change-Id: If065204d7521c480656a22fb078bbe6273b5fc70
(cherry picked from commit eda45de839)
(cherry picked from commit 601b01f82b)
This commit is contained in:
Slawek Kaplonski 2022-08-17 14:00:33 +02:00
parent 461d30debc
commit c51d6d117a
2 changed files with 11 additions and 5 deletions

View File

@ -951,7 +951,9 @@ class OVNMechanismDriver(api.MechanismDriver):
# OVN chassis information is needed to ensure a valid port bind.
# Collect port binding data and refuse binding if the OVN chassis
# cannot be found or is dead.
agents = n_agent.AgentCache().get_agents({'host': context.host})
agents = n_agent.AgentCache().get_agents(
{'host': context.host,
'agent_type': ovn_const.OVN_CONTROLLER_TYPES})
if not agents:
LOG.warning('Refusing to bind port %(port_id)s due to '
'no OVN chassis for host: %(host)s',

View File

@ -1194,7 +1194,8 @@ class TestOVNMechanismDriver(TestOVNMechanismDriverBase):
fake_port, fake_host, fake_segments)
self.mech_driver.bind_port(fake_port_context)
neutron_agent.AgentCache().get_agents.assert_called_once_with(
{'host': fake_host})
{'host': fake_host,
'agent_type': ovn_const.OVN_CONTROLLER_TYPES})
fake_port_context.set_binding.assert_not_called()
def test_bind_port_host_not_found(self):
@ -1224,7 +1225,8 @@ class TestOVNMechanismDriver(TestOVNMechanismDriverBase):
fake_port, fake_host, fake_segments)
self.mech_driver.bind_port(fake_port_context)
neutron_agent.AgentCache().get_agents.assert_called_once_with(
{'host': fake_host})
{'host': fake_host,
'agent_type': ovn_const.OVN_CONTROLLER_TYPES})
fake_port_context.set_binding.assert_called_once_with(
fake_segments[0]['id'],
portbindings.VIF_TYPE_OVS,
@ -1239,7 +1241,8 @@ class TestOVNMechanismDriver(TestOVNMechanismDriverBase):
fake_port, fake_host, fake_segments)
self.mech_driver.bind_port(fake_port_context)
neutron_agent.AgentCache().get_agents.assert_called_once_with(
{'host': fake_host})
{'host': fake_host,
'agent_type': ovn_const.OVN_CONTROLLER_TYPES})
fake_port_context.set_binding.assert_called_once_with(
fake_segments[0]['id'],
portbindings.VIF_TYPE_OVS,
@ -1260,7 +1263,8 @@ class TestOVNMechanismDriver(TestOVNMechanismDriverBase):
fake_port, fake_host, fake_segments)
self.mech_driver.bind_port(fake_port_context)
neutron_agent.AgentCache().get_agents.assert_called_once_with(
{'host': fake_host})
{'host': fake_host,
'agent_type': ovn_const.OVN_CONTROLLER_TYPES})
fake_port_context.set_binding.assert_called_once_with(
fake_segments[0]['id'],
portbindings.VIF_TYPE_OVS,