问题描述
我正在编写一个父 ansible 角色,该角色通过 import_role 运行另一个角色。这个同级角色 (staticdev.pyenv) 仅在传递参数 pyenv_python_versions
时运行的想法,否则会被跳过。
根据official documentation,我尝试了以下方法:
父/任务/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/docker-debian11-ansible:latest)它无论如何都会执行这个角色,即使没有任何价值pyenv_python_versions
。 when
没有被考虑,我也尝试过 include_role
。可以在 here 中找到完整的日志。
有什么想法吗?
更新:按照@lonetwin 的建议,将条件 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