middleware provides no way to know if a catalog is v2 or v3
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
python-keystoneclient |
Fix Released
|
High
|
Unassigned |
Bug Description
auth_token provides X_SERVICE_CATALOG as a header however it doesn't provide the root catalog element. So on v2 we get something like:
[{'endpoints': [{'adminURL': 'http://
'internalURL': 'http://
'publicURL': 'http://
'region': 'regionOne'}],
'endpoints_
'name': 'volume',
'type': 'volume'},
{'endpoints': [{'adminURL': 'http://
'internalURL': 'http://
'publicURL': 'http://
'region': 'regionOne'}],
'endpoints_
'name': 'glance',
'type': 'image'},
{'endpoints': [{'adminURL': 'http://
'internalURL': 'http://
'publicURL': 'http://
'region': 'regionOne'}],
'endpoints_
'name': 'nova',
'type': 'compute'},
{'endpoints': [{'adminURL': 'http://
'internalURL': 'http://
'publicURL': 'http://
'region': 'RegionOne'}],
'endpoints_
'name': 'keystone',
'type': 'identity'}]
and on v3:
[{
now we *can* look in the list elements for a 'url' element but that's a bad way to figure this out. Also the ServiceCatalog.
We need to figure out a way to communicate this to a server either with a
- header with the token type v2 or v3
- header with the full token
- something else
Changed in python-keystoneclient: | |
milestone: | none → 0.9.0 |
Changed in python-keystoneclient: | |
status: | Fix Committed → Fix Released |
A stop-gap solution could be to try to provide services with a "v2 catalog" either way, but there are some caveats for deployments taking advantage of the extra flexibility afforded by v3's catalog structure. The three that come to mind:
- A public interface is not guaranteed to exist in v3 as it is in v2
- Endpoints on distinct interfaces can't be lumped back together as they are in v2
- It's possible to define your own interface in v3 that cannot be represented in v2