From 8052c3985325e9067d83496936092ee9334df75b Mon Sep 17 00:00:00 2001 From: Kevin Benton <blak111@gmail.com> Date: Wed, 27 Jan 2016 04:34:54 -0800 Subject: [PATCH] Allow address pairs to be cleared with None When the neutron client attempts to clear the allowed address pairs using the '--action=clear' CLI param, it sends a value of None to the Neutron server for allowed address pairs. However, the allowed address pairs extension was only allowing an empty list to clear the pairs. This patch just converts None to an empty list on allowed address pairs to be compatible with the client. APIImpact Closes-Bug: #1537734 Change-Id: Iba618b3e07bd3bdc202a9577954d7b97c2a5bf09 --- neutron/extensions/allowedaddresspairs.py | 1 + neutron/tests/unit/db/test_allowedaddresspairs_db.py | 12 +++++++++--- ...wed-address-pairs-with-none-4757bcca78076c9e.yaml | 9 +++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/clear-allowed-address-pairs-with-none-4757bcca78076c9e.yaml diff --git a/neutron/extensions/allowedaddresspairs.py b/neutron/extensions/allowedaddresspairs.py index 18884b3a364..cb11eb4bfd7 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 491e773edbd..8bfb44b1ba6 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 <uuid> --allowed-address-pairs action=clear +fixes: + - Fixes bug 1537734