diff --git a/config_tempest/services/base.py b/config_tempest/services/base.py index bbe03f6d..328c24ed 100644 --- a/config_tempest/services/base.py +++ b/config_tempest/services/base.py @@ -38,6 +38,7 @@ class Service(object): self.extensions = [] self.versions = [] + self.versions_body = {'versions': []} def do_get(self, url, top_level=False, top_level_path=""): parts = list(urllib.parse.urlparse(url)) @@ -150,8 +151,8 @@ class Service(object): class VersionedService(Service): def set_versions(self, top_level=True): body = self.do_get(self.service_url, top_level=top_level) - body = json.loads(body) - self.versions = self.deserialize_versions(body) + self.versions_body = json.loads(body) + self.versions = self.deserialize_versions(self.versions_body) def deserialize_versions(self, body): versions = [] @@ -160,6 +161,26 @@ class VersionedService(Service): versions.append(version) return list(map(lambda x: x['id'], versions)) + def filter_api_microversions(self): + min_microversion = '' + max_microversion = '' + for version in self.versions_body['versions']: + if version['status'] != "DEPRECATED": + if max_microversion == '': + max_microversion = version['version'] + else: + max_microversion = max(max_microversion, + version['version']) + if 'min_version' not in version: + continue + if min_microversion == '': + min_microversion = version['min_version'] + else: + min_microversion = min(min_microversion, + version['min_version']) + return {'max_microversion': max_microversion, + 'min_microversion': min_microversion} + def no_port_cut_url(self): # if there is no port defined, cut the url from version to the end u = urllib3.util.parse_url(self.service_url) diff --git a/config_tempest/services/compute.py b/config_tempest/services/compute.py index 4eb3ade7..191e489c 100644 --- a/config_tempest/services/compute.py +++ b/config_tempest/services/compute.py @@ -30,8 +30,8 @@ class ComputeService(VersionedService): def set_versions(self): url, top_level = self.no_port_cut_url() body = self.do_get(url, top_level=top_level) - body = json.loads(body) - self.versions = self.deserialize_versions(body) + self.versions_body = json.loads(body) + self.versions = self.deserialize_versions(self.versions_body) def set_default_tempest_options(self, conf): conf.set('compute-feature-enabled', 'console_output', 'True') @@ -42,6 +42,10 @@ class ComputeService(VersionedService): # compute nodes if self._get_number_of_hosts() >= 2: conf.set('compute-feature-enabled', 'resize', 'True') + # set microversions + m_versions = self.filter_api_microversions() + conf.set('compute', 'min_microversion', m_versions['min_microversion']) + conf.set('compute', 'max_microversion', m_versions['max_microversion']) def get_service_extension_key(self): return 'api_extensions' diff --git a/config_tempest/services/share.py b/config_tempest/services/share.py index 4c38988e..0ce25901 100644 --- a/config_tempest/services/share.py +++ b/config_tempest/services/share.py @@ -13,37 +13,16 @@ # License for the specific language governing permissions and limitations # under the License. -import json - from config_tempest.services.base import VersionedService -from config_tempest.utils import get_base_url class ShareService(VersionedService): - def get_api_microversion(self): - version_url = get_base_url(self.service_url) - body = self.do_get(version_url) - body = json.loads(body) - return body - def set_default_tempest_options(self, conf): if 'v2' in self.service_url: - microversions = self.get_api_microversion() - min_microversion = { - version['min_version'] for version in microversions['versions'] - if version['id'] == 'v2.0' - } - - max_microversion = { - version['version'] for version in microversions['versions'] - if version['id'] == 'v2.0' - } - - conf.set('share', 'min_api_microversion', - ''.join(min_microversion)) - conf.set('share', 'max_api_microversion', - ''.join(max_microversion)) + m_vs = self.filter_api_microversions() + conf.set('share', 'min_api_microversion', m_vs['min_microversion']) + conf.set('share', 'max_api_microversion', m_vs['max_microversion']) def get_unversioned_service_name(self): return 'share' diff --git a/config_tempest/services/volume.py b/config_tempest/services/volume.py index c27d61d4..a9a343ac 100644 --- a/config_tempest/services/volume.py +++ b/config_tempest/services/volume.py @@ -17,7 +17,6 @@ import json from config_tempest import constants as C from config_tempest.services.base import VersionedService -from config_tempest.utils import get_base_url from tempest.lib import exceptions @@ -31,30 +30,14 @@ class VolumeService(VersionedService): def set_versions(self): url, top_level = self.no_port_cut_url() body = self.do_get(url, top_level=top_level) - body = json.loads(body) - self.versions = self.deserialize_versions(body) - - def set_api_microversion(self): - version_url = get_base_url(self.service_url) - body = self.do_get(version_url) - body = json.loads(body) - return body + self.versions_body = json.loads(body) + self.versions = self.deserialize_versions(self.versions_body) def set_default_tempest_options(self, conf): if 'v3' in self.service_url: - microversions = self.set_api_microversion() - min_microversion = { - version['min_version'] for version in microversions['versions'] - if version['id'] == 'v3.0' - } - - max_microversion = { - version['version'] for version in microversions['versions'] - if version['id'] == 'v3.0' - } - - conf.set('volume', 'min_microversion', ''.join(min_microversion)) - conf.set('volume', 'max_microversion', ''.join(max_microversion)) + m_vs = self.filter_api_microversions() + conf.set('volume', 'min_microversion', m_vs['min_microversion']) + conf.set('volume', 'max_microversion', m_vs['max_microversion']) def get_service_extension_key(self): return 'api_extensions'