diff --git a/ironic_inspector/main.py b/ironic_inspector/main.py index d11d391a4..0972440ba 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 ver.lower() == 'latest': + 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..b96179782 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>=1.0.1