[Openstack-api-consumers] Time Formats
Monty Taylor
mordred at inaugust.com
Fri Jul 7 11:42:01 UTC 2017
On 07/06/2017 08:48 PM, Joe Topjian wrote:
> Hi Monty,
>
> On Wed, Jul 5, 2017 at 6:05 PM, Monty Taylor <mordred at inaugust.com
> <mailto:mordred at inaugust.com>> wrote:
>
> On 06/21/2017 11:13 PM, Joe Topjian wrote:
>
> Hello,
>
> I'm Joe and I do a lot of work with OpenStack and Go. Since Go
> is a rather strict language, it's easy to run into
> inconsistencies both between different OpenStack services as
> well as what the OpenStack API docs mention. So some of the
> things I'll be posting here are to ask for clarification on such
> findings :)
>
>
> \o/ (sorry for the delay - somehow this list got filtered wrong. DOH)
>
> I was wondering if someone could provide some information as to
> how time is handled in OpenStack.
>
> Nova, Neutron, and Glance all seem to represent time in the
> following format:
>
> "updated_at": "2017-05-17T22:59:18Z"
>
> This looks to be a standard ISO8601 UTC format.
>
>
> Yes. Although it should be noted that one cannot SEND full ISO8601
> compliant strings - they may only be the above UTC format with no
> offset listed.
>
> https://github.com/openstack-infra/shade/blob/95e444f257b7f0be982616292475a6e4aaed0fe0/shade/operatorcloud.py#L2122-L2183
> <https://github.com/openstack-infra/shade/blob/95e444f257b7f0be982616292475a6e4aaed0fe0/shade/operatorcloud.py#L2122-L2183>
>
>
> Thanks - this is good to know!
>
> On the other hand, Cinder and Designate have the following format:
>
> "created_at": "2017-02-28T16:58:09.000000"
>
> In Gophercloud, the above format is titled RFC3339MilliNoZ:
>
> https://github.com/gophercloud/gophercloud/blob/d5eda9707e146108e4d424062b602fd97a71c2e6/results.go#L224-L242
> <https://github.com/gophercloud/gophercloud/blob/d5eda9707e146108e4d424062b602fd97a71c2e6/results.go#L224-L242>
>
> I'll also note that the created_at and updated_at fields in the
> API reference for Cinder have the date format as ISO8601:
>
> https://developer.openstack.org/api-ref/block-storage/v3/?expanded=show-a-volume-s-details-detail#show-a-volume-s-details
> <https://developer.openstack.org/api-ref/block-storage/v3/?expanded=show-a-volume-s-details-detail#show-a-volume-s-details>
>
> Unless I'm mistaken, and I am not an expert on time standards,
> that's not correct? Someone has even mentioned that the lack of
> Z or any time zone notation is invalid ISO8601 to begin with
>
> Wikipedia says: (I can't afford to buy the actual ISO spec) "Decimal
> fractions may be added to any of the three time elements. However, a
> fraction may only be added to the lowest order time element in the
> representation."
>
> https://en.wikipedia.org/wiki/ISO_8601
> <https://en.wikipedia.org/wiki/ISO_8601>
>
> The trailing Z is also optional. If it's not there, the time is
> supposed to be assumed to be in "local time". Now - I'm pretty sure
> that makes NO sense in this context - so although it's a 'correct'
> iso8601, I'm pretty sure it's communicating something incorrect - or
> incomplete.
>
> Having different formats isn't a *huge* deal. A note can be
> filed and the different formats per service can be managed.
> Where this gets interesting is in the following discussion:
>
> https://github.com/gophercloud/gophercloud/issues/248
> <https://github.com/gophercloud/gophercloud/issues/248>
>
> tl;dr: Someone has written a Block Storage compatible API
> service. This service is returning dates in the ISO8601 format.
> Gophercloud is giving an error because it is expecting the date
> format to be in that milli-no-z format like in the "official"
> Block Storage service (Cinder).
>
> But that user is able to use OSC on their API service and it
> works just fine.
>
> >
>
> So it seems the Python SDK/client is being lenient on the date
> format. Is that accurate? If so, why?
>
>
> The iso8601 python module parses both just fine:
>
> >>> iso8601.iso8601.parse_date("2017-05-17T22:59:18Z")
> datetime.datetime(2017, 5, 17, 22, 59, 18, tzinfo=<iso8601.Utc>)
> >>> iso8601.iso8601.parse_date("2017-02-28T16:58:09.000000")
> datetime.datetime(2017, 2, 28, 16, 58, 9, tzinfo=<iso8601.Utc>)
>
> and as mentioned above, it's technically valid iso8601 - concerns
> about the lack of Z communicating something very weird notwithstanding.
>
> I would argue with the cioa person that if they have a service that
> has "implemented a subset of the cinder api" and that service is
> returning a different format timestamp than cinder, that they have
> not, in fact, implemented a subset of the cinder API. OpenStack
> isn't an API spec - it's an implementation. So cinder's behavior IS
> the de-facto correct behavior.
>
> But that's not helpful - I think you'll be better off making sure
> you can parse either format as input.
>
>
> I see the merits of this, as well as parsing any iso8601 format in
> general for fields that are designed to be iso8601.
>
> I would also not count on the data from cinder _always_ being in
> RFC3339MilliNoZ. The intent, AIUI, is for cinder to return iso8601 -
> which is remarkably lenient. :)
>
>
> I looked over all of this again. You're right about iso8601 being
> lenient -- it covers a wide range of formats. Go does not have a
> standard time parser like python's iso8601 module, which is unfortunate.
Maybe we can convince someone to write a go iso8601 library. (I know I
certainly don't want to write a date/time parsing library myself- that's
a road to madness! :) )
> It does have some RFC3339 constants
> (https://golang.org/pkg/time/#pkg-constants), and I think that's where
> some confusion has crept in. RFC3339 requires some type of time zone
> notation.
>
>
> As well, what time formats should be officially and confidently
> supported across all services? I'm not the kind of person who
> gets hung up on specifics, but having to add support for
> multiple formats just in case one of those is returned feels a
> little disorganized.
>
>
> Yah. Agree. So far I'm not aware of any date/time formats that are
> not parseable by the python8601 module. The two you've mentioned
> here are the two most common forms I've seen.
>
>
> Sorry for the delay responding.
>
>
> No problem at all - thanks for the info!
>
>
> Monty
>
> _______________________________________________
> Openstack-api-consumers mailing list
> Openstack-api-consumers at lists.openstack.org
> <mailto:Openstack-api-consumers at lists.openstack.org>
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-api-consumers
> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-api-consumers>
>
>
More information about the Openstack-api-consumers
mailing list