[stable-2.18] Limit respawn to supported python versions (#83662) (#84769)

* Limit respawn to supported python versions
(cherry picked from commit 00067f1)
pull/84810/head
Matt Martz 9 months ago committed by GitHub
parent 6d7c4701c7
commit a5ce34307f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,2 @@
bugfixes:
- module respawn - limit to supported Python versions

@ -4,11 +4,14 @@
from __future__ import annotations
import os
import pathlib
import subprocess
import sys
from ansible.module_utils.common.text.converters import to_bytes
_ANSIBLE_PARENT_PATH = pathlib.Path(__file__).parents[3]
def has_respawned():
return hasattr(sys.modules['__main__'], '_respawned')
@ -54,11 +57,20 @@ def probe_interpreters_for_module(interpreter_paths, module_name):
be returned (or ``None`` if probing fails for all supplied paths).
:arg module_name: fully-qualified Python module name to probe for (eg, ``selinux``)
"""
PYTHONPATH = os.getenv('PYTHONPATH', '')
env = os.environ | {'PYTHONPATH': f'{_ANSIBLE_PARENT_PATH}:{PYTHONPATH}'.rstrip(': ')}
for interpreter_path in interpreter_paths:
if not os.path.exists(interpreter_path):
continue
try:
rc = subprocess.call([interpreter_path, '-c', 'import {0}'.format(module_name)])
rc = subprocess.call(
[
interpreter_path,
'-c',
f'import {module_name}, ansible.module_utils.basic',
],
env=env,
)
if rc == 0:
return interpreter_path
except Exception:

Loading…
Cancel
Save