有条件地导入角色 运行
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_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
我正在编写一个运行另一个角色的父 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_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