[openstack-dev] [nova][placement] self links include /placement?
Eric Fried
openstack at fried.cc
Mon Aug 14 15:21:28 UTC 2017
Thanks for the answer, cdent, and the discussion on IRC [1]. In summary:
- Those links are the full `path` component of the resource, to which
one would prepend the protocol://server:port to get its fully-qualified
location. The '/placement' prefix is determined and included by the web
server, not hardcoded by the placement service (phew).
- Consumers (at least within nova) are hardcoding their request URLs
based on well-known patterns, not using the links at all. That's kind
of icky, but it's because ksa manipulates the URLs we give it.
- A hypothetical consumer using a HATEOAS-compliant request client might
be able to use the links, which is why we bother to include them at all.
[1]
http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2017-08-14.log.html#t2017-08-14T13:04:59
On 08/12/2017 04:03 AM, Chris Dent wrote:
> On Fri, 11 Aug 2017, Eric Fried wrote:
>
>> I finally got around to fiddling with the placement API today, and
>> noticed something... disturbing. To me, anyway.
>>
>> When I GET a URI, such as '/resource_classes', the response includes e.g.
>
> I assume you're using ksa/requests somewhere in your stack and the
> sesion is "mounted" on the service endpoint provided by the service
> catalog?
>
> If so, that means the sesion is mounted on /placement and is
> prepending '/placement' to the '/resource_classes' URL you are
> providing.
>
> If not, I'd need more info and pretty much the rest of this message
> is not related to your problem :)
>
>> {u'links': [{u'href': u'/placement/resource_classes/MEMORY_MB',
>> u'rel': u'self'}],
>> u'name': u'MEMORY_MB'},
>
> Imagine this was HTML instead of JSON and you were using a browser,
> not ksa. That's an absolute URL, the browser knows that when it sees
> an absolute URL it makes the request back to the same host the
> current page came from. That's standard href behavior.
>
> It would be incorrect to have a URL of /resource_classes/MEMORY_MB
> there as that would mean (using standard semantics)
> host//foo.bar/resource_classes/MEMORY_MB . It could be correct to
> make the href be host://foo.bar/placement/resource_classes/MEMORY_MB
> but that wasn't done in the placement service so we could avoid
> making any assumptions anywhere in the stack about the host or
> protocol in the thing that is hosting the service (and not require
> any of the middlewares that attempt to adjust the WSGI enviroment
> based on headers passed along from a proxy). Also it makes for
> very noisy response bodies.
>
>> If I try to GET that 'self' link, it fails (404). I have to strip the
>> '/placement' prefix to make it work.
>
> Assuming the ksa thing above is what's happening, that's because the
> URL that you are sending is
> /placement/placement/resource_classes/MEMORY_MB
>
>> That doesn't seem right. Can anyone comment?
>
> I've always found requests' mounting behavior very weird. So to me,
> that you are getting 404s when trying to traverse links is expected:
> you're sending requests to bad URLs. The concept of a "mount" with
> an http request is pretty antithetical to link traversing,
> hypertext, etc. On the other hand, none of the so-called REST APIs
> in OpenStack (including placement) really expect, demand or even
> work with HATEOAS, so ... ?
>
> I'm not sure if it is something we need to account for when ksa
> constructs URLs or not. It's a problem that I've also
> encountered with some of the tricks that gabbi does [1]. The
> proposed solution there is to sort of merge urls where a prefix is
> known to be present (but see the bug for a corner case on why that's
> not great).
>
> [1] https://github.com/cdent/gabbi/issues/165
>
>
>
>
> __________________________________________________________________________
> 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
>
More information about the OpenStack-dev
mailing list