[openstack-dev] [nova][api] Microversions. And why do we need API extensions for new API functionality?

Alex Xu soulxu at gmail.com
Tue Mar 10 08:55:24 UTC 2015


2015-03-10 3:37 GMT+08:00 Jay Pipes <jaypipes at gmail.com>:

> On 03/08/2015 08:10 AM, Alex Xu wrote:
>
>> Thanks for Jay point this out! If we have agreement on this and document
>> it, that will be great for guiding developer how to add new API.
>>
>> I know we didn't want extension for API. But I think we still
>> need modularity. I don't think we should put everything in a single
>> file, that file will become huge in the future and hard to maintenance.
>>
>
> I don't think everything should be in a single file either. In fact, I've
> never advocated for that.
>
>  We can make the 'extension' not configurable. Replace 'extension' with
>> another name, deprecate the extension info api int he future.... But
>> that is not mean we should put everything in a file.
>>
>
> I didn't say that in my email. I'm not sure where you got the impression I
> want to put everything in one file?
>
>  For modularity, we need define what should be in a separated module(it
>> is extension now.) There are three cases:
>>
>> 1. Add new resource
>>      This is totally worth to put in a separated module.
>>
>
> Agreed.
>
>  2. Add new sub-resource
>>      like server-tags, I prefer to put in a separated module, I don't
>> think put another 100 lines code in the servers.py is good choice.
>>
>
> Agreed, which is exactly what I said in my email:
>
> "Similarly, new microversion API functionality should live in a
> module, as a top-level (or subcollection) Controller in
> /nova/api/openstack/compute/, and should not be in the
> /nova/api/openstack/compute/plugins/ directory. Why? Because it's
> not a plugin."
>
>  3. extend attributes and methods for a existed resource
>>     like add new attributes for servers, we can choice one of existed
>> module to put it in. Just like this patch
>> https://review.openstack.org/#/c/155853/
>>     But for servers-tags, it's sub-resource, we can put it in its-own
>> module.
>>
>
> Agreed, and that's what I put in my email.
>
>  If we didn't want to support extension right now, we can begin from not
>> show servers-tags in extension info API first. That means extension info
>> is freeze now. We deprecated the extension info api in later version.
>>
>
> I don't understand what you're saying here. Could you elaborate? What I am
> asking for is for new functionality (like the server-tags subcollection
> resource), just add a new module called /nova/api/openstack/compute/server_tags.py,
> create a Controller object in that file with the new server tags resource,
> and don't use any of the API extensions framework whatsoever.
>
>
Ok, I think I see you now. Forgive me for any misunderstood.

Actually I mean we can freeze and depreciated the '/extensions' API at
here. We can freeze the '/extensions' API now, didn't show server-tags
extension in that API.

Follow the discussion, I think there is two things related to 'extension'.
One is '/extensions' API, another one is plugin framework. And I added
devref about that https://review.openstack.org/162912

For the modularity, I put in separated patch
https://review.openstack.org/162913

Those two things I think we can discussion them separately. (Emm.....This
is kind of evidence about I misunderstood you)



> In addition to that, for the changes to the main GET /servers/{server_id}
> resource, use microversions to decorate the /nova/api/openstack/compute/servers.py.Controller.show()
> method for 2.4 and add a "tags" key to the dict (note: NOT a
> "os-server-tags:tags" key) returned by GET /servers/{server_id}. No use of
> API extensions needed.
>
> Best,
> -jay
>
>  Thanks
>> Alex
>>
>> 2015-03-08 8:31 GMT+08:00 Jay Pipes <jaypipes at gmail.com
>> <mailto:jaypipes at gmail.com>>:
>>
>>     Hi Stackers,
>>
>>     Now that microversions have been introduced to the Nova API (meaning
>>     we can now have novaclient request, say, version 2.3 of the Nova API
>>     using the special X-OpenStack-Nova-API-Version HTTP header), is
>>     there any good reason to require API extensions at all for *new*
>>     functionality.
>>
>>     Sergey Nikitin is currently in the process of code review for the
>>     final patch that adds server instance tagging to the Nova API:
>>
>>     https://review.openstack.org/#__/c/128940
>>     <https://review.openstack.org/#/c/128940>
>>
>>     Unfortunately, for some reason I really don't understand, Sergey is
>>     being required to create an API extension called "os-server-tags" in
>>     order to add the server tag functionality to the API. The patch
>>     implements the 2.4 Nova API microversion, though, as you can see
>>     from this part of the patch:
>>
>>     https://review.openstack.org/#__/c/128940/43/nova/api/__
>> openstack/compute/plugins/v3/__server_tags.py
>>     <https://review.openstack.org/#/c/128940/43/nova/api/
>> openstack/compute/plugins/v3/server_tags.py>
>>
>>     What is the point of creating a new "plugin"/API extension for this
>>     new functionality? Why can't we just modify the
>>     nova/api/openstack/compute/__server.py Controller.show() method and
>>     decorate it with a 2.4 microversion that adds a "tags" attribute to
>>     the returned server dictionary?
>>
>>     https://github.com/openstack/__nova/blob/master/nova/api/__
>> openstack/compute/servers.py#__L369
>>     <https://github.com/openstack/nova/blob/master/nova/api/
>> openstack/compute/servers.py#L369>
>>
>>     Because we're using an API extension for this new server tags
>>     functionality, we are instead having the extension "extend" the
>>     server dictionary with an "os-server-tags:tags" key containing the
>>     list of string tags.
>>
>>     This is ugly and pointless. We don't need to use API extensions any
>>     more for this stuff.
>>
>>     A client knows that server tags are supported by the 2.4 API
>>     microversion. If the client requests the 2.4+ API, then we should
>>     just include the "tags" attribute in the server dictionary.
>>
>>     Similarly, new microversion API functionality should live in a
>>     module, as a top-level (or subcollection) Controller in
>>     /nova/api/openstack/compute/, and should not be in the
>>     /nova/api/openstack/compute/__plugins/ directory. Why? Because it's
>>     not a plugin.
>>
>>     Why are we continuing to use these awkward, messy, and cumbersome
>>     API extensions?
>>
>>     Please, I am begging the Nova core team. Let us stop this madness.
>>     No more API extensions.
>>
>>     Best,
>>     -jay
>>
>>     ____________________________________________________________
>> __________________
>>     OpenStack Development Mailing List (not for usage questions)
>>     Unsubscribe:
>>     OpenStack-dev-request at lists.__openstack.org?subject:__unsubscribe
>>     <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe
>> >
>>     http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev
>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
>>
>>
>>
>>
>> ____________________________________________________________
>> ______________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:
>> unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150310/a85e146c/attachment.html>


More information about the OpenStack-dev mailing list