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

Jay Pipes jaypipes at gmail.com
Sun Mar 8 00:31:34 UTC 2015


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

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

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

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



More information about the OpenStack-dev mailing list