diff --git a/ironic/api/controllers/base.py b/ironic/api/controllers/base.py index 3512000de5..87f5c9ef37 100644 --- a/ironic/api/controllers/base.py +++ b/ironic/api/controllers/base.py @@ -14,6 +14,7 @@ import functools +import microversion_parse as mvp from webob import exc from ironic.common.i18n import _ @@ -56,19 +57,19 @@ class Version(object): :returns: a tuple of (major, minor) version numbers :raises: webob.HTTPNotAcceptable """ - version_str = headers.get(Version.string, default_version) - - if version_str.lower() == 'latest': - parse_str = latest_version - else: - parse_str = version_str - try: - version = tuple(int(i) for i in parse_str.split('.')) - except ValueError: - version = () + version_str = mvp.get_version(headers, + service_type='baremetal', + legacy_headers=[Version.string]) + if not version_str: + version_str = default_version + if version_str.lower() == 'latest': + version_str = latest_version - if len(version) != 2: + version = mvp.parse_version_string(version_str) + if len(version) != 2: + raise ValueError + except (ValueError, TypeError, AttributeError): raise exc.HTTPNotAcceptable(_( "Invalid value for %s header") % Version.string) return version diff --git a/requirements.txt b/requirements.txt index 3ec1147f53..b93b3f9ef9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -49,3 +49,4 @@ openstacksdk>=0.48.0 # Apache-2.0 sushy>=4.8.0 construct>=2.9.39 # MIT netaddr>=0.9.0 # BSD +microversion_parse>=1.0.1 # Apache-2.0