diff --git a/neutron/api/v2/base.py b/neutron/api/v2/base.py index 0749d148b1..5e6b6a5115 100644 --- a/neutron/api/v2/base.py +++ b/neutron/api/v2/base.py @@ -460,8 +460,8 @@ class Controller(object): # but pass only attributes in the original body and required # by the policy engine to the policy 'brain' field_list = [name for (name, value) in self._attr_info.iteritems() - if ('required_by_policy' in value and - value['required_by_policy'] or + if (value.get('required_by_policy') or + value.get('primary_key') or 'default' not in value)] orig_obj = self._item(request, id, field_list=field_list, parent_id=parent_id) diff --git a/neutron/tests/unit/test_api_v2.py b/neutron/tests/unit/test_api_v2.py index 4e2cc76f26..200aa2966b 100644 --- a/neutron/tests/unit/test_api_v2.py +++ b/neutron/tests/unit/test_api_v2.py @@ -1085,6 +1085,10 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase): self.serialize(data), extra_environ=env, expect_errors=expect_errors) + # Ensure id attribute is included in fields returned by GET call + # in update procedure. + self.assertEqual(1, instance.get_network.call_count) + self.assertIn('id', instance.get_network.call_args[1]['fields']) self.assertEqual(res.status_int, expected_code) def test_update_noauth(self):