可靠的导入角色有条件运行



我正在编写一个通过import_role运行另一个角色的父级ansible角色。这个兄弟角色(staticdev.pyenv(只在传递参数pyenv_python_versions时运行,否则将跳过。

根据官方文件,我尝试了以下方法:

parent/tasks/main.yml

---
- name: Install pyenv
import_role:
name: staticdev.pyenv
vars:
pyenv_owner: "{{ ansible_env.USER }}"
pyenv_path: "{{ ansible_env.HOME }}/pyenv"
pyenv_global: "{{ pyenv_global }}"
pyenv_python_versions: "{{ pyenv_python_versions }}"
pyenv_virtualenvs: []
when: pyenv_python_versions

我使用的是当前的ansible 4.1.0(核心2.11.1(,当我在Debian 11上测试它时(图片:cisagov/doker-debian11-ansible:latest(,它无论如何都会执行角色,即使pyenv_python_versions没有任何值。when没有被考虑,我也尝试过使用include_role。完整的日志可以在这里找到。

知道吗?

更新:根据@lonetown的建议,将条件when从更改为pyenv_python_versions。

问题是角色导入正在从导入的角色复制变量(pyenv_global、pyenv_python_versionspyenv_virtualenvs(,在这种情况下,只需省略导入的角色参数(如果为它们创建新的默认值,它们将被覆盖(即可解决。

解决方案:

---
- name: Install pyenv
import_role:
name: staticdev.pyenv
vars:
pyenv_owner: "{{ ansible_env.USER }}"
pyenv_path: "{{ ansible_env.HOME }}/pyenv"
when: pyenv_python_versions

最新更新