Make zuul ansible dir self-contained

This way we can bind mount it in and set it as a plugin path in bwrap
without needing all of zuul.

Change-Id: Ibb81167895c73b64bb49809d007f4768013c7220
Co-Authored-By: James E. Blair <jeblair@redhat.com>
Co-Authored-By: Monty Taylor <mordred@inaugust.com>
This commit is contained in:
Clint Byrum 2017-05-25 16:11:13 -07:00 committed by James E. Blair
parent 5870ccae62
commit 3326908274
1 changed files with 25 additions and 20 deletions

View File

@ -31,10 +31,7 @@ import git
from six.moves import shlex_quote
import zuul.merger.merger
import zuul.ansible.action
import zuul.ansible.callback
import zuul.ansible.library
import zuul.ansible.lookup
import zuul.ansible
from zuul.lib import commandsocket
COMMANDS = ['stop', 'pause', 'unpause', 'graceful', 'verbose',
@ -361,25 +358,26 @@ class ExecutorServer(object):
self.command_socket = commandsocket.CommandSocket(path)
ansible_dir = os.path.join(state_dir, 'ansible')
self.ansible_dir = ansible_dir
self.library_dir = os.path.join(ansible_dir, 'library')
if not os.path.exists(self.library_dir):
os.makedirs(self.library_dir)
self.action_dir = os.path.join(ansible_dir, 'action')
if not os.path.exists(self.action_dir):
os.makedirs(self.action_dir)
self.callback_dir = os.path.join(ansible_dir, 'callback')
if not os.path.exists(self.callback_dir):
os.makedirs(self.callback_dir)
zuul_dir = os.path.join(ansible_dir, 'zuul')
plugin_dir = os.path.join(zuul_dir, 'ansible')
self.lookup_dir = os.path.join(ansible_dir, 'lookup')
if not os.path.exists(self.lookup_dir):
os.makedirs(self.lookup_dir)
if not os.path.exists(plugin_dir):
os.makedirs(plugin_dir)
_copy_ansible_files(zuul.ansible.library, self.library_dir)
_copy_ansible_files(zuul.ansible.action, self.action_dir)
_copy_ansible_files(zuul.ansible.callback, self.callback_dir)
_copy_ansible_files(zuul.ansible.lookup, self.lookup_dir)
self.library_dir = os.path.join(plugin_dir, 'library')
self.action_dir = os.path.join(plugin_dir, 'action')
self.callback_dir = os.path.join(plugin_dir, 'callback')
self.lookup_dir = os.path.join(plugin_dir, 'lookup')
_copy_ansible_files(zuul.ansible, plugin_dir)
# We're copying zuul.ansible.* into a directory we are going
# to add to pythonpath, so our plugins can "import
# zuul.ansible". But we're not installing all of zuul, so
# create a __init__.py file for the stub "zuul" module.
with open(os.path.join(zuul_dir, '__init__.py'), 'w'):
pass
self.job_workers = {}
@ -1125,6 +1123,13 @@ class AnsibleJob(object):
env_copy = os.environ.copy()
env_copy.update(self.ssh_agent.env)
env_copy['LOGNAME'] = 'zuul'
pythonpath = env_copy.get('PYTHONPATH')
if pythonpath:
pythonpath = [pythonpath]
else:
pythonpath = []
pythonpath = [self.executor_server.ansible_dir] + pythonpath
env_copy['PYTHONPATH'] = os.path.pathsep.join(pythonpath)
if trusted:
config_file = self.jobdir.trusted_config