Skip to content

Commit ec9eabf

Browse files
Miguel Lavallemiguellavalle
authored andcommitted
Handle several dhcp agents for metadata over ipv6
[0] added the capability to the dhcp agent of handling metadata traffic over ipv6. However, the added code doesn't handle the case when a network is managed by more than one dhcp agent. This change fixes the issue. [0] https://review.opendev.org/c/openstack/neutron/+/715482 Change-Id: Ie1e0739f2c7390031af196e72c678ee626d0f8b8 Closes-Bug: #1989979 (cherry picked from commit 41a7479)
1 parent c002627 commit ec9eabf

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

neutron/agent/dhcp/agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ def enable_isolated_metadata_proxy(self, network):
753753
'get_metadata_bind_interface', network, port=p)
754754
for p in network.ports
755755
if (p.device_owner == constants.DEVICE_OWNER_DHCP and
756-
p.admin_state_up)
756+
p.admin_state_up and self._is_port_on_this_agent(p))
757757
]
758758
if len(dhcp_ifaces) == 1:
759759
kwargs['bind_interface'] = dhcp_ifaces[0]

neutron/tests/unit/agent/dhcp/test_agent.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,18 +1088,38 @@ def _test_enable_isolated_metadata_proxy_ipv6(self, network):
10881088

10891089
def test_enable_isolated_metadata_proxy_with_metadata_network_ipv6(self):
10901090
network = copy.deepcopy(fake_meta_network)
1091-
network.ports = [fake_dhcp_port]
1091+
dhcp_port_this_host = copy.deepcopy(fake_dhcp_port)
1092+
dhcp_port_this_host.device_id = utils.get_dhcp_agent_device_id(
1093+
network.id, self.dhcp.conf.host)
1094+
network.ports = [dhcp_port_this_host]
10921095
self._test_enable_isolated_metadata_proxy_ipv6(network)
10931096

10941097
def test_enable_isolated_metadata_proxy_with_metadata_network_dvr_ipv6(
10951098
self):
10961099
network = copy.deepcopy(fake_meta_dvr_network)
1097-
network.ports = [fake_dhcp_port]
1100+
dhcp_port_this_host = copy.deepcopy(fake_dhcp_port)
1101+
dhcp_port_this_host.device_id = utils.get_dhcp_agent_device_id(
1102+
network.id, self.dhcp.conf.host)
1103+
network.ports = [dhcp_port_this_host]
10981104
self._test_enable_isolated_metadata_proxy_ipv6(network)
10991105

11001106
def test_enable_isolated_metadata_proxy_with_dist_network_ipv6(self):
11011107
network = copy.deepcopy(fake_dist_network)
1102-
network.ports = [fake_dhcp_port]
1108+
dhcp_port_this_host = copy.deepcopy(fake_dhcp_port)
1109+
dhcp_port_this_host.device_id = utils.get_dhcp_agent_device_id(
1110+
network.id, self.dhcp.conf.host)
1111+
network.ports = [dhcp_port_this_host]
1112+
self._test_enable_isolated_metadata_proxy_ipv6(network)
1113+
1114+
def test_enable_isolated_metadata_proxy_with_2_agents_network_ipv6(self):
1115+
network = copy.deepcopy(fake_meta_network)
1116+
dhcp_port_this_host = copy.deepcopy(fake_dhcp_port)
1117+
dhcp_port_this_host.device_id = utils.get_dhcp_agent_device_id(
1118+
network.id, self.dhcp.conf.host)
1119+
dhcp_port_other_host = copy.deepcopy(fake_dhcp_port)
1120+
dhcp_port_other_host.device_id = utils.get_dhcp_agent_device_id(
1121+
network.id, 'otherhostname')
1122+
network.ports = [dhcp_port_this_host, dhcp_port_other_host]
11031123
self._test_enable_isolated_metadata_proxy_ipv6(network)
11041124

11051125
def _test_disable_isolated_metadata_proxy(self, network):

0 commit comments

Comments
 (0)