mirror of
https://github.com/ansible/awx.git
synced 2026-03-04 18:21:03 -03:30
set PYTHONPATH properly for isolated usage of runner
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import fnmatch
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
@@ -17,6 +18,15 @@ logger = logging.getLogger('awx.isolated.manager')
|
|||||||
playbook_logger = logging.getLogger('awx.isolated.manager.playbooks')
|
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):
|
class IsolatedManager(object):
|
||||||
|
|
||||||
def __init__(self, cancelled_callback=None, idle_timeout=None):
|
def __init__(self, cancelled_callback=None, idle_timeout=None):
|
||||||
@@ -37,6 +47,7 @@ class IsolatedManager(object):
|
|||||||
env['ANSIBLE_RETRY_FILES_ENABLED'] = 'False'
|
env['ANSIBLE_RETRY_FILES_ENABLED'] = 'False'
|
||||||
env['ANSIBLE_HOST_KEY_CHECKING'] = 'False'
|
env['ANSIBLE_HOST_KEY_CHECKING'] = 'False'
|
||||||
env['ANSIBLE_LIBRARY'] = os.path.join(os.path.dirname(awx.__file__), 'plugins', 'isolated')
|
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):
|
def finished_callback(runner_obj):
|
||||||
if runner_obj.status == 'failed':
|
if runner_obj.status == 'failed':
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
@@ -7,6 +8,8 @@ from django.core.management.base import BaseCommand, CommandError
|
|||||||
|
|
||||||
import ansible_runner
|
import ansible_runner
|
||||||
|
|
||||||
|
from awx.main.expect.isolated_manager import set_pythonpath
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
"""Tests SSH connectivity between a controller and target isolated node"""
|
"""Tests SSH connectivity between a controller and target isolated node"""
|
||||||
@@ -29,12 +32,15 @@ class Command(BaseCommand):
|
|||||||
getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None)
|
getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None)
|
||||||
]):
|
]):
|
||||||
ssh_key = settings.AWX_ISOLATED_PRIVATE_KEY
|
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(
|
res = ansible_runner.interface.run(
|
||||||
private_data_dir=path,
|
private_data_dir=path,
|
||||||
host_pattern='all',
|
host_pattern='all',
|
||||||
inventory='{} ansible_ssh_user={}'.format(hostname, settings.AWX_ISOLATED_USERNAME),
|
inventory='{} ansible_ssh_user={}'.format(hostname, settings.AWX_ISOLATED_USERNAME),
|
||||||
module='shell',
|
module='shell',
|
||||||
module_args='ansible-runner --version',
|
module_args='ansible-runner --version',
|
||||||
|
envvars=env,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
ssh_key=ssh_key,
|
ssh_key=ssh_key,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
# Python
|
# Python
|
||||||
from collections import OrderedDict, namedtuple
|
from collections import OrderedDict, namedtuple
|
||||||
import errno
|
import errno
|
||||||
import fnmatch
|
|
||||||
import functools
|
import functools
|
||||||
import importlib
|
import importlib
|
||||||
import json
|
import json
|
||||||
@@ -870,12 +869,8 @@ class BaseTask(object):
|
|||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
'a valid Python virtualenv does not exist at {}'.format(venv_path)
|
'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):
|
isolated_manager.set_pythonpath(venv_libdir, env)
|
||||||
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
|
|
||||||
|
|
||||||
def add_awx_venv(self, env):
|
def add_awx_venv(self, env):
|
||||||
env['VIRTUAL_ENV'] = settings.AWX_VENV_PATH
|
env['VIRTUAL_ENV'] = settings.AWX_VENV_PATH
|
||||||
|
|||||||
Reference in New Issue
Block a user