From 07c4809940406edab9e4412b63a45ef4468bda84 Mon Sep 17 00:00:00 2001 From: Goutham Pacha Ravi Date: Wed, 13 Mar 2019 16:50:27 -0700 Subject: [PATCH] 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 5a3be01535d3902e1ee21ca070d4918adefc2018) (Cherry-picked from commit 4b0c953f7fe7afbbbece8db7edce8efe69fb4387) --- manila/api/openstack/wsgi.py | 5 ++++- manila/tests/api/openstack/test_wsgi.py | 2 +- ...t-name-in-case-of-proxy-urls-e33466af856708b4.yaml\t\t\t" | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/manila/api/openstack/wsgi.py b/manila/api/openstack/wsgi.py index b3abc2a59d..d582217908 100644 --- a/manila/api/openstack/wsgi.py +++ b/manila/api/openstack/wsgi.py @@ -53,6 +53,7 @@ API_VERSION_REQUEST_HEADER = 'X-OpenStack-Manila-API-Version' EXPERIMENTAL_API_REQUEST_HEADER = 'X-OpenStack-Manila-API-Experimental' V1_SCRIPT_NAME = '/v1' +V2_SCRIPT_NAME = '/v2' class Request(webob.Request): @@ -218,7 +219,9 @@ class Request(webob.Request): Microversions starts with /v2, so if a client sends a /v1 URL, then ignore the headers and request 1.0 APIs. """ - if not self.script_name: + if not self.script_name or not (V1_SCRIPT_NAME in self.script_name or + V2_SCRIPT_NAME in self.script_name): + # The request is on the base URL without a major version specified self.api_version_request = api_version.APIVersionRequest() elif V1_SCRIPT_NAME in self.script_name: self.api_version_request = api_version.APIVersionRequest('1.0') diff --git a/manila/tests/api/openstack/test_wsgi.py b/manila/tests/api/openstack/test_wsgi.py index c6b8f89550..3332b08423 100644 --- a/manila/tests/api/openstack/test_wsgi.py +++ b/manila/tests/api/openstack/test_wsgi.py @@ -177,7 +177,7 @@ class RequestTest(test.TestCase): self.assertIsNone(request.set_api_version_request()) - if not resource: + if not resource or not ('/v1' in resource or '/v2' in resource): self.assertEqual(api_version.APIVersionRequest(), request.api_version_request) elif 'v1' in resource: diff --git "a/releasenotes/notes/bug-1818081-fix-inferred-script-name-in-case-of-proxy-urls-e33466af856708b4.yaml\t\t\t" "b/releasenotes/notes/bug-1818081-fix-inferred-script-name-in-case-of-proxy-urls-e33466af856708b4.yaml\t\t\t" index 57bcb3dd3e..5b6f352276 100644 --- "a/releasenotes/notes/bug-1818081-fix-inferred-script-name-in-case-of-proxy-urls-e33466af856708b4.yaml\t\t\t" +++ "b/releasenotes/notes/bug-1818081-fix-inferred-script-name-in-case-of-proxy-urls-e33466af856708b4.yaml\t\t\t" @@ -3,5 +3,5 @@ fixes: - | When manila API is run behind a proxy webserver, the API service was parsing the major API version requested incorrectly, leading to incorrect - responses. This behavior has now been fixed. See `launchpad bug 1815038 + responses. This behavior has now been fixed. See `launchpad bug 1818081 `_ for more details. \ No newline at end of file