← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1606455] [NEW] Neutron server was not compatible with member actions

 

Public bug reported:

====== Problem Description =======

  Register a new extension into Neutron server, and this extension
contains a member action. Just like this:

    @classmethod
    def get_resources(cls):
        """Returns rate limit resources. """
        plural_mappings = resource_helper.build_plural_mappings(
            {}, EXTENDED_ATTRIBUTES_2_0)
        attr.PLURALS.update(plural_mappings)
        action_map = {'floatingip': {
            'update_floatingip_ratelimit': 'PUT'}
        }
        return resource_helper.build_resource_info(plural_mappings,
                                                   EXTENDED_ATTRIBUTES_2_0,
                                                   constants.L3_ROUTER_NAT,
                                                   action_map=action_map)

  Adding a new member action named "update_floatingip_ratelimit".
Exception will happen by calling this method by a non admin user.

  Exception reports:

    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/api/v2/resource.py", line 83, in resource
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     result = method(request=request, **args)
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 146, in wrapper
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     ectxt.value = e.inner_exc
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 195, in __exit__
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 136, in wrapper
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     return f(*args, **kwargs)
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 216, in _handle_action
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     pluralized=self._collection)
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 399, in enforce
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     pluralized)
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 324, in _prepare_check
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     match_rule = _build_match_rule(action, target, pluralized)
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 168, in _build_match_rule
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     target, action):
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 95, in _is_attribute_explicitly_set
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and
    2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource KeyError: 'attributes_to_update'

Because 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. It will go "_handle_action" method. So the
exception happens.


====== How to fix ======
>>> if 'update' in action:
change into
>>> if 'update' in action and target.get(const.ATTRIBUTES_TO_UPDATE):

By doing such change, will solve this problem.

** Affects: neutron
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1606455

Title:
  Neutron server was not compatible with member actions

Status in neutron:
  New

Bug description:
  ====== Problem Description =======

    Register a new extension into Neutron server, and this extension
  contains a member action. Just like this:

      @classmethod
      def get_resources(cls):
          """Returns rate limit resources. """
          plural_mappings = resource_helper.build_plural_mappings(
              {}, EXTENDED_ATTRIBUTES_2_0)
          attr.PLURALS.update(plural_mappings)
          action_map = {'floatingip': {
              'update_floatingip_ratelimit': 'PUT'}
          }
          return resource_helper.build_resource_info(plural_mappings,
                                                     EXTENDED_ATTRIBUTES_2_0,
                                                     constants.L3_ROUTER_NAT,
                                                     action_map=action_map)

    Adding a new member action named "update_floatingip_ratelimit".
  Exception will happen by calling this method by a non admin user.

    Exception reports:

      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/api/v2/resource.py", line 83, in resource
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     result = method(request=request, **args)
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 146, in wrapper
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     ectxt.value = e.inner_exc
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 195, in __exit__
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 136, in wrapper
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     return f(*args, **kwargs)
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 216, in _handle_action
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     pluralized=self._collection)
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 399, in enforce
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     pluralized)
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 324, in _prepare_check
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     match_rule = _build_match_rule(action, target, pluralized)
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 168, in _build_match_rule
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     target, action):
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource   File "/usr/lib/python2.7/site-packages/neutron/policy.py", line 95, in _is_attribute_explicitly_set
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource     return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and
      2016-07-26 10:07:28.813 7562 ERROR neutron.api.v2.resource KeyError: 'attributes_to_update'

  Because 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. It will go
  "_handle_action" method. So the exception happens.

  
  ====== How to fix ======
  >>> if 'update' in action:
  change into
  >>> if 'update' in action and target.get(const.ATTRIBUTES_TO_UPDATE):

  By doing such change, will solve this problem.

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1606455/+subscriptions


Follow ups