set PYTHONPATH properly for isolated usage of runner

This commit is contained in:
Ryan Petrello
2019-03-28 10:43:14 -04:00
parent 99478f5d25
commit dd81f59d9a
3 changed files with 19 additions and 7 deletions

View File

@@ -1,3 +1,4 @@
import fnmatch
import json
import os
import shutil
@@ -17,6 +18,15 @@ logger = logging.getLogger('awx.isolated.manager')
playbook_logger = logging.getLogger('awx.isolated.manager.playbooks')
def set_pythonpath(venv_libdir, env):
env.pop('PYTHONPATH', None) # default to none if no python_ver matches
for version in os.listdir(venv_libdir):
if fnmatch.fnmatch(version, 'python[23].*'):
if os.path.isdir(os.path.join(venv_libdir, version)):
env['PYTHONPATH'] = os.path.join(venv_libdir, version, "site-packages") + ":"
break
class IsolatedManager(object):
def __init__(self, cancelled_callback=None, idle_timeout=None):
@@ -37,6 +47,7 @@ class IsolatedManager(object):
env['ANSIBLE_RETRY_FILES_ENABLED'] = 'False'
env['ANSIBLE_HOST_KEY_CHECKING'] = 'False'
env['ANSIBLE_LIBRARY'] = os.path.join(os.path.dirname(awx.__file__), 'plugins', 'isolated')
set_pythonpath(os.path.join(settings.ANSIBLE_VENV_PATH, 'lib'), env)
def finished_callback(runner_obj):
if runner_obj.status == 'failed':

View File

@@ -1,3 +1,4 @@
import os
import shutil
import sys
import tempfile
@@ -7,6 +8,8 @@ from django.core.management.base import BaseCommand, CommandError
import ansible_runner
from awx.main.expect.isolated_manager import set_pythonpath
class Command(BaseCommand):
"""Tests SSH connectivity between a controller and target isolated node"""
@@ -29,12 +32,15 @@ class Command(BaseCommand):
getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None)
]):
ssh_key = settings.AWX_ISOLATED_PRIVATE_KEY
env = dict(os.environ.items())
set_pythonpath(os.path.join(settings.ANSIBLE_VENV_PATH, 'lib'), env)
res = ansible_runner.interface.run(
private_data_dir=path,
host_pattern='all',
inventory='{} ansible_ssh_user={}'.format(hostname, settings.AWX_ISOLATED_USERNAME),
module='shell',
module_args='ansible-runner --version',
envvars=env,
verbosity=3,
ssh_key=ssh_key,
)

View File

@@ -4,7 +4,6 @@
# Python
from collections import OrderedDict, namedtuple
import errno
import fnmatch
import functools
import importlib
import json
@@ -870,12 +869,8 @@ class BaseTask(object):
raise RuntimeError(
'a valid Python virtualenv does not exist at {}'.format(venv_path)
)
env.pop('PYTHONPATH', None) # default to none if no python_ver matches
for version in os.listdir(venv_libdir):
if fnmatch.fnmatch(version, 'python[23].*'):
if os.path.isdir(os.path.join(venv_libdir, version)):
env['PYTHONPATH'] = os.path.join(venv_libdir, version, "site-packages") + ":"
break
isolated_manager.set_pythonpath(venv_libdir, env)
def add_awx_venv(self, env):
env['VIRTUAL_ENV'] = settings.AWX_VENV_PATH