diff --git a/ironic_inspector/main.py b/ironic_inspector/main.py index d11d391a4..fa0582143 100644 --- a/ironic_inspector/main.py +++ b/ironic_inspector/main.py @@ -17,6 +17,7 @@ import random import re import flask +import microversion_parse as mvp from oslo_utils import strutils from oslo_utils import uuidutils from werkzeug.middleware import proxy_fix @@ -35,6 +36,7 @@ from ironic_inspector import process from ironic_inspector import rules from ironic_inspector import utils + CONF = ironic_inspector.conf.CONF @@ -118,11 +120,16 @@ def _get_version(): ver = flask.request.headers.get(conf_opts.VERSION_HEADER, _DEFAULT_API_VERSION) try: - if ver.lower() == 'latest': - requested = CURRENT_API_VERSION - else: - requested = tuple(int(x) for x in ver.split('.')) - except (ValueError, TypeError): + requested = _DEFAULT_API_VERSION + if ver: + if 'latest' in ver.lower(): + requested = CURRENT_API_VERSION + else: + requested = mvp.parse_version_string(ver) + + if len(requested) != 2: + raise ValueError + except (ValueError, TypeError, AttributeError): return error_response(_('Malformed API version: expected string ' 'in form of X.Y or latest'), code=400) return requested diff --git a/requirements.txt b/requirements.txt index 7951400da..a4dfc5faa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,3 +38,4 @@ tenacity>=6.2.0 # Apache-2.0 stevedore>=1.20.0 # Apache-2.0 SQLAlchemy>=1.4.0 # MIT tooz>=2.5.1 # Apache-2.0 +microversion_parse>=0.1.4