Do not ignore attributes in bulk port create

With unit tests that would have caught the bug.

Change-Id: Ia4a68bdccecfbcb9d1aa49e2b14e06d139891c0f
Closes-Bug: #2003553
(cherry picked from commit ed68ba4a4c)
(cherry picked from commit 1b086f1c1f)
This commit is contained in:
Bence Romsics 2023-01-20 16:26:21 +01:00 committed by Lajos Katona
parent 5206387493
commit 9df4a7e398
2 changed files with 52 additions and 3 deletions

View File

@ -1717,13 +1717,13 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
self._process_port_binding(mech_context, port_dict)
# process allowed address pairs
db_port_obj[addr_apidef.ADDRESS_PAIRS] = (
port_dict[addr_apidef.ADDRESS_PAIRS] = (
self._process_create_allowed_address_pairs(
context, port_dict,
port_dict.get(addr_apidef.ADDRESS_PAIRS)))
pdata.get(addr_apidef.ADDRESS_PAIRS)))
# handle DHCP setup
dhcp_opts = port_dict.get(edo_ext.EXTRADHCPOPTS, [])
dhcp_opts = pdata.get(edo_ext.EXTRADHCPOPTS, [])
self._process_port_create_extra_dhcp_opts(context, port_dict,
dhcp_opts)
# send PRECOMMIT_CREATE notification

View File

@ -1688,6 +1688,55 @@ class TestMl2PortsV2(test_plugin.TestPortsV2, Ml2PluginV2TestCase):
ctx, ports
)
def test_create_ports_bulk_with_allowed_address_pairs(self):
ctx = context.get_admin_context()
with self.network() as net:
aap = [{
'ip_address': '1.2.3.4',
'mac_address': '01:23:45:67:89:ab',
}]
ports_in = {
'ports': [{'port': {
'allowed_address_pairs': aap,
'network_id': net['network']['id'],
'project_id': self._tenant_id,
'admin_state_up': True,
'device_id': '',
'device_owner': '',
'fixed_ips': constants.ATTR_NOT_SPECIFIED,
'name': '',
'security_groups': constants.ATTR_NOT_SPECIFIED,
}}]}
ports_out = self.plugin.create_port_bulk(ctx, ports_in)
self.assertEqual(aap, ports_out[0]['allowed_address_pairs'])
def test_create_ports_bulk_with_extra_dhcp_opts(self):
ctx = context.get_admin_context()
with self.network() as net:
edo = [{
'opt_name': 'domain-name-servers',
'opt_value': '10.0.0.1',
'ip_version': 4,
}]
ports_in = {
'ports': [{'port': {
'extra_dhcp_opts': edo,
'network_id': net['network']['id'],
'project_id': self._tenant_id,
'admin_state_up': True,
'device_id': '',
'device_owner': '',
'fixed_ips': constants.ATTR_NOT_SPECIFIED,
'name': '',
'security_groups': constants.ATTR_NOT_SPECIFIED,
}}]}
ports_out = self.plugin.create_port_bulk(ctx, ports_in)
self.assertEqual(edo, ports_out[0]['extra_dhcp_opts'])
def test_delete_port_no_notify_in_disassociate_floatingips(self):
ctx = context.get_admin_context()
plugin = directory.get_plugin()