Merge "Add support for microversions for compute"

This commit is contained in:
Zuul 2019-03-23 02:09:22 +00:00 committed by Gerrit Code Review
commit ca51d4d94c
4 changed files with 37 additions and 50 deletions
config_tempest/services

@ -38,6 +38,7 @@ class Service(object):
self.extensions = [] self.extensions = []
self.versions = [] self.versions = []
self.versions_body = {'versions': []}
def do_get(self, url, top_level=False, top_level_path=""): def do_get(self, url, top_level=False, top_level_path=""):
parts = list(urllib.parse.urlparse(url)) parts = list(urllib.parse.urlparse(url))
@ -150,8 +151,8 @@ class Service(object):
class VersionedService(Service): class VersionedService(Service):
def set_versions(self, top_level=True): def set_versions(self, top_level=True):
body = self.do_get(self.service_url, top_level=top_level) body = self.do_get(self.service_url, top_level=top_level)
body = json.loads(body) self.versions_body = json.loads(body)
self.versions = self.deserialize_versions(body) self.versions = self.deserialize_versions(self.versions_body)
def deserialize_versions(self, body): def deserialize_versions(self, body):
versions = [] versions = []
@ -160,6 +161,26 @@ class VersionedService(Service):
versions.append(version) versions.append(version)
return list(map(lambda x: x['id'], versions)) 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): def no_port_cut_url(self):
# if there is no port defined, cut the url from version to the end # if there is no port defined, cut the url from version to the end
u = urllib3.util.parse_url(self.service_url) u = urllib3.util.parse_url(self.service_url)

@ -30,8 +30,8 @@ class ComputeService(VersionedService):
def set_versions(self): def set_versions(self):
url, top_level = self.no_port_cut_url() url, top_level = self.no_port_cut_url()
body = self.do_get(url, top_level=top_level) body = self.do_get(url, top_level=top_level)
body = json.loads(body) self.versions_body = json.loads(body)
self.versions = self.deserialize_versions(body) self.versions = self.deserialize_versions(self.versions_body)
def set_default_tempest_options(self, conf): def set_default_tempest_options(self, conf):
conf.set('compute-feature-enabled', 'console_output', 'True') conf.set('compute-feature-enabled', 'console_output', 'True')
@ -42,6 +42,10 @@ class ComputeService(VersionedService):
# compute nodes # compute nodes
if self._get_number_of_hosts() >= 2: if self._get_number_of_hosts() >= 2:
conf.set('compute-feature-enabled', 'resize', 'True') 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): def get_service_extension_key(self):
return 'api_extensions' return 'api_extensions'

@ -13,37 +13,16 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import json
from config_tempest.services.base import VersionedService from config_tempest.services.base import VersionedService
from config_tempest.utils import get_base_url
class ShareService(VersionedService): 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): def set_default_tempest_options(self, conf):
if 'v2' in self.service_url: if 'v2' in self.service_url:
microversions = self.get_api_microversion() m_vs = self.filter_api_microversions()
min_microversion = { conf.set('share', 'min_api_microversion', m_vs['min_microversion'])
version['min_version'] for version in microversions['versions'] conf.set('share', 'max_api_microversion', m_vs['max_microversion'])
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))
def get_unversioned_service_name(self): def get_unversioned_service_name(self):
return 'share' return 'share'

@ -17,7 +17,6 @@ import json
from config_tempest import constants as C from config_tempest import constants as C
from config_tempest.services.base import VersionedService from config_tempest.services.base import VersionedService
from config_tempest.utils import get_base_url
from tempest.lib import exceptions from tempest.lib import exceptions
@ -31,30 +30,14 @@ class VolumeService(VersionedService):
def set_versions(self): def set_versions(self):
url, top_level = self.no_port_cut_url() url, top_level = self.no_port_cut_url()
body = self.do_get(url, top_level=top_level) body = self.do_get(url, top_level=top_level)
body = json.loads(body) self.versions_body = json.loads(body)
self.versions = self.deserialize_versions(body) self.versions = self.deserialize_versions(self.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
def set_default_tempest_options(self, conf): def set_default_tempest_options(self, conf):
if 'v3' in self.service_url: if 'v3' in self.service_url:
microversions = self.set_api_microversion() m_vs = self.filter_api_microversions()
min_microversion = { conf.set('volume', 'min_microversion', m_vs['min_microversion'])
version['min_version'] for version in microversions['versions'] conf.set('volume', 'max_microversion', m_vs['max_microversion'])
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))
def get_service_extension_key(self): def get_service_extension_key(self):
return 'api_extensions' return 'api_extensions'