summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorimacdonn <iain.macdonnell@oracle.com>2018-09-26 23:28:32 +0000
committerSean McGinnis <sean.mcginnis@gmail.com>2019-09-26 07:06:23 +0000
commitce5f48718d3bc650eb2fb7791f19cce5a8560185 (patch)
tree8f2d7b52e01b05827cad1b939e8ec2f60995b488
parent80e29d3ad5d7bb4d8692ed40be4c5aa104c51926 (diff)
downloadcinder-ce5f48718d3bc650eb2fb7791f19cce5a8560185.tar.gz
Exclude disabled API versions from listing
The code for listing supported API versions would return a static list, whether those versions were enabled or not. This changes the logic to drop versions that are not enabled so we don't report back support for something that then would cause a failure if the user tried to use it. Closes-bug: #1788039 Change-Id: I52c1264b3b67a5c1ea00de1c0de5bea04c3096ee Co-Authored-By: iain MacDonnell <iain.macdonnell@oracle.com> Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com> (cherry picked from commit 3ae2bd6728f9f9cca30ff39582ca731e4b347d7f) (cherry picked from commit 9ec5413effb5919a82a3f67f79c96f914f058508)
-rw-r--r--cinder/api/versions.py12
-rw-r--r--cinder/tests/unit/api/test_versions.py18
2 files changed, 29 insertions, 1 deletions
diff --git a/cinder/api/versions.py b/cinder/api/versions.py
index dd01ad916..93f988bf1 100644
--- a/cinder/api/versions.py
+++ b/cinder/api/versions.py
@@ -17,6 +17,7 @@
import copy
+from oslo_config import cfg
from six.moves import http_client
from cinder.api import extensions
@@ -26,6 +27,9 @@ from cinder.api.openstack import wsgi
from cinder.api.views import versions as views_versions
+CONF = cfg.CONF
+
+
_LINKS = [{
"rel": "describedby",
"type": "text/html",
@@ -111,9 +115,15 @@ class VersionsController(wsgi.Controller):
# available versions.
@wsgi.response(http_client.MULTIPLE_CHOICES)
def all(self, req):
- """Return all known versions."""
+ """Return all known and enabled versions."""
builder = views_versions.get_view_builder(req)
known_versions = copy.deepcopy(_KNOWN_VERSIONS)
+
+ if not CONF.enable_v2_api:
+ known_versions.pop('v2.0')
+ if not CONF.enable_v3_api:
+ known_versions.pop('v3.0')
+
return builder.build_versions(known_versions)
diff --git a/cinder/tests/unit/api/test_versions.py b/cinder/tests/unit/api/test_versions.py
index 480de3339..090e879d3 100644
--- a/cinder/tests/unit/api/test_versions.py
+++ b/cinder/tests/unit/api/test_versions.py
@@ -14,6 +14,8 @@
# under the License.
import ddt
+from oslo_config import cfg
+from oslo_config import fixture as config_fixture
from oslo_serialization import jsonutils
from oslo_utils import encodeutils
import six
@@ -29,6 +31,7 @@ from cinder import test
from cinder.tests.unit.api import fakes
+CONF = cfg.CONF
VERSION_HEADER_NAME = 'OpenStack-API-Version'
VOLUME_SERVICE = 'volume '
@@ -81,6 +84,21 @@ class VersionsControllerTestCase(test.TestCase):
self.assertEqual(api_version_request._MIN_API_VERSION,
v3.get('min_version'))
+ @ddt.data('2.0', '3.0')
+ def test_all_versions_excludes_disabled(self, version):
+ self.fixture = self.useFixture(config_fixture.Config(CONF))
+ if version == '2.0':
+ self.fixture.config(enable_v2_api=False)
+ elif version == '3.0':
+ self.fixture.config(enable_v3_api=False)
+ else:
+ return
+ vc = versions.VersionsController()
+ req = self.build_request(base_url='http://localhost')
+ resp = vc.all(req)
+ all_versions = [x['id'] for x in resp['versions']]
+ self.assertNotIn('v' + version, all_versions)
+
def test_versions_v2_no_header(self):
req = self.build_request(base_url='http://localhost/v2')