Neutron server was not compatible with member actions

Register a new extension into Neutron server, and this extension
contains a member action. if new member action contains the "update"
string. As a result, Neutron server check the target whether contains
"ATTRIBUTES_TO_UPDATE". Because this is a member action so that neutron
server will not go "_update" method normally but "_handle_action"
method. So the exception happens KeyError: 'attributes_to_update'.

Co-Authored-By: zhang ping<ping.zhang@easystack.cn>
Change-Id: Ie8bb7b9af42a82aada28d2bcdfd5b0e573ad9778
Closes-Bug: #1606455
(cherry picked from commit daa8e1b1b0)
This commit is contained in:
lilintan 2016-09-28 14:12:38 +08:00 committed by Daniel Alvarez
parent 90db5afe2b
commit 83938e7cf8
2 changed files with 7 additions and 1 deletions

View File

@ -87,7 +87,7 @@ def set_rules(policies, overwrite=True):
def _is_attribute_explicitly_set(attribute_name, resource, target, action):
"""Verify that an attribute is present and is explicitly set."""
if 'update' in action:
if target.get(const.ATTRIBUTES_TO_UPDATE):
# In the case of update, the function should not pay attention to a
# default value of an attribute, but check whether it was explicitly
# marked as being updated instead.

View File

@ -460,6 +460,12 @@ class NeutronPolicyTestCase(base.BaseTestCase):
result = policy._build_match_rule(action, target, None)
self.assertEqual("rule:" + action, str(result))
def test_build_match_rule_normal_pluralized_when_update(self):
action = "update_" + FAKE_RESOURCE_NAME
target = {}
result = policy._build_match_rule(action, target, None)
self.assertEqual("rule:" + action, str(result))
def test_enforce_subattribute(self):
action = "create_" + FAKE_RESOURCE_NAME
target = {'tenant_id': 'fake', 'attr': {'sub_attr_1': 'x'}}