有条件地导入角色 运行

Ansible import role run conditionally

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

根据official documentation,我尝试了以下方法:

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/docker-debian11-ansible:latest)它无论如何都会执行这个角色,即使没有任何价值pyenv_python_versionswhen 未被考虑,我也尝试使用 include_role。可以找到完整的日志 here

有什么想法吗?

更新:根据@lonetwin 的建议,将条件 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