Merge "Support common ansible dependencies"

This commit is contained in:
Zuul 2019-03-18 08:20:57 +00:00 committed by Gerrit Code Review
commit 0efd313289
2 changed files with 31 additions and 17 deletions

View File

@ -1,12 +1,14 @@
# This file describes the currently supported ansible versions
[common]
default_version = 2.7
requirements = ara
[2.5]
deprecated = true
requirements = ansible>=2.5.1,<2.6 ara
requirements = ansible>=2.5.1,<2.6
[2.6]
requirements = ansible>=2.6,<2.7 ara
requirements = ansible>=2.6,<2.7
[2.7]
default = true
requirements = ansible>=2.7,<2.8 ara
requirements = ansible>=2.7,<2.8

View File

@ -34,7 +34,10 @@ class ManagedAnsible:
requirements = get_default(config, version, 'requirements')
self._requirements = requirements.split(' ')
self.default = get_default(config, version, 'default', False)
common_requirements = get_default(config, 'common', 'requirements')
if common_requirements:
self._requirements.extend(common_requirements.split(' '))
self.deprecated = get_default(config, version, 'deprecated', False)
self._ansible_roots = [os.path.join(
@ -47,8 +50,9 @@ class ManagedAnsible:
def ensure_ansible(self, upgrade=False):
self._ensure_venv()
self.log.info('Installing ansible %s, extra packages: %s',
self.version, self.extra_packages)
self.log.info('Installing ansible %s, requirements: %s, '
'extra packages: %s',
self.version, self._requirements, self.extra_packages)
self._run_pip(self._requirements + self.extra_packages,
upgrade=upgrade)
@ -122,13 +126,18 @@ class ManagedAnsible:
mapping)
packages = os.environ.get(env_var)
result = []
if packages:
return packages.strip().split(' ')
result.extend(packages.strip().split(' '))
return []
common_packages = os.environ.get('ANSIBLE_EXTRA_PACKAGES')
if common_packages:
result.extend(common_packages.strip().split(' '))
return result
def __repr__(self):
return 'Ansible {a.version}, {a.default}, {a.deprecated}'.format(
return 'Ansible {a.version}, {a.deprecated}'.format(
a=self)
@ -155,6 +164,9 @@ class AnsibleManager:
config.read_string(c)
for version in config.sections():
# The common section is no ansible version
if version == 'common':
continue
ansible = ManagedAnsible(
config, version,
@ -166,15 +178,15 @@ class AnsibleManager:
self._supported_versions[ansible.version] = ansible
if ansible.default:
if self.default_version is not None:
raise RuntimeError(
'Default ansible version can only specified once')
self.default_version = ansible.version
if not self.default_version:
default_version = get_default(
config, 'common', 'default_version', None)
if not default_version:
raise RuntimeError('A default ansible version must be specified')
# Validate that this version is known
self._getAnsible(default_version)
self.default_version = default_version
def install(self, upgrade=False):
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = {executor.submit(a.ensure_ansible, upgrade): a