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

View File

@ -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)

View File

@ -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'

View File

@ -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'

View File

@ -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'