[openstack-dev] [nova][api] Microversions. And why do we need API extensions for new API functionality?
jaypipes at gmail.com
Sun Mar 8 00:31:34 UTC 2015
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:
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:
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?
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
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
Why are we continuing to use these awkward, messy, and cumbersome API
Please, I am begging the Nova core team. Let us stop this madness. No
more API extensions.
More information about the OpenStack-dev