moves default keystone API to v3
v2.0 of the keystone API was deprecated in icehouse-2, moving to support v3 by default. This also fixes a bug in Horizon where if you specify v3 for the API version and v2.0 is still the auth url, login fails. Implements blueprint keystone-v3-default Partial-bug: #1267636 Change-Id: Ibc4872f24125fa74230eab781b002dffdba5f5da
This commit is contained in:
		| @@ -18,7 +18,7 @@ Installing is quick and easy: | |||||||
|  |  | ||||||
| #. Configure your API endpoint(s) in ``settings.py``:: | #. Configure your API endpoint(s) in ``settings.py``:: | ||||||
|  |  | ||||||
|         OPENSTACK_KEYSTONE_URL = "http://example.com:5000/v2.0" |         OPENSTACK_KEYSTONE_URL = "http://example.com:5000/v3" | ||||||
|  |  | ||||||
| #. Include ``'keystone_auth.urls'`` somewhere in your ``urls.py`` file. | #. Include ``'keystone_auth.urls'`` somewhere in your ``urls.py`` file. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -78,6 +78,10 @@ class KeystoneBackend(object): | |||||||
|         endpoint_type = getattr( |         endpoint_type = getattr( | ||||||
|             settings, 'OPENSTACK_ENDPOINT_TYPE', 'publicURL') |             settings, 'OPENSTACK_ENDPOINT_TYPE', 'publicURL') | ||||||
|  |  | ||||||
|  |         # keystone client v3 does not support logging in on the v2 url any more | ||||||
|  |         if get_keystone_version() >= 3: | ||||||
|  |             auth_url = auth_url.replace('v2.0', 'v3') | ||||||
|  |  | ||||||
|         keystone_client = get_keystone_client() |         keystone_client = get_keystone_client() | ||||||
|         try: |         try: | ||||||
|             client = keystone_client.Client( |             client = keystone_client.Client( | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ MIDDLEWARE_CLASSES = [ | |||||||
|  |  | ||||||
| AUTHENTICATION_BACKENDS = ['openstack_auth.backend.KeystoneBackend'] | AUTHENTICATION_BACKENDS = ['openstack_auth.backend.KeystoneBackend'] | ||||||
|  |  | ||||||
| OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v2.0" | OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v3" | ||||||
|  |  | ||||||
| ROOT_URLCONF = 'openstack_auth.tests.urls' | ROOT_URLCONF = 'openstack_auth.tests.urls' | ||||||
|  |  | ||||||
| @@ -40,7 +40,7 @@ LOGIN_REDIRECT_URL = '/' | |||||||
| SECRET_KEY = 'badcafe' | SECRET_KEY = 'badcafe' | ||||||
|  |  | ||||||
| OPENSTACK_API_VERSIONS = { | OPENSTACK_API_VERSIONS = { | ||||||
|     "identity": 2.0 |     "identity": 3 | ||||||
| } | } | ||||||
|  |  | ||||||
| USE_TZ = True | USE_TZ = True | ||||||
|   | |||||||
| @@ -43,6 +43,8 @@ class OpenStackAuthTestsV2(test.TestCase): | |||||||
|         self.keystone_client_scoped = self.ks_client_module.Client( |         self.keystone_client_scoped = self.ks_client_module.Client( | ||||||
|             endpoint=endpoint, |             endpoint=endpoint, | ||||||
|             auth_ref=self.data.scoped_access_info) |             auth_ref=self.data.scoped_access_info) | ||||||
|  |         settings.OPENSTACK_API_VERSIONS['identity'] = 2.0 | ||||||
|  |         settings.OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v2.0" | ||||||
|  |  | ||||||
|     def tearDown(self): |     def tearDown(self): | ||||||
|         self.mox.UnsetStubs() |         self.mox.UnsetStubs() | ||||||
|   | |||||||
| @@ -141,7 +141,7 @@ def is_safe_url(url, host=None): | |||||||
| # Helper for figuring out keystone version | # Helper for figuring out keystone version | ||||||
| # Implementation will change when API version discovery is available | # Implementation will change when API version discovery is available | ||||||
| def get_keystone_version(): | def get_keystone_version(): | ||||||
|     return getattr(settings, 'OPENSTACK_API_VERSIONS', {}).get('identity', 2.0) |     return getattr(settings, 'OPENSTACK_API_VERSIONS', {}).get('identity', 3) | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_keystone_client(): | def get_keystone_client(): | ||||||
| @@ -153,6 +153,8 @@ def get_keystone_client(): | |||||||
|  |  | ||||||
| def get_project_list(*args, **kwargs): | def get_project_list(*args, **kwargs): | ||||||
|     if get_keystone_version() < 3: |     if get_keystone_version() < 3: | ||||||
|  |         auth_url = kwargs.get('auth_url', '').replace('v3', 'v2.0') | ||||||
|  |         kwargs['auth_url'] = auth_url | ||||||
|         client = get_keystone_client().Client(*args, **kwargs) |         client = get_keystone_client().Client(*args, **kwargs) | ||||||
|         return client.tenants.list() |         return client.tenants.list() | ||||||
|     else: |     else: | ||||||
|   | |||||||
| @@ -136,6 +136,7 @@ def switch(request, tenant_id, redirect_field_name=REDIRECT_FIELD_NAME): | |||||||
|     endpoint = request.user.endpoint |     endpoint = request.user.endpoint | ||||||
|     try: |     try: | ||||||
|         if get_keystone_version() >= 3: |         if get_keystone_version() >= 3: | ||||||
|  |             if 'v3' not in endpoint: | ||||||
|                 endpoint = endpoint.replace('v2.0', 'v3') |                 endpoint = endpoint.replace('v2.0', 'v3') | ||||||
|         client = get_keystone_client().Client(tenant_id=tenant_id, |         client = get_keystone_client().Client(tenant_id=tenant_id, | ||||||
|                                               token=request.user.token.id, |                                               token=request.user.token.id, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 David Lyle
					David Lyle