我怎样才能跳过 Ansible 中的角色?

How can I skip role in Ansible?

我有这个剧本:

  roles:
    - { role: common}
    - { role: mariadb}
    - { role: wordpress}

我想要的是每个角色的第一个任务是有条件的,如果为真,那么我想跳过整个角色,剧本继续下一个。

现在我可以像这样使用 when

  roles:
    - { role: common, when: mvar is False }

但为此我必须评估剧本本身中的 mvar 但为此 mvar 我需要该角色本身的所有其他变量等。这样我在角色上会更容易做。

有什么办法吗?

在每个角色中,在 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 文档说:

Notes

Include has some unintuitive behaviours depending on if it is running in a static or dynamic in play or in playbook context, in an effort to clarify behaviours we are moving to a new set modules (include_tasks, include_role, import_playbook, import_tasks) that have well established and clear behaviours. This module will still be supported for some time but we are looking at deprecating it in the near future.

除了上述答案之外,您还可以考虑使用标签来跳过特定任务或角色,具体取决于您如何调用角色。

https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html

如果以不太动态的方式确定条件,这将很有效 - 因此,如果您的剧本很大,但在执行时知道要跳过某些部分。 标签也可用于选择性地 运行 特定任务。

注意:以这种方式使用标签通常是在开发过程中测试剧本特定部分的好方法,而无需 运行 整个事情。