我有这本剧本:
roles:
- { role: common}
- { role: mariadb}
- { role: wordpress}
我想要的每个角色都需要第一个任务作为一个条件,如果是真的那么我想跳过整个角色,剧本继续下一个。
现在我可以像这样使用when
:
roles:
- { role: common, when: mvar is False }
但为此,我必须评估playbook本身的mvar
,但对于mvar
,我需要所有其他变量等等。因此,我更容易担任角色。
有什么办法吗?
答案 0 :(得分:2)
在每个角色中,tasks/main.yml
仅在满足条件时包含一个包含任务的文件:
- include: real_tasks.yml
when: condition_is_met
答案 1 :(得分:0)
除了@techraf的答案外,还可以使用include_tasks代替include。
- include_tasks: real_tasks.yml
when: condition_is_met
Ansible include文档说:
注释
include具有一些不直观的行为,具体取决于它是在静态还是动态运行中还是在剧本环境中运行,为了澄清行为,我们正在转向新的设置模块(include_tasks,include_role,import_playbook,import_tasks),具有完善的行为。仍然会支持此模块一段时间,但我们正在考虑在不久的将来不推荐使用它。
答案 2 :(得分:0)
除了上述答案外,您还可以考虑使用标签来跳过特定的任务或角色,具体取决于您对角色的调用方式。
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html
如果以不太动态的方式确定条件,这将很好地工作-因此,如果您有一个大的剧本,但在执行时知道要跳过某些部分。 标签还可以用于有选择地运行特定任务。
注意:以这种方式使用标签通常是在开发过程中测试剧本特定部分而无需运行整个程序的好方法。