Browse Source

Fix API version inferred w/ un-versioned URLs

With [1], we fixed the issue with v1 API URLs when
configuring manila with a reverse proxy, like uwsgi.
However, the version discovery can be made against a
"unversioned" URL, i.e, the "/" endpoint.

Example version discovery target when there's no reverse
proxy:

   curl -i -X GET www.openstack-overcloud.com:8786/

Example version discovery target when manila is configured
with a web proxy:

   curl -i -X GET www.openstack-overcloud.com/shared-file-system/

Currently, the API assumes that a v2 endpoint is requested
and hence sets a default API version in the request, which
results in the wrong headers communicated to the client.

Fix this issue. The release note added with [1] should
suffice for this fix.

[1] I0363d7174f3d7ddefa8ced59b182faed665e9c36
Change-Id: I50d1024ee8485b8290c24fa850e60755b518fff3
Closes-Bug: #1818081
(Cherry-picked from commit 4b0c953f7f)
tags/7.2.0
Goutham Pacha Ravi 2 months ago
parent
commit
5a3be01535

+ 4
- 1
manila/api/openstack/wsgi.py View File

@@ -54,6 +54,7 @@ API_VERSION_REQUEST_HEADER = 'X-OpenStack-Manila-API-Version'
54 54
 EXPERIMENTAL_API_REQUEST_HEADER = 'X-OpenStack-Manila-API-Experimental'
55 55
 
56 56
 V1_SCRIPT_NAME = '/v1'
57
+V2_SCRIPT_NAME = '/v2'
57 58
 
58 59
 
59 60
 class Request(webob.Request):
@@ -219,7 +220,9 @@ class Request(webob.Request):
219 220
         Microversions starts with /v2, so if a client sends a /v1 URL, then
220 221
         ignore the headers and request 1.0 APIs.
221 222
         """
222
-        if not self.script_name:
223
+        if not self.script_name or not (V1_SCRIPT_NAME in self.script_name or
224
+                                        V2_SCRIPT_NAME in self.script_name):
225
+            # The request is on the base URL without a major version specified
223 226
             self.api_version_request = api_version.APIVersionRequest()
224 227
         elif V1_SCRIPT_NAME in self.script_name:
225 228
             self.api_version_request = api_version.APIVersionRequest('1.0')

+ 1
- 1
manila/tests/api/openstack/test_wsgi.py View File

@@ -177,7 +177,7 @@ class RequestTest(test.TestCase):
177 177
 
178 178
         self.assertIsNone(request.set_api_version_request())
179 179
 
180
-        if not resource:
180
+        if not resource or not ('/v1' in resource or '/v2' in resource):
181 181
             self.assertEqual(api_version.APIVersionRequest(),
182 182
                              request.api_version_request)
183 183
         elif 'v1' in resource:

+ 1
- 1
releasenotes/notes/bug-1818081-fix-inferred-script-name-in-case-of-proxy-urls-e33466af856708b4.yaml View File

@@ -3,5 +3,5 @@ fixes:
3 3
   - |
4 4
     When manila API is run behind a proxy webserver, the API service was
5 5
     parsing the major API version requested incorrectly, leading to incorrect
6
-    responses. This behavior has now been fixed. See `launchpad bug 1815038
6
+    responses. This behavior has now been fixed. See `launchpad bug 1818081
7 7
     <https://bugs.launchpad.net/manila/+bug/1818081>`_ for more details.

Loading…
Cancel
Save