diff --git a/neutron/agent/dhcp/agent.py b/neutron/agent/dhcp/agent.py index 6c093496e0f..4722e0fd5c3 100644 --- a/neutron/agent/dhcp/agent.py +++ b/neutron/agent/dhcp/agent.py @@ -438,6 +438,7 @@ class DhcpAgent(manager.Manager): self.cache.put_port(updated_port) self.call_driver(driver_action, network) self.dhcp_ready_ports.add(updated_port.id) + self.update_isolated_metadata_proxy(network) def _is_port_on_this_agent(self, port): thishost = utils.get_dhcp_agent_device_id( @@ -468,6 +469,7 @@ class DhcpAgent(manager.Manager): self.schedule_resync("Agent port was deleted", port.network_id) else: self.call_driver('reload_allocations', network) + self.update_isolated_metadata_proxy(network) def update_isolated_metadata_proxy(self, network): """Spawn or kill metadata proxy. diff --git a/neutron/tests/unit/agent/dhcp/test_agent.py b/neutron/tests/unit/agent/dhcp/test_agent.py index e4d197c3861..4cb1c26bcd0 100644 --- a/neutron/tests/unit/agent/dhcp/test_agent.py +++ b/neutron/tests/unit/agent/dhcp/test_agent.py @@ -1013,12 +1013,15 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): payload = dict(port=fake_port2) self.cache.get_network_by_id.return_value = fake_network self.cache.get_port_by_id.return_value = fake_port2 - self.dhcp.port_update_end(None, payload) - self.cache.assert_has_calls( - [mock.call.get_network_by_id(fake_port2.network_id), - mock.call.put_port(mock.ANY)]) - self.call_driver.assert_called_once_with('reload_allocations', - fake_network) + with mock.patch.object( + self.dhcp, 'update_isolated_metadata_proxy') as ump: + self.dhcp.port_update_end(None, payload) + self.cache.assert_has_calls( + [mock.call.get_network_by_id(fake_port2.network_id), + mock.call.put_port(mock.ANY)]) + self.call_driver.assert_called_once_with('reload_allocations', + fake_network) + self.assertTrue(ump.called) def test_port_update_end_grabs_lock(self): payload = dict(port=fake_port2) @@ -1034,12 +1037,15 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): updated_fake_port1 = copy.deepcopy(fake_port1) updated_fake_port1.fixed_ips[0].ip_address = '172.9.9.99' self.cache.get_port_by_id.return_value = updated_fake_port1 - self.dhcp.port_update_end(None, payload) - self.cache.assert_has_calls( - [mock.call.get_network_by_id(fake_port1.network_id), - mock.call.put_port(mock.ANY)]) - self.call_driver.assert_has_calls( - [mock.call.call_driver('reload_allocations', fake_network)]) + with mock.patch.object( + self.dhcp, 'update_isolated_metadata_proxy') as ump: + self.dhcp.port_update_end(None, payload) + self.cache.assert_has_calls( + [mock.call.get_network_by_id(fake_port1.network_id), + mock.call.put_port(mock.ANY)]) + self.call_driver.assert_has_calls( + [mock.call.call_driver('reload_allocations', fake_network)]) + self.assertTrue(ump.called) def test_port_update_change_subnet_on_dhcp_agents_port(self): self.cache.get_network_by_id.return_value = fake_network @@ -1092,15 +1098,18 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): self.cache.get_network_by_id.return_value = fake_network self.cache.get_port_by_id.return_value = fake_port2 - self.dhcp.port_delete_end(None, payload) - self.cache.assert_has_calls( - [mock.call.get_port_by_id(fake_port2.id), - mock.call.deleted_ports.add(fake_port2.id), - mock.call.get_port_by_id(fake_port2.id), - mock.call.get_network_by_id(fake_network.id), - mock.call.remove_port(fake_port2)]) - self.call_driver.assert_has_calls( - [mock.call.call_driver('reload_allocations', fake_network)]) + with mock.patch.object( + self.dhcp, 'update_isolated_metadata_proxy') as ump: + self.dhcp.port_delete_end(None, payload) + self.cache.assert_has_calls( + [mock.call.get_port_by_id(fake_port2.id), + mock.call.deleted_ports.add(fake_port2.id), + mock.call.get_port_by_id(fake_port2.id), + mock.call.get_network_by_id(fake_network.id), + mock.call.remove_port(fake_port2)]) + self.call_driver.assert_has_calls( + [mock.call.call_driver('reload_allocations', fake_network)]) + self.assertTrue(ump.called) def test_port_delete_end_unknown_port(self): payload = dict(port_id='unknown')