mirror of
https://github.com/ansible/awx.git
synced 2026-05-11 11:27:36 -02:30
Changes for Tower virtualenv support
* Break requirements down into ansible and tower reqs * Generate separate Ansible and Tower virtual environments * Install appropriate requirements files into each one * Modify development tools to use these venvs instead of our old site-packages * Modify settings to indicate venv enablement and location of venvs * Modify tasks to use the proper virtual environment for its purpose
This commit is contained in:
committed by
Graham Mainwaring
parent
44618d4956
commit
46bbc83d0d
@@ -37,18 +37,6 @@ def find_commands(management_dir):
|
||||
def prepare_env():
|
||||
# Update the default settings environment variable based on current mode.
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'awx.settings.%s' % MODE)
|
||||
# Add local site-packages directory to path.
|
||||
local_site_packages = os.path.join(os.path.dirname(__file__), 'lib',
|
||||
'site-packages')
|
||||
site.addsitedir(local_site_packages)
|
||||
try:
|
||||
index = sys.path.index(local_site_packages)
|
||||
sys.path.pop(index)
|
||||
# Work around https://bugs.python.org/issue7744
|
||||
# by moving local_site_packages to the front of sys.path
|
||||
sys.path.insert(0, local_site_packages)
|
||||
except ValueError:
|
||||
pass
|
||||
# Hide DeprecationWarnings when running in production. Need to first load
|
||||
# settings to apply our filter after Django's own warnings filter.
|
||||
from django.conf import settings
|
||||
|
||||
@@ -445,11 +445,9 @@ class BaseTask(Task):
|
||||
# Set environment variables needed for inventory and job event
|
||||
# callbacks to work.
|
||||
# Update PYTHONPATH to use local site-packages.
|
||||
python_paths = env.get('PYTHONPATH', '').split(os.pathsep)
|
||||
local_site_packages = self.get_path_to('..', 'lib', 'site-packages')
|
||||
if local_site_packages not in python_paths:
|
||||
python_paths.insert(0, local_site_packages)
|
||||
env['PYTHONPATH'] = os.pathsep.join(python_paths)
|
||||
if settings.ANSIBLE_USE_VENV:
|
||||
env['VIRTUAL_ENV'] = settings.ANSIBLE_VENV_PATH
|
||||
env['PATH'] = os.path.join(settings.ANSIBLE_VENV_PATH, "bin") + ":" + env['PATH']
|
||||
if self.should_use_proot:
|
||||
env['PROOT_TMP_DIR'] = tower_settings.AWX_PROOT_BASE_PATH
|
||||
return env
|
||||
@@ -1276,7 +1274,9 @@ class RunInventoryUpdate(BaseTask):
|
||||
"""
|
||||
env = super(RunInventoryUpdate, self).build_env(inventory_update,
|
||||
**kwargs)
|
||||
|
||||
if settings.TOWER_USE_VENV:
|
||||
env['VIRTUAL_ENV'] = settings.TOWER_VENV_PATH
|
||||
env['PATH'] = os.path.join(settings.TOWER_VENV_PATH, "bin") + ":" + env['PATH']
|
||||
# Pass inventory source ID to inventory script.
|
||||
env['INVENTORY_SOURCE_ID'] = str(inventory_update.inventory_source_id)
|
||||
env['INVENTORY_UPDATE_ID'] = str(inventory_update.pk)
|
||||
|
||||
@@ -487,6 +487,10 @@ def wrap_args_with_proot(args, cwd, **kwargs):
|
||||
show_paths = [cwd, kwargs['private_data_dir']]
|
||||
else:
|
||||
show_paths = [cwd]
|
||||
if settings.ANSIBLE_USE_VENV:
|
||||
show_paths.append(settings.ANSIBLE_VENV_PATH)
|
||||
if settings.TOWER_USE_VENV:
|
||||
show_paths.append(settings.TOWER_VENV_PATH)
|
||||
show_paths.extend(getattr(tower_settings, 'AWX_PROOT_SHOW_PATHS', None) or [])
|
||||
for path in sorted(set(show_paths)):
|
||||
if not os.path.exists(path):
|
||||
|
||||
@@ -79,6 +79,10 @@ STATSD_MAXUDPSIZE = 512
|
||||
include(optional('/etc/tower/settings.py'), scope=locals())
|
||||
include(optional('/etc/tower/conf.d/*.py'), scope=locals())
|
||||
|
||||
ANSIBLE_USE_VENV = True
|
||||
ANSIBLE_VENV_PATH = "/tower_devel/venv/ansible"
|
||||
TOWER_USE_VENV = True
|
||||
TOWER_VENV_PATH = "/tower_devel/venv/tower"
|
||||
|
||||
# If any local_*.py files are present in awx/settings/, use them to override
|
||||
# default settings for development. If not present, we can still run using
|
||||
|
||||
@@ -41,6 +41,14 @@ JOBOUTPUT_ROOT = '/var/lib/awx/job_status/'
|
||||
# The heartbeat file for the tower scheduler
|
||||
SCHEDULE_METADATA_LOCATION = '/var/lib/awx/.tower_cycle'
|
||||
|
||||
# Ansible base virtualenv paths and enablement
|
||||
ANSIBLE_USE_VENV = True
|
||||
ANSIBLE_VENV_PATH = "/var/lib/awx/venv/ansible"
|
||||
|
||||
# Tower base virtualenv paths and enablement
|
||||
TOWER_USE_VENV = True
|
||||
TOWER_VENV_PATH = "/var/lib/awx/venv/tower"
|
||||
|
||||
LOGGING['handlers']['tower_warnings'] = {
|
||||
'level': 'WARNING',
|
||||
'class':'logging.handlers.RotatingFileHandler',
|
||||
|
||||
Reference in New Issue
Block a user