From 0bc47cdb933e12fd142747371720e8a1f74cb795 Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Thu, 22 Jul 2021 18:00:25 +0200 Subject: [PATCH] Extend has_version function to accept version parameter We might need not only to check whether the service is supported, but also whether specific version of the service is working. Extend functional tests of the block-storage to actually check specific version. Change-Id: Ie71c4f818d5adc82466e06d994c258af271b5793 --- openstack/cloud/openstackcloud.py | 15 +++++++++++---- .../tests/functional/block_storage/v2/base.py | 2 +- .../tests/functional/block_storage/v3/base.py | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/openstack/cloud/openstackcloud.py b/openstack/cloud/openstackcloud.py index 96e7bca44..eabbbd276 100755 --- a/openstack/cloud/openstackcloud.py +++ b/openstack/cloud/openstackcloud.py @@ -712,9 +712,11 @@ class _OpenStackCloudMixin: def get_name(self): return self.name - def get_session_endpoint(self, service_key): + def get_session_endpoint(self, service_key, **kwargs): + if not kwargs: + kwargs = {} try: - return self.config.get_session_endpoint(service_key) + return self.config.get_session_endpoint(service_key, **kwargs) except keystoneauth1.exceptions.catalog.EndpointNotFound as e: self.log.debug( "Endpoint not found in %s cloud: %s", self.name, str(e)) @@ -731,7 +733,7 @@ class _OpenStackCloudMixin: error=str(e))) return endpoint - def has_service(self, service_key): + def has_service(self, service_key, version=None): if not self.config.has_service(service_key): # TODO(mordred) add a stamp here so that we only report this once if not (service_key in self._disable_warnings @@ -742,7 +744,12 @@ class _OpenStackCloudMixin: self._disable_warnings[service_key] = True return False try: - endpoint = self.get_session_endpoint(service_key) + kwargs = dict() + # If a specific version was requested - try it + if version is not None: + kwargs['min_version'] = version + kwargs['max_version'] = version + endpoint = self.get_session_endpoint(service_key, **kwargs) except exc.OpenStackCloudException: return False if endpoint: diff --git a/openstack/tests/functional/block_storage/v2/base.py b/openstack/tests/functional/block_storage/v2/base.py index 4d7f0c099..6da35eb40 100644 --- a/openstack/tests/functional/block_storage/v2/base.py +++ b/openstack/tests/functional/block_storage/v2/base.py @@ -22,5 +22,5 @@ class BaseBlockStorageTest(base.BaseFunctionalTest): self._set_user_cloud(block_storage_api_version='2') self._set_operator_cloud(block_storage_api_version='2') - if not self.user_cloud.has_service('block-storage'): + if not self.user_cloud.has_service('block-storage', '2'): self.skipTest('block-storage service not supported by cloud') diff --git a/openstack/tests/functional/block_storage/v3/base.py b/openstack/tests/functional/block_storage/v3/base.py index adab8dba8..7bb01ce73 100644 --- a/openstack/tests/functional/block_storage/v3/base.py +++ b/openstack/tests/functional/block_storage/v3/base.py @@ -22,5 +22,5 @@ class BaseBlockStorageTest(base.BaseFunctionalTest): self._set_user_cloud(block_storage_api_version='3') self._set_operator_cloud(block_storage_api_version='3') - if not self.user_cloud.has_service('block-storage'): + if not self.user_cloud.has_service('block-storage', '3'): self.skipTest('block-storage service not supported by cloud')