[openstack-dev] [quantum] Quantum extension framework issue

Dan Wendlandt dan at nicira.com
Wed Nov 14 15:27:07 UTC 2012


Hi Oleg,

Folks from the API-subteam can correct me, but I believe this use model is
outside of what the API framework was trying to enable with "actions".  The
idea is that you use POST/DELETE to create an delete API "resources" (which
actually have UUIDs, for example, the "pool" in your example below) and
then do a PUT to an "action" to cause some kind of change that you can
affect on a resource (e.g., "add_health_monitor" or
"remove_health_monitor").  It sounds like what you are proposing is more
treating "health_monitors" almost as a "sub-resource", which is not really
what the "actions" stuff was designed for.

I haven't been deeply involved in the LBaaS api design discussion though,
so I'd also like to hear from Salvatore, et al. on the API sub-team.

Dan


On Wed, Nov 14, 2012 at 6:05 AM, Oleg Bondarev <obondarev at mirantis.com>wrote:

> Hi guys,****
>
> ** **
>
> While working on the API extension for LBaaS I didn’t find a way to use
> custom member actions if they have the same name and differ only by request
> method, for example****
>
> ** **
>
> List all health monitors of a specific pool: GET
> /pool/pool_id/health_monitors****
>
> Associate health monitors with a pool: POST /pool/pool_id/health_monitors*
> ***
>
> ** **
>
> In quantum extension framework we pass “health_monitors” as member
> actions for a controller (quantum.api.v2.base.create_resource())****
>
> ** **
>
> member_actions = {'health_monitors': 'GET',****
>
>                                         'health_monitors': 'POST'}****
>
> ** **
>
> controller = base.create_resource(collection_name,****
>
>                                     resource_name,****
>
>                                     plugin, params,****
>
>                                     member_actions=member_actions)****
>
> ** **
>
> According to the Controller implementation it dispatches all custom member
> actions to its plugin attr:****
>
> ** **
>
> def __getattr__(self, name):****
>
>         if name in self._member_actions:****
>
>             def _handle_action(request, id, body=None):****
>
>                 return getattr(self._plugin, name)(request.context, id,
> body)****
>
>             return _handle_action****
>
>         else:****
>
>             raise AttributeError****
>
> ** **
>
> Where request.context is of type quantum.context.Context and does not
> contain info about request method.****
>
> As a result there is no way to distinguish two custom actions in the
> plugin. ****
>
> Is it an issue in the framework?****
>
> ** **
>
> Possible solution may be in concatenation of request method and action
> name (“get_health_monitors”, “post_health_monitors”) in a controller before
> dispatching them to a plugin.****
>
> What do you think? ****
>
> ** **
>
> Thanks,****
>
> Oleg****
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>


-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dan Wendlandt
Nicira, Inc: www.nicira.com
twitter: danwendlandt
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20121114/e3307419/attachment.html>


More information about the OpenStack-dev mailing list