【问题标题】:Ansible: In a playbook, filter a role by tag(s) without passing at the command-lineAnsible:在剧本中,按标签过滤角色,而无需在命令行中传递
【发布时间】:2014-09-04 20:41:53
【问题描述】:

在 Ansible 1.7 中,我可以使用命令行中的 --tags 来仅运行该剧本任务的子集。

但我想融入我的剧本来运行一组角色,其中只有与标签匹配的任务。也就是说,我不想通过命令行传递它,因为它每次都是一样的。

一开始我以为是这个命令,但结果恰恰相反:用这些标签标记任务,而不是根据这个过滤掉它们。

roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

我可以想象使用条件来实现这一点,但标签将是实现这一点的更优雅的方式。

【问题讨论】:

  • 顺便说一句,我想要这样做的原因是跨多个角色运行所有包安装任务,这样我就可以创建一个缓存所有更新/升级/安装的 AMI。然后我可以将它用作我的基础 AMI。让脚本正常工作,现在只需通过命令行指定

标签: ansible ansible-playbook


【解决方案1】:

对于当前版本的 Ansible,您只有以下选项:

  1. 在命令行中指定标签
  2. 使用变量而不是标签来有条件地运行任务
  3. 将您的网络服务器角色拆分为多个角色,并将角色依赖项用于常见任务

此功能请求has come up on the mailing list a few times,我没有看到开发团队有任何迹象表明它将作为新功能添加。

【讨论】:

  • 让更多的人不为这个而叫嚣感到惊讶!感谢您对此的回答
  • 这很好地总结了选项。就我而言,它们都不太吸引人,但我必须使用 bash 脚本将一堆 ansible-playbook 命令链接在一起(选项 #1)才能使其工作。
  • 同意,我宁愿在我的剧本中定义标签,而不必在命令行上明确设置它们。我将不得不使用变量,但有条件运行的任务似乎比它应该的要麻烦得多
【解决方案2】:

条件句的使用可以满足你的需要。

您可以在我对另一个人的类似问题here的回答中看到更多信息。

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多