On Thu, 2013-05-02 at 00:46 +0000, Gabriel Hurley wrote: > Based on input from several of the PTLs (and others), I'd like to propose the > following outline for how version discovery should be handled across > heterogeneous clouds: > > https://etherpad.openstack.org/api-version-discovery-proposal > > Further discussion is absolutely welcome, and I would like to propose it as a > topic for review by the Technical Committee at the next meeting since it > involves a significant cross-project standardization effort. > > All the best, > > - Gabriel
So I started on this somewhat independently before i found the blueprint and given I have a semi working implementation i've got a few questions or essentially an area i find inconsistent. AFAIK there are no other serious attempts at this so i've got nothing to go off. Also for the time being I don't care about HATEOS, or future discovery protocols, just getting something that works for keystone now. I think the way version is treated in the current blueprint is off. Looking at 'Auth with a Specified Version' point 2 says that we should not infer the version from the URL and point 3 says that if i provide a version number with a non-versioned endpoint to retrieve possible versions and instantiate a client if an endpoint is available for that version. I don't think that we should be checking the url for what is and what isn't a versioned endpoint for the same reasons we shouldn't be retrieving the version from the URL. What i would like to do is treat the version parameter as the requested version, rather than using it to prevent a lookup for versions. What this means is that i can say: client.Client(auth_url="http://example.com:5000/", user=foo, version=2.0, ...) and retrieve a version 2 client from a provider that may provide both versions v2 & v3. This will still require a lookup of the auth_url even though version is specified. Keystone (not sure on others) provides version information at GET /v2.0 (and other versions) as well as GET / so if i say: client.Client(endpoint="http://example.com:5000/v2.0", version=2.0, token=foo) It should be validated that the endpoint is capable of using the V2 api and doing: client.Client(endpoint="http://example.com:5000/v2.0", version=3.0, token=foo) should fail immediately. To summarize: every call to client.Client should result in a query to check available versions. The version parameter is an indicator of what version client should be retrieved from those specified as available and it should fail if it can't deliver. If you _really_ want to use a particular client without a lookup you should use the original keystoneclient.v2_0.Client which is what is returned from a successful client.Client (with version=2) call anyway and takes the same parameters. I've posted the work for review: https://review.openstack.org/#/c/38414/ and would appreciate comments/clarification. Thanks, Jamie > _______________________________________________ > OpenStack-dev mailing list > OpenStack-dev@lists.openstack.org > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev _______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev