[openstack-dev] [Nova] Some ideas for micro-version implementation

Anne Gentle anne at openstack.org
Mon Sep 22 14:47:50 UTC 2014


On Mon, Sep 22, 2014 at 4:29 AM, Kenichi Oomichi <oomichi at mxs.nes.nec.co.jp>
wrote:

> Hi Alex,
>
> Thank you for doing this.
>
> > -----Original Message-----
> > From: Alex Xu [mailto:xuhj at linux.vnet.ibm.com]
> > Sent: Friday, September 19, 2014 3:40 PM
> > To: OpenStack Development Mailing List
> > Subject: [openstack-dev] [Nova] Some ideas for micro-version
> implementation
> >
> > Close to Kilo, it is time to think about what's next for nova API. In
> > Kilo, we
> > will continue develop the important feature micro-version.
> >
> > In previous v2 on v3 propose, it's include some implementations can be
> > used for micro-version.
> > (https://review.openstack.org/#/c/84695/19/specs/juno/v2-on-v3-api.rst)
> > But finally, those implementations was considered too complex.
> >
> > So I'm try to find out more simple implementation and solution for
> > micro-version.
> >
> > I wrote down some ideas as blog post at:
> > http://soulxu.github.io/blog/2014/09/12/one-option-for-nova-api/
> >
> > And for those ideas also already done some POC, you can find out in the
> > blog post.
> >
> > As discussion in the Nova API meeting, we want to bring it up to
> > mail-list to
> > discussion. Hope we can get more idea and option from all developers.
> >
> > We will appreciate for any comment and suggestion!
>

I would greatly appreciate this style guide to be finalized for
documentation purposes as well. Thanks for starting this write-up. I'd be
happy to write it up on a wiki page while we get agreement, would that be
helpful?


>
> Before discussing how to implement, I'd like to consider what we should
> implement. IIUC, the purpose of v3 API is to make consistent API with the
> backwards incompatible changes. Through huge discussion in Juno cycle, we
> knew that backwards incompatible changes of REST API would be huge pain
> against clients and we should avoid such changes as possible. If new APIs
> which are consistent in Nova API only are inconsistent for whole OpenStack
> projects, maybe we need to change them again for whole OpenStack
> consistency.
>
> For avoiding such situation, I think we need to define what is consistent
> REST API across projects. According to Alex's blog, The topics might be
>
>  - Input/Output attribute names
>  - Resource names
>  - Status code
>
> The following are hints for making consistent APIs from Nova v3 API
> experience,
> I'd like to know whether they are the best for API consistency.
>
> (1) Input/Output attribute names
> (1.1) These names should be snake_case.
>   eg: imageRef -> image_ref, flavorRef -> flavor_ref, hostId -> host_id
> (1.2) These names should contain extension names if they are provided in
> case of some extension loading.
>   eg: security_groups -> os-security-groups:security_groups
>       config_drive -> os-config-drive:config_drive
>

Do you mean that the os- prefix should be dropped? Or that it should be
maintained and added as needed?


> (1.3) Extension names should consist of hyphens and low chars.
>   eg: OS-EXT-AZ:availability_zone ->
> os-extended-availability-zone:availability_zone
>       OS-EXT-STS:task_state -> os-extended-status:task_state
>

Yes, I don't like the shoutyness of the ALL CAPS.


> (1.4) Extension names should contain the prefix "os-" if the extension is
> not core.
>   eg: rxtx_factor -> os-flavor-rxtx:rxtx_factor
>       os-flavor-access:is_public -> flavor-access:is_public (flavor-access
> extension became core)
>

Do we have a list of "core" yet?


> (1.5) The length of the first attribute depth should be one.
>   eg: "create a server" API with scheduler hints
>     -- v2 API input attribute sample
> ---------------------------------------
>       {
>           "server": {
>               "imageRef": "e5468cc9-3e91-4449-8c4f-e4203c71e365",
>               [..]
>           },
>           "OS-SCH-HNT:scheduler_hints": {
>               "same_host": "5a3dec46-a6e1-4c4d-93c0-8543f5ffe196"
>           }
>       }
>     -- v3 API input attribute sample
> ---------------------------------------
>       {
>           "server": {
>               "image_ref": "e5468cc9-3e91-4449-8c4f-e4203c71e365",
>               [..]
>               "os-scheduler-hints:scheduler_hints": {
>                   "same_host": "5a3dec46-a6e1-4c4d-93c0-8543f5ffe196"
>               }
>           }
>       }
>
> (2) Resource names
> (2.1) Resource names should consist of hyphens and low chars.
>   eg: /os-instance_usage_audit_log -> /os-instance-usage-audit-log
> (2.2) Resource names should contain the prefix "os-" if the extension is
> not core.
>   eg: /servers/diagnostics -> /servers/os-server-diagnostics
>       /os-flavor-access -> /flavor-access (flavor-access extension became
> core)
> (2.3) Action names should be snake_case.
>   eg: os-getConsoleOutput -> get_console_output
>       addTenantAccess -> add_tenant_access, removeTenantAccess ->
> remove_tenant_access
>
>
Yes to all of these.


> (3) Status code
> (3.1) Return 201(Created) if a resource creation/updating finishes before
> returning a response.
>   eg: "create a keypair" API: 200 -> 201
>       "create an agent" API: 200 -> 201
>       "create an aggregate" API: 200 -> 201
>

Do you mean a 200 becomes a 201? That's a huge doc impact and SDK impact,
is it worthwhile? If we do this change, the sooner the better, right?


> (3.2) Return 204(No Content) if a resource deletion finishes before
> returning a response.
>   eg: "delete a keypair" API: 200 -> 204
>       "delete an agent" API: 200 -> 204
>       "delete an aggregate" API: 200 -> 204
> (3.3) Return 202(Accepted) if a request doesn't finish yet before
> returning a response.
>   eg: "rescue a server" API: 200 ->202
>
>
Same here, sooner the better if these are better response codes.


> Any comments are welcome.
>
>
The TC had an action item a while back (a few months) to start an API style
guide. This seems like a good start. Once the questions are discussed I'll
get a draft going on the wiki.

Thanks,
Anne


> Thanks
> Ken'ichi Ohmichi
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> 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/20140922/1f3c4e7b/attachment.html>


More information about the OpenStack-dev mailing list