<div dir="ltr"><div style>Some constraints to solving this problem that I've had on my mind... given that we need to continue to support *versioned* endpoints being provided by the catalog, clients should:</div><div><br>
</div>1) be configurable with an unversioned URL, and automatically work with the client's preferred API version (preferred being highest client-server compatible API, using 'stable' endpoints before anything else).<div>
<br></div><div>2) be configurable with an unversioned URL and a major version specifier (e.g. client.Client(..., version=3), and forcibly work with that API version (e.g. /v3/ or /v3.1/ or whatever) if it's available<br>
<div><br></div><div>3) be configurable with a versioned URL, and forcibly use the API available at that endpoint</div><div><br><div style>4) if the best match is not marked as "stable", then the client should raise a warning to the user</div>
</div></div><div style><br></div><div style>5) if the only match is not available (e.g. very old client vs very new service), then the client should abort gracefully</div><div style><br></div><div style>The above completely ignores the issue of tenant/project-specific endpoints, which is a concept I'm not a huge fan of, as it seems like context that auth_token middleware should be able to sufficiently provide... so, there's surely some issue there I'm not considering.</div>
</div><div class="gmail_extra"><br clear="all"><div><div><br></div>-Dolph</div>
<br><br><div class="gmail_quote">On Fri, Apr 26, 2013 at 9:58 PM, Dolph Mathews <span dir="ltr"><<a href="mailto:dolph.mathews@gmail.com" target="_blank">dolph.mathews@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">+1; ideally the service catalog should not contain any versioned endpoints.<span class="HOEnZb"><font color="#888888"><br></font></span><div class="gmail_extra"><span class="HOEnZb"><font color="#888888"><div>
<div><br></div>-Dolph</div></font></span><div><div class="h5">
<br><br><div class="gmail_quote">On Fri, Apr 26, 2013 at 5:05 PM, Brian Waldon <span dir="ltr"><<a href="mailto:bcwaldon@gmail.com" target="_blank">bcwaldon@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Keystone should not have any versions in its service catalog endpoints as version publication and negotiation belongs to the service itself. Your third option is the solution to the core problem here. And to be clear, in addition to the host/port, the endpoints should also be able to define a base path.<br>


<div><div><br>
<br>
On Apr 26, 2013, at 2:20 PM, Gabriel Hurley wrote:<br>
<br>
> I've been working on API version selection in Horizon and came to an odd realization:<br>
><br>
> Keystone's service catalog can (and in the case of devstack currently does) send out an endpoint for a version which is not the latest stable API. In this case we have the Keystone v3 API, but devstack sets the Keystone SC entry to v2.<br>


><br>
> This leaves me with three options:<br>
><br>
>    1. Treat the Service Catalog's version choice as the "preferred" API version and just go with it.<br>
>    2. Treat the Service Catalog as a "suggested" version but query the root of the API to see if there's a different version which Horizon would prefer.<br>
>    3. Rewrite/redefine the service catalog so that it only returns the hosts/ports for the services. This would require a lot of reworking in the clients, too.<br>
><br>
> I'm interested in input from the community; option 1 is the easiest, option 2 solves the problem for me, and option 3 is superior insofar as allowing flexible version choosing based on the what the consumer is able to handle but requires the most work.<br>


><br>
> Thoughts?<br>
><br>
>    - Gabriel<br>
><br>
><br>
> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>