diff --git a/neutron/extensions/allowedaddresspairs.py b/neutron/extensions/allowedaddresspairs.py index fff7151d11d..371188475e2 100644 --- a/neutron/extensions/allowedaddresspairs.py +++ b/neutron/extensions/allowedaddresspairs.py @@ -97,6 +97,7 @@ ADDRESS_PAIRS = 'allowed_address_pairs' EXTENDED_ATTRIBUTES_2_0 = { 'ports': { ADDRESS_PAIRS: {'allow_post': True, 'allow_put': True, + 'convert_to': attr.convert_none_to_empty_list, 'convert_list_to': attr.convert_kvp_list_to_dict, 'validate': {'type:validate_allowed_address_pairs': diff --git a/neutron/tests/unit/db/test_allowedaddresspairs_db.py b/neutron/tests/unit/db/test_allowedaddresspairs_db.py index c40685425c0..d0fa5ec342f 100644 --- a/neutron/tests/unit/db/test_allowedaddresspairs_db.py +++ b/neutron/tests/unit/db/test_allowedaddresspairs_db.py @@ -100,7 +100,7 @@ class TestAllowedAddressPairs(AllowedAddressPairDBTestCase): def test_create_port_allowed_address_pairs_bad_format(self): with self.network() as net: - bad_values = [False, True, None, 1.1, 1] + bad_values = [False, True, 1.1, 1] for value in bad_values: self._create_port( self.fmt, net['network']['id'], @@ -305,7 +305,13 @@ class TestAllowedAddressPairs(AllowedAddressPairDBTestCase): res = req.get_response(self.api) self.assertEqual(400, res.status_int) - def test_create_port_remove_allowed_address_pairs(self): + def test_create_port_remove_allowed_address_pairs_with_list(self): + self._test_create_port_remove_allowed_address_pairs([]) + + def test_create_port_remove_allowed_address_pairs_with_none(self): + self._test_create_port_remove_allowed_address_pairs(None) + + def _test_create_port_remove_allowed_address_pairs(self, update_value): with self.network() as net: address_pairs = [{'mac_address': '00:00:00:00:00:01', 'ip_address': '10.0.0.1'}] @@ -313,7 +319,7 @@ class TestAllowedAddressPairs(AllowedAddressPairDBTestCase): arg_list=(addr_pair.ADDRESS_PAIRS,), allowed_address_pairs=address_pairs) port = self.deserialize(self.fmt, res) - update_port = {'port': {addr_pair.ADDRESS_PAIRS: []}} + update_port = {'port': {addr_pair.ADDRESS_PAIRS: update_value}} req = self.new_update_request('ports', update_port, port['port']['id']) port = self.deserialize(self.fmt, req.get_response(self.api)) diff --git a/releasenotes/notes/clear-allowed-address-pairs-with-none-4757bcca78076c9e.yaml b/releasenotes/notes/clear-allowed-address-pairs-with-none-4757bcca78076c9e.yaml new file mode 100644 index 00000000000..112453d9c5e --- /dev/null +++ b/releasenotes/notes/clear-allowed-address-pairs-with-none-4757bcca78076c9e.yaml @@ -0,0 +1,9 @@ +--- +prelude: > + Allowed address pairs can now be cleared by passing + None in addition to an empty list. This is to make + it possible to use the --action=clear option with + the neutron client. + neutron port-update --allowed-address-pairs action=clear +fixes: + - Fixes bug 1537734