Purge environment variables to work with ansible-runner changes

Remove inventory scripts show because they no longer exist

Remove reference to non-existent callback directory

Remove more references to removed paths
This commit is contained in:
Alan Rominger
2020-08-28 22:16:34 -04:00
committed by Shane McDonald
parent a3f0158a94
commit 50433789ae

View File

@@ -74,7 +74,6 @@ from awx.main.utils import (update_scm_url,
ignore_inventory_group_removal, extract_ansible_vars, schedule_task_manager, ignore_inventory_group_removal, extract_ansible_vars, schedule_task_manager,
get_awx_version) get_awx_version)
from awx.main.utils.ansible import read_ansible_config from awx.main.utils.ansible import read_ansible_config
from awx.main.utils.common import get_custom_venv_choices
from awx.main.utils.external_logging import reconfigure_rsyslog from awx.main.utils.external_logging import reconfigure_rsyslog
from awx.main.utils.safe_yaml import safe_dump, sanitize_jinja from awx.main.utils.safe_yaml import safe_dump, sanitize_jinja
from awx.main.utils.reload import stop_local_services from awx.main.utils.reload import stop_local_services
@@ -1066,30 +1065,18 @@ class BaseTask(object):
os.chmod(path, stat.S_IRUSR) os.chmod(path, stat.S_IRUSR)
return path return path
def add_ansible_venv(self, venv_path, env, isolated=False):
env['VIRTUAL_ENV'] = venv_path
env['PATH'] = os.path.join(venv_path, "bin") + ":" + env['PATH']
venv_libdir = os.path.join(venv_path, "lib")
if not isolated and (
not os.path.exists(venv_libdir) or
os.path.join(venv_path, '') not in get_custom_venv_choices()
):
raise InvalidVirtualenvError(_(
'Invalid virtual environment selected: {}'.format(venv_path)
))
isolated_manager.set_pythonpath(venv_libdir, env)
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
env['PATH'] = os.path.join(settings.AWX_VENV_PATH, "bin") + ":" + env['PATH'] if 'PATH' in env:
env['PATH'] = os.path.join(settings.AWX_VENV_PATH, "bin") + ":" + env['PATH']
else:
env['PATH'] = os.path.join(settings.AWX_VENV_PATH, "bin")
def build_env(self, instance, private_data_dir, isolated, private_data_files=None): def build_env(self, instance, private_data_dir, isolated, private_data_files=None):
''' '''
Build environment dictionary for ansible-playbook. Build environment dictionary for ansible-playbook.
''' '''
env = dict(os.environ.items()) env = {}
# Add ANSIBLE_* settings to the subprocess environment. # Add ANSIBLE_* settings to the subprocess environment.
for attr in dir(settings): for attr in dir(settings):
if attr == attr.upper() and attr.startswith('ANSIBLE_'): if attr == attr.upper() and attr.startswith('ANSIBLE_'):
@@ -1097,14 +1084,6 @@ class BaseTask(object):
# Also set environment variables configured in AWX_TASK_ENV setting. # Also set environment variables configured in AWX_TASK_ENV setting.
for key, value in settings.AWX_TASK_ENV.items(): for key, value in settings.AWX_TASK_ENV.items():
env[key] = str(value) env[key] = str(value)
# Set environment variables needed for inventory and job event
# callbacks to work.
# Update PYTHONPATH to use local site-packages.
# NOTE:
# Derived class should call add_ansible_venv() or add_awx_venv()
if self.should_use_proot(instance):
env['PROOT_TMP_DIR'] = settings.AWX_PROOT_BASE_PATH
env['AWX_PRIVATE_DATA_DIR'] = private_data_dir
return env return env
def should_use_resource_profiling(self, job): def should_use_resource_profiling(self, job):
@@ -1696,7 +1675,6 @@ class RunJob(BaseTask):
private_data_files=private_data_files) private_data_files=private_data_files)
if private_data_files is None: if private_data_files is None:
private_data_files = {} private_data_files = {}
self.add_ansible_venv(job.ansible_virtualenv_path, env, isolated=isolated)
# Set environment variables needed for inventory and job event # Set environment variables needed for inventory and job event
# callbacks to work. # callbacks to work.
env['JOB_ID'] = str(job.pk) env['JOB_ID'] = str(job.pk)
@@ -1715,7 +1693,8 @@ class RunJob(BaseTask):
cp_dir = os.path.join(private_data_dir, 'cp') cp_dir = os.path.join(private_data_dir, 'cp')
if not os.path.exists(cp_dir): if not os.path.exists(cp_dir):
os.mkdir(cp_dir, 0o700) os.mkdir(cp_dir, 0o700)
env['ANSIBLE_SSH_CONTROL_PATH_DIR'] = cp_dir # FIXME: more elegant way to manage this path in container
env['ANSIBLE_SSH_CONTROL_PATH_DIR'] = '/runner/cp'
# Set environment variables for cloud credentials. # Set environment variables for cloud credentials.
cred_files = private_data_files.get('credentials', {}) cred_files = private_data_files.get('credentials', {})
@@ -1752,7 +1731,8 @@ class RunJob(BaseTask):
for path in config_values[config_setting].split(':'): for path in config_values[config_setting].split(':'):
if path not in paths: if path not in paths:
paths = [config_values[config_setting]] + paths paths = [config_values[config_setting]] + paths
paths = [os.path.join(private_data_dir, folder)] + paths # FIXME: again, figure out more elegant way for inside container
paths = [os.path.join('/runner', folder)] + paths
env[env_key] = os.pathsep.join(paths) env[env_key] = os.pathsep.join(paths)
return env return env
@@ -2082,7 +2062,6 @@ class RunProjectUpdate(BaseTask):
env = super(RunProjectUpdate, self).build_env(project_update, private_data_dir, env = super(RunProjectUpdate, self).build_env(project_update, private_data_dir,
isolated=isolated, isolated=isolated,
private_data_files=private_data_files) private_data_files=private_data_files)
self.add_ansible_venv(settings.ANSIBLE_VENV_PATH, env)
env['ANSIBLE_RETRY_FILES_ENABLED'] = str(False) env['ANSIBLE_RETRY_FILES_ENABLED'] = str(False)
env['ANSIBLE_ASK_PASS'] = str(False) env['ANSIBLE_ASK_PASS'] = str(False)
env['ANSIBLE_BECOME_ASK_PASS'] = str(False) env['ANSIBLE_BECOME_ASK_PASS'] = str(False)
@@ -2524,18 +2503,6 @@ class RunInventoryUpdate(BaseTask):
event_model = InventoryUpdateEvent event_model = InventoryUpdateEvent
event_data_key = 'inventory_update_id' event_data_key = 'inventory_update_id'
# TODO: remove once inv updates run in containers
def should_use_proot(self, inventory_update):
'''
Return whether this task should use proot.
'''
return getattr(settings, 'AWX_PROOT_ENABLED', False)
# TODO: remove once inv updates run in containers
@property
def proot_show_paths(self):
return [settings.AWX_ANSIBLE_COLLECTIONS_PATHS]
def build_private_data(self, inventory_update, private_data_dir): def build_private_data(self, inventory_update, private_data_dir):
""" """
Return private data needed for inventory update. Return private data needed for inventory update.
@@ -2562,17 +2529,18 @@ class RunInventoryUpdate(BaseTask):
are accomplished by the inventory source injectors (in this method) are accomplished by the inventory source injectors (in this method)
or custom credential type injectors (in main run method). or custom credential type injectors (in main run method).
""" """
env = super(RunInventoryUpdate, self).build_env(inventory_update, base_env = super(RunInventoryUpdate, self).build_env(inventory_update,
private_data_dir, private_data_dir,
isolated, isolated,
private_data_files=private_data_files) private_data_files=private_data_files)
# TODO: this is able to run by turning off isolation
# the goal is to run it a container instead
env = dict(os.environ.items())
env.update(base_env)
if private_data_files is None: if private_data_files is None:
private_data_files = {} private_data_files = {}
# TODO: remove once containers replace custom venvs # Pass inventory source ID to inventory script.
self.add_ansible_venv(inventory_update.ansible_virtualenv_path, env, isolated=isolated)
# Legacy environment variables, were used as signal to awx-manage command
# now they are provided in case some scripts may be relying on them
env['INVENTORY_SOURCE_ID'] = str(inventory_update.inventory_source_id) env['INVENTORY_SOURCE_ID'] = str(inventory_update.inventory_source_id)
env['INVENTORY_UPDATE_ID'] = str(inventory_update.pk) env['INVENTORY_UPDATE_ID'] = str(inventory_update.pk)
env.update(STANDARD_INVENTORY_UPDATE_ENV) env.update(STANDARD_INVENTORY_UPDATE_ENV)
@@ -2610,7 +2578,8 @@ class RunInventoryUpdate(BaseTask):
for path in config_values[config_setting].split(':'): for path in config_values[config_setting].split(':'):
if path not in paths: if path not in paths:
paths = [config_values[config_setting]] + paths paths = [config_values[config_setting]] + paths
paths = [os.path.join(private_data_dir, folder)] + paths # FIXME: containers
paths = [os.path.join('/runner', folder)] + paths
env[env_key] = os.pathsep.join(paths) env[env_key] = os.pathsep.join(paths)
return env return env
@@ -2885,7 +2854,6 @@ class RunAdHocCommand(BaseTask):
env = super(RunAdHocCommand, self).build_env(ad_hoc_command, private_data_dir, env = super(RunAdHocCommand, self).build_env(ad_hoc_command, private_data_dir,
isolated=isolated, isolated=isolated,
private_data_files=private_data_files) private_data_files=private_data_files)
self.add_ansible_venv(settings.ANSIBLE_VENV_PATH, env)
# Set environment variables needed for inventory and ad hoc event # Set environment variables needed for inventory and ad hoc event
# callbacks to work. # callbacks to work.
env['AD_HOC_COMMAND_ID'] = str(ad_hoc_command.pk) env['AD_HOC_COMMAND_ID'] = str(ad_hoc_command.pk)
@@ -2899,7 +2867,8 @@ class RunAdHocCommand(BaseTask):
cp_dir = os.path.join(private_data_dir, 'cp') cp_dir = os.path.join(private_data_dir, 'cp')
if not os.path.exists(cp_dir): if not os.path.exists(cp_dir):
os.mkdir(cp_dir, 0o700) os.mkdir(cp_dir, 0o700)
env['ANSIBLE_SSH_CONTROL_PATH'] = cp_dir # FIXME: more elegant way to manage this path in container
env['ANSIBLE_SSH_CONTROL_PATH'] = '/runner/cp'
return env return env
@@ -3061,10 +3030,13 @@ class RunSystemJob(BaseTask):
return path return path
def build_env(self, instance, private_data_dir, isolated=False, private_data_files=None): def build_env(self, instance, private_data_dir, isolated=False, private_data_files=None):
env = super(RunSystemJob, self).build_env(instance, private_data_dir, base_env = super(RunSystemJob, self).build_env(instance, private_data_dir,
isolated=isolated, isolated=isolated,
private_data_files=private_data_files) private_data_files=private_data_files)
self.add_awx_venv(env) # TODO: this is able to run by turning off isolation
# the goal is to run it a container instead
env = dict(os.environ.items())
env.update(base_env)
return env return env
def build_cwd(self, instance, private_data_dir): def build_cwd(self, instance, private_data_dir):