diff options
author | Zuul <zuul@review.opendev.org> | 2020-04-01 15:00:43 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-04-01 15:00:43 +0000 |
commit | a3751d9161cb4973f6f4738c8f242ca8a270f457 (patch) | |
tree | 870df94c89ddd411eba2987cec895353e3928918 | |
parent | 9813577f7d0137da0e29c7630cffc3e1e1b329f5 (diff) | |
parent | 9b54bad89965cec22afc004df2c5e5a888e3bd06 (diff) | |
download | horizon-a3751d9161cb4973f6f4738c8f242ca8a270f457.tar.gz |
Merge "Check volume endpoint availability in the same order" into stable/train
-rw-r--r-- | openstack_dashboard/api/cinder.py | 78 |
1 files changed, 28 insertions, 50 deletions
diff --git a/openstack_dashboard/api/cinder.py b/openstack_dashboard/api/cinder.py index 9d3154fa6..6028efcf4 100644 --- a/openstack_dashboard/api/cinder.py +++ b/openstack_dashboard/api/cinder.py @@ -201,78 +201,56 @@ class GroupType(base.APIResourceWrapper): _attrs = ['id', 'name', 'description', 'is_public', 'group_specs'] -def get_auth_params_from_request(request): - auth_url = base.url_for(request, 'identity') - cinder_urls = [] - for service_name in ('volumev3', 'volumev2', 'volume'): +def _find_cinder_url(request, version=None): + if version is None: + api_version = VERSIONS.get_active_version() + version = api_version['version'] + version = base.Version(version) + + # We support only cinder v2 and v3. + if version.major == 3: + candidates = ['volumev3', 'volume'] + else: + candidates = ['volumev2', 'volume'] + + for service_name in candidates: try: - cinder_url = base.url_for(request, service_name) - cinder_urls.append((service_name, cinder_url)) + return version, base.url_for(request, service_name) except exceptions.ServiceCatalogException: pass - if not cinder_urls: + else: raise exceptions.ServiceCatalogException( - "no volume service configured") - cinder_urls = tuple(cinder_urls) # need to make it cacheable - return( - request.user.username, - request.user.token.id, - request.user.tenant_id, - cinder_urls, - auth_url, - ) + ("Cinder %(version)s requested but no '%(service)s' service " + "type available in Keystone catalog.") % + {'version': version, 'service': candidates}) @memoized def cinderclient(request, version=None): - if version is None: - api_version = VERSIONS.get_active_version() - version = api_version['version'] + version, cinder_url = _find_cinder_url(request, version) + insecure = settings.OPENSTACK_SSL_NO_VERIFY cacert = settings.OPENSTACK_SSL_CACERT - (username, token_id, tenant_id, cinder_urls, - auth_url) = get_auth_params_from_request(request) - version = base.Version(version) - if version.major == 2: - service_names = ('volumev2', 'volume') - elif version.major == 3: - service_names = ('volumev3', 'volume') - else: - service_names = ('volume',) - for name, _url in cinder_urls: - if name in service_names: - cinder_url = _url - break - else: - raise exceptions.ServiceCatalogException( - "Cinder {version} requested but no '{service}' service " - "type available in Keystone catalog.".format(version=version, - service=service_names) - ) c = cinder_client.Client( version, - username, - token_id, - project_id=tenant_id, - auth_url=auth_url, + request.user.username, + request.user.token.id, + project_id=request.user.tenant_id, + auth_url=base.url_for(request, 'identity'), insecure=insecure, cacert=cacert, http_log_debug=settings.DEBUG, ) - c.client.auth_token = token_id + c.client.auth_token = request.user.token.id c.client.management_url = cinder_url return c def get_microversion(request, features): - for service_name in ('volume', 'volumev2', 'volumev3'): - try: - cinder_url = base.url_for(request, service_name) - break - except exceptions.ServiceCatalogException: - continue - else: + try: + version, cinder_url = _find_cinder_url(request) + except exceptions.ServiceCatalogException: return None min_ver, max_ver = cinder_client.get_server_version(cinder_url) return microversions.get_microversion_for_features( |