【问题标题】:Ansible limiting tasks based on tags in included playbooks and roles基于包含的剧本和角色中的标签的 Ansible 限制任务
【发布时间】:2018-03-22 15:31:40
【问题描述】:

我正在管理一个相当复杂的大型网站。我们正在使用 ansible 进行部署;大多数部署都很好,我们可以将剧本和角色包含在主剧本中,它就像一个魅力。

Master playbooks 如下所示

  • 大师级剧本
    • 包括具有特定于部署最新版本的 vars/config 的部署手册
    • 部署手册包括与 SW 相关的特定角色
      • 角色具有适当标记的任务

我们遇到的问题是,在将剧本包含在主剧本中时,我们无法传递标签。类似的东西

  • 包括:task1.yml 标签:t1

如果它是从命令行调用的,这个工作绝对没问题,而不是在 master playbok 中使用标签

ansible-playbook -i host master_playbook.yml -t t1

任何可能的解决方案的建议都会有所帮助

【问题讨论】:

  • 你为什么要这样?
  • 特定部署只使用来自多个角色的任务我们只需要。

标签: tags include ansible


【解决方案1】:

这不是一件容易的事。

简单的方法:您可以重构您的角色以拥有单独的任务文件,例如:

tasks/main.yml (that import job1 and job2)
tasks/job1.yml
tasks/job2.yml

然后使用这个

- include_role:
    name: myrole
    tasks_from: job1.yml

仅包括 job1 任务。

困难的方法:您可以制作一个回调插件,通过set_play_contextv2_playbook_on_play_start 处理程序的组合从变量中获取所需的标签,即时修改执行上下文。有一篇关于此here 的帖子,但它是俄语的。

【讨论】:

  • 这是一种可能,但这种方法需要对现有代码进行大量返工。我可能会继续使用脚本并通过命令行直接使用标签调用剧本
【解决方案2】:

回答康斯坦丁关于您为什么要这样做的问题;最好的做法是包含不同的任务文件并将它们包含在 main.yml 中。在任务文件中,您可以有两个以上的任务,尽管您可以/应该标记每个任务,但有一个强有力的情况是您希望运行文件中的所有任务,而不仅仅是该文件中的一个任务。能够标记任务包含文件提供了能够运行/测试您的剧本的粒度。

$ ansible-playbook -u a_user -i inventory/ts_host.yml playbook-test.yml -t test:template_file

剧本-test.yml

  • 主机:crash_n_burn_poc 角色:
    • test_role

测试角色

main.yml

用于测试的任务文件

  • 包括:copy_test_file.yml
    标签: ["test","test:copy_file"]
  • 包括:template_test_file.yml 标签: ["test","test:template_file"]

下面是剧本的输出。

$ansible-playbook -u a_user -i inventory/ts_host.yml playbook-test.yml -t test:template_file

播放 [crash_n_burn_poc] ******************************************* ****************************************************** ************************

任务[收集事实] ****************************************** ****************************************************** *********************** 好的:[linuxdev.nut]

任务 [test_role : 模板] ***************************************** ****************************************************** ******************* 更改:[linuxdev.nut]

播放回顾 ************************************************ ****************************************************** ************************************ linuxdev.nut : ok=2 changed=1 unreachable=0 failed=0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2015-11-13
    • 2017-08-02
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多