【问题标题】:How can I skip role in Ansible?如何跳过 Ansible 中的角色?
【发布时间】:2017-02-24 10:40:15
【问题描述】:

我有这个剧本:

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

我希望在每个角色中都有第一个任务作为一些条件,如果为真,那么我想跳过整个角色,剧本继续下一个。

现在我可以像这样使用when

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

但为此,我必须在剧本本身中评估mvar,但为此,mvar 我需要该角色本身的所有其他变量等内容。所以我会更容易扮演角色。

有什么办法吗?

【问题讨论】:

标签: ansible ansible-role


【解决方案1】:

在每个角色中,在tasks/main.yml 中仅在满足条件时包含一个包含任务的文件:

- include: real_tasks.yml
  when: condition_is_met

【讨论】:

  • 谢谢。这是聪明的方式:)
【解决方案2】:

除了@techraf 的回答,还可以使用 include_tasks 代替 include。

- include_tasks: real_tasks.yml
  when: condition_is_met

Ansible include 文档说:

注意事项

Include 有一些不直观的行为,具体取决于它是在游戏中还是在 playbook 上下文中运行的静态或动态,为了澄清我们正在迁移到新的集合模块(include_tasks、include_role、import_playbook、import_tasks)的行为有良好的行为和明确的行为。此模块仍将受支持一段时间,但我们正在考虑在不久的将来弃用它。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多