summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-07-20 11:48:37 +0000
committerGerrit Code Review <review@openstack.org>2017-07-20 11:48:37 +0000
commitacd690ae6c3c2e242c0c200ebac96c615a355d69 (patch)
tree22cf0efc31d62fc76468c4aad0844e29b340b314
parentc6c8982fc1c65eb174ed72a548eb2a5691a91db4 (diff)
parent3227365bc66fdb2d8dbcdd8ccdee7a27aa058525 (diff)
downloaddjango_openstack_auth-acd690ae6c3c2e242c0c200ebac96c615a355d69.tar.gz
Merge "Allow for manual setting of default service region in config"
-rw-r--r--doc/source/configuration/index.rst22
-rw-r--r--openstack_auth/user.py5
-rw-r--r--openstack_auth/utils.py6
3 files changed, 29 insertions, 4 deletions
diff --git a/doc/source/configuration/index.rst b/doc/source/configuration/index.rst
index 26c272b..5b581b0 100644
--- a/doc/source/configuration/index.rst
+++ b/doc/source/configuration/index.rst
@@ -37,6 +37,28 @@ the site header when logged in.
You should also define ``OPENSTACK_KEYSTONE_URL`` to indicate which of
the regions is the default one.
+
+``DEFAULT_SERVICE_REGIONS``
+---------------------------
+
+Default: ``{}``
+
+The default service region is set on a per-endpoint basis, meaning that once
+the user logs into some Keystone endpoint, if a default service region is
+defined for it in this setting and exists within Keystone catalog, it will be
+set as the initial service region in this endpoint. By default it is an empty
+dictionary because upstream can neither predict service region names in a
+specific deployment, nor tell whether this behavior is desired. The key of the
+dictionary is a full url of a Keystone endpoint with version suffix, the value
+is a region name.
+
+Example::
+
+ DEFAULT_SERVICE_REGIONS = {
+ OPENSTACK_KEYSTONE_URL: 'RegionOne'
+ }
+
+
``OPENSTACK_API_VERSIONS``
--------------------------
diff --git a/openstack_auth/user.py b/openstack_auth/user.py
index 3edb204..063648b 100644
--- a/openstack_auth/user.py
+++ b/openstack_auth/user.py
@@ -43,8 +43,11 @@ def set_session_from_user(request, user):
def create_user_from_token(request, token, endpoint, services_region=None):
# if the region is provided, use that, otherwise use the preferred region
+ default_service_regions = getattr(settings, 'DEFAULT_SERVICE_REGIONS', {})
+ default_service_region = default_service_regions.get(endpoint)
svc_region = services_region or \
- utils.default_services_region(token.serviceCatalog, request)
+ utils.default_services_region(token.serviceCatalog, request,
+ selected_region=default_service_region)
return User(id=token.user['id'],
token=token,
user=token.user['name'],
diff --git a/openstack_auth/utils.py b/openstack_auth/utils.py
index d38d513..cac0d7a 100644
--- a/openstack_auth/utils.py
+++ b/openstack_auth/utils.py
@@ -375,7 +375,8 @@ def get_project_list(*args, **kwargs):
return projects
-def default_services_region(service_catalog, request=None):
+def default_services_region(service_catalog, request=None,
+ selected_region=None):
"""Returns the first endpoint region for first non-identity service.
Extracted from the service catalog.
@@ -399,8 +400,7 @@ def default_services_region(service_catalog, request=None):
LOG.error('No regions can be found in the service catalog.')
return None
- selected_region = None
- if request:
+ if request and selected_region is None:
selected_region = request.COOKIES.get('services_region',
available_regions[0])
if selected_region not in available_regions: