我有这本剧本:
roles:
- { role: common}
- { role: mariadb}
- { role: wordpress}
我想要的每个角色都想要一个有条件的条件,如果是真的,那么我想跳过整个角色和剧本继续下一步。
现在我可以这样使用when
:
roles:
- { role: common, when: mvar is False }
但为此,我必须在剧本本身中评估mvar
,但是对于该mvar
,我需要所有其他vars等。因此,对我而言,这会更容易。
有什么方法?
在每个角色中,在tasks/main.yml
中,仅在满足条件时才包含具有任务的文件:
- include: real_tasks.yml
when: condition_is_met
除了 @techraf的答案外,还可以使用include_tasks而不是include。
- include_tasks: real_tasks.yml
when: condition_is_met
Ansible包括文档说:
注释
include具有一些不直觉的行为,具体取决于它是否在游戏中或剧本中的静态或动态上运行,为了澄清行为,我们正在转到一个新的集合模块(include_tasks,include_role,include_role,import_playbook,import_tasks,import_tasks),该行为具有良好的行为和清晰的行为。该模块仍将在一段时间内得到支持,但我们正在考虑在不久的将来将其贬值。
除了上面的答案外,您还可以考虑使用标签跳过特定的任务或角色,具体取决于您如何调用角色。
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html
如果以较不动态的方式确定条件,这将很好地工作 - 因此,如果您有一本大型剧本,但在执行时知道您想跳过某些部分。标签也可以用于选择性地运行特定任务。
注意:以这种方式使用标签通常是在开发过程中测试剧本特定部分而不运行整个过程的好方法。