summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreric <ejpetey@gmail.com>2014-09-17 08:51:32 -0600
committerThomas Bechtold <tbechtold@suse.com>2014-11-09 05:06:39 +0100
commit4ff165c90b42b522b884382152d296b00473a99c (patch)
tree98c235cd481c8b1f23f2a30af9620b711e6bbfc6
parent51e836967ec26300d579de15ca018df2fb6cb78a (diff)
downloadhorizon-4ff165c90b42b522b884382152d296b00473a99c.tar.gz
horizon ignores region for identity service
this change will attempt to use a identity service in the selected region when available. before the region for the identity service was always the first found Change-Id: Idc64a32128bcee561cdbba956722adad0ee1eaf2 Closes-Bug: #1339382 (cherry picked from commit 88371c666083e2d02527f45e3e4415b657ab893f)
-rw-r--r--openstack_dashboard/api/base.py36
1 files changed, 23 insertions, 13 deletions
diff --git a/openstack_dashboard/api/base.py b/openstack_dashboard/api/base.py
index e1d034815..6a836df69 100644
--- a/openstack_dashboard/api/base.py
+++ b/openstack_dashboard/api/base.py
@@ -231,19 +231,29 @@ ENDPOINT_TYPE_TO_INTERFACE = {
def get_url_for_service(service, region, endpoint_type):
identity_version = get_version_from_service(service)
- for endpoint in service['endpoints']:
- # ignore region for identity
- if service['type'] == 'identity' or region == endpoint['region']:
- try:
- if identity_version < 3:
- return endpoint[endpoint_type]
- else:
- interface = \
- ENDPOINT_TYPE_TO_INTERFACE.get(endpoint_type, '')
- if endpoint['interface'] == interface:
- return endpoint['url']
- except (IndexError, KeyError):
- return None
+ available_endpoints = [endpoint for endpoint in service['endpoints']
+ if region == endpoint['region']]
+ """if we are dealing with the identity service and there is no endpoint
+ in the current region, it is okay to use the first endpoint for any
+ identity service endpoints and we can assume that it is global
+ """
+ if service['type'] == 'identity' and not available_endpoints:
+ available_endpoints = [endpoint for endpoint in service['endpoints']]
+
+ for endpoint in available_endpoints:
+ try:
+ if identity_version < 3:
+ return endpoint[endpoint_type]
+ else:
+ interface = \
+ ENDPOINT_TYPE_TO_INTERFACE.get(endpoint_type, '')
+ if endpoint['interface'] == interface:
+ return endpoint['url']
+ except (IndexError, KeyError):
+ """it could be that the current endpoint just doesn't match the
+ type, continue trying the next one
+ """
+ pass
return None