我不确定如何在Ansible中的角色之间覆盖变量.
为了简化设置,我将两个角色应用于同一主机.第一个角色在其中定义一个变量default/main.yml
:
do_some_task: yes
并在其任务中查找该变量:
- name: Some Task when: do_some_task
第二个角色覆盖其中的vars/main.yml
,它应该优先于默认值:
do_some_task: no
但是,该任务仍在运行,表明该变量未被覆盖.似乎覆盖范围限定为第二个角色的任务.我通过向两个角色添加调试任务来测试它:
- name: Test some task debug: "msg='do_some_task = {{ do_some_task }}'"
这证实了第一个角色看到的变量值与第二个角色不同.
TASK: [role1 | Test some task] ok: [myhost] => { "msg": "do_some_task = True" } ... TASK: [role2 | Test some task] ok: [myhost] => { "msg": "do_some_task = False" }
对此的常见答案似乎是在库存或主机变量中设置变量.然而,这不是特别干:如果你有不同库存的许多主机,你必须在很多地方设置相同的变量.
那么是否有某种方法可以覆盖另一个角色的变量?