Make ansible version configurable

Currently the default ansible version is selected by the version of
zuul itself. However we want to make this configurable per deployment
(zuul.conf), tenant and job.

Change-Id: Iccbb124ac7f7a8260c730fbc109ccfc1dec09f8b
This commit is contained in:
Tobias Henkel
2019-02-17 10:18:13 +01:00
parent 07ab212f01
commit 5c2b61e638
27 changed files with 323 additions and 57 deletions

View File

@@ -123,13 +123,18 @@ class ManagedAnsible:
class AnsibleManager:
log = logging.getLogger('zuul.ansible_manager')
def __init__(self, zuul_ansible_dir=None):
def __init__(self, zuul_ansible_dir=None, default_version=None):
self._supported_versions = {}
self.default_version = None
self.zuul_ansible_dir = zuul_ansible_dir
self.load_ansible_config()
# If configured, override the default version
if default_version:
self.requestVersion(default_version)
self.default_version = default_version
def load_ansible_config(self):
c = resource_string(__name__, 'ansible-config.conf').decode()
config = configparser.ConfigParser()
@@ -193,17 +198,30 @@ class AnsibleManager:
raise Exception('Requested ansible version %s not found' % version)
return ansible
def getAnsibleCommand(self, version=None, command='ansible-playbook'):
def getAnsibleCommand(self, version, command='ansible-playbook'):
ansible = self._getAnsible(version)
return os.path.join(ansible.venv_path, 'bin', command)
def getAnsibleDir(self, version=None):
def getAnsibleDir(self, version):
ansible = self._getAnsible(version)
return os.path.join(self.zuul_ansible_dir, ansible.version)
def getAnsiblePluginDir(self, version=None):
def getAnsiblePluginDir(self, version):
return os.path.join(self.getAnsibleDir(version), 'zuul', 'ansible')
def requestVersion(self, version):
if version not in self._supported_versions:
raise Exception(
'Requested ansible version \'%s\' is unknown. Supported '
'versions are %s' % (
version, ', '.join(self._supported_versions)))
def getSupportedVersions(self):
versions = []
for version in self._supported_versions:
versions.append((version, version == self.default_version))
return versions
def copyAnsibleFiles(self):
if os.path.exists(self.zuul_ansible_dir):
shutil.rmtree(self.zuul_ansible_dir)