diff options
author | eric <ejpetey@gmail.com> | 2014-09-17 08:51:32 -0600 |
---|---|---|
committer | Thomas Bechtold <tbechtold@suse.com> | 2014-11-09 05:06:39 +0100 |
commit | 4ff165c90b42b522b884382152d296b00473a99c (patch) | |
tree | 98c235cd481c8b1f23f2a30af9620b711e6bbfc6 | |
parent | 51e836967ec26300d579de15ca018df2fb6cb78a (diff) | |
download | horizon-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.py | 36 |
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 |