From 55352bdda470d23116576226987f90cf2b386244 Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Tue, 9 Jan 2018 16:17:55 -0600 Subject: [PATCH] Error early if executing python version doesn't meet documented minimums (#34655) * Error early if executing python version doesn't meet documented minimums. Fixes #34597 * Make recommended enhancements --- bin/ansible | 9 +++++++++ lib/ansible/module_utils/basic.py | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/bin/ansible b/bin/ansible index 3a2f03e64e..c3d9620115 100755 --- a/bin/ansible +++ b/bin/ansible @@ -41,6 +41,15 @@ from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError from ansible.module_utils._text import to_text +# Used for determining if the system is running a new enough python version +# and should only restrict on our documented minimum versions +_PY3_MIN = sys.version_info[:2] >= (3, 5) +_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,) +_PY_MIN = _PY3_MIN or _PY2_MIN +if not _PY_MIN: + raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines())) + + class LastResort(object): # OUTPUT OF LAST RESORT def display(self, msg, log_only=None): diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 47540ee543..c42c753b10 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -232,6 +232,18 @@ PERM_BITS = 0o7777 # file mode permission bits EXEC_PERM_BITS = 0o0111 # execute permission bits DEFAULT_PERM = 0o0666 # default file permission bits +# Used for determining if the system is running a new enough python version +# and should only restrict on our documented minimum versions +_PY3_MIN = sys.version_info[:2] >= (3, 5) +_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,) +_PY_MIN = _PY3_MIN or _PY2_MIN +if not _PY_MIN: + print( + '\n{"failed": true, ' + '"msg": "Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s"}' % ''.join(sys.version.splitlines()) + ) + sys.exit(1) + def get_platform(): ''' what's the platform? example: Linux is a platform. '''