我正在编写一个通过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_versions和pyenv_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