From a9323f0325cc4227ca6f1f0316913aa7a2d315f5 Mon Sep 17 00:00:00 2001 From: Sahid Orentino Ferdjaoui Date: Tue, 30 May 2023 12:09:56 +0200 Subject: [PATCH] dhcp/agent: fix 'get_metadata_bind_interface' driver call The 'get_metadata_bind_interface' driver call has a different behavior than other methods, it is expected to return metadata interface name. When introduced multisegments support this particularity was not taken into account. The fix is making the call acceptable in the purpose of the current driver interface. Closes-bug: #2015090 Signed-off-by: Sahid Orentino Ferdjaoui Change-Id: I08e686397238685c11b0de818caa399d69da04fd --- neutron/agent/dhcp/agent.py | 4 ++++ neutron/tests/unit/agent/dhcp/test_agent.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/neutron/agent/dhcp/agent.py b/neutron/agent/dhcp/agent.py index 208ebce743d..7057e65cd0d 100644 --- a/neutron/agent/dhcp/agent.py +++ b/neutron/agent/dhcp/agent.py @@ -206,6 +206,10 @@ class DhcpAgent(manager.Manager): action, action_kwargs) # There is nothing we can do. return + if action == 'get_metadata_bind_interface': + # Special condition, this action returns a string instead of a + # bool. + return self._call_driver(action, network, **action_kwargs) if 'segments' in network and network.segments: # In case of multi-segments network, let's group network per # segments. We can then create DHPC process per segmentation diff --git a/neutron/tests/unit/agent/dhcp/test_agent.py b/neutron/tests/unit/agent/dhcp/test_agent.py index 7bf48f017f1..795a5ee3332 100644 --- a/neutron/tests/unit/agent/dhcp/test_agent.py +++ b/neutron/tests/unit/agent/dhcp/test_agent.py @@ -405,6 +405,17 @@ class TestDhcpAgent(base.BaseTestCase): 'iface0', agent.call_driver('get_metadata_bind_interface', network)) + def test_call_driver_get_metadata_bind_interface_returns_segments(self): + network = fake_network + network.segments = [ + dhcp.DictModel(id='bbbbbbbb-bbbb-bbbb-bbbbbbbbbbbb')] + network.subnets[0] = fake_subnet1 + self.driver().get_metadata_bind_interface.return_value = 'iface0' + agent = dhcp_agent.DhcpAgent(cfg.CONF) + self.assertEqual( + 'iface0', + agent.call_driver('get_metadata_bind_interface', network)) + def _test_sync_state_helper(self, known_net_ids, active_net_ids): active_networks = set(mock.Mock(id=netid) for netid in active_net_ids)