from shlex import quote directories = { '/opt/pyenv': {}, '/opt/pyenv/install': {}, } git_deploy = { '/opt/pyenv/install': { 'repo': 'https://github.com/pyenv/pyenv.git', 'rev': node.metadata.get('pyenv/version'), 'needs': { 'directory:/opt/pyenv/install', }, }, } for version in node.metadata.get('pyenv/python_versions', set()): actions[f'pyenv_install_{version}'] = { 'command': f'PYENV_ROOT=/opt/pyenv /opt/pyenv/install/bin/pyenv install {quote(version)}', 'unless': f'PYENV_ROOT=/opt/pyenv /opt/pyenv/install/bin/pyenv versions --bare | grep -E "^{quote(version)}$"', 'needs': { 'git_deploy:/opt/pyenv/install', }, 'after': { 'pkg_apt:', }, }