Tags Ansible基于包含的剧本和角色中的标记限制任务
我管理一个相当大的网站相当复杂。我们正在使用ansible进行部署;大多数部署都很好,我们可以在主剧本中包含剧本和角色,它就像一个魅力 大师级剧本如下所示Tags Ansible基于包含的剧本和角色中的标记限制任务,tags,include,ansible,Tags,Include,Ansible,我管理一个相当大的网站相当复杂。我们正在使用ansible进行部署;大多数部署都很好,我们可以在主剧本中包含剧本和角色,它就像一个魅力 大师级剧本如下所示 大师剧本 包括部署手册,其中包含特定于部署最新版本的vars/config 部署手册包括与软件相关的特定角色 角色具有适当标记的任务 我们面临的问题是,我们不能在主剧本中包含剧本的同时传递标签。差不多 包括:task1.yml 标签:t1 如果从命令行调用它,而不使用master playbok中的标记,那么这项工作绝对正常
- 大师剧本
- 包括部署手册,其中包含特定于部署最新版本的vars/config
- 部署手册包括与软件相关的特定角色
- 角色具有适当标记的任务
- 包括:task1.yml 标签:t1
任何可能的解决方案的建议都会有帮助这不是一件容易做到的事情 简单方法:您可以重构角色,使其具有单独的任务文件,如:
tasks/main.yml (that import job1 and job2)
tasks/job1.yml
tasks/job2.yml
用这个
- include_role:
name: myrole
tasks_from: job1.yml
只包含job1
任务
艰难的方法:您可以创建一个回调插件,通过组合
set\u play\u context
和v2\u playbook\u on\u play\u start
处理程序,动态修改执行上下文,从变量中获取所需的标记。有一篇关于这一点的帖子,但它是用俄语写的。回答康斯坦丁的问题,你为什么要这样做;最好的做法是将不同的任务文件包括在main.yml中。在一个任务文件中,您可以有两个以上的任务,尽管您可以/应该标记每个任务,但很有可能您希望在一个文件中运行所有任务,而不仅仅是该文件中的一个任务。能够标记任务包含文件提供了运行/测试playbook的粒度
$ansible playbook-u a_user-i inventory/ts_host.yml playbook-test.yml-t test:模板文件
playbook-test.yml
- 主持人:crash\n\u burn\u poc
角色:
- 测试角色
- 包括:复制测试文件.yml
标签:[“测试”,“测试:复制_文件”] - 包括:template_test_file.yml 标签:[“测试”,“测试:模板文件”]
linuxdev.nut:ok=2 changed=1 unreachable=0 failed=0为什么要这样做?特定的部署只需要使用多个角色中的两个任务,这些任务是从部署手册中调用的,传递不同的参数,因此,我们不需要运行整个角色,只需要传递标签来限制我们只需要的任务。这是一种可能性,但这种方法需要对现有代码进行大量的重新工作。我可能会继续使用脚本,并通过命令行直接使用标记调用剧本