我管理一个相当大的网站相当复杂。我们使用ansible进行部署;大多数部署都很好,我们只需将剧本和角色包含在主游戏手册中,它的工作就像一种魅力。
大师的剧本看上去像下面的东西
我们的问题是,我们不能传递标签,同时将剧本包含在主游戏手册中。有点像
如果它是从命令行调用的,而不使用主播放work中的标记,则此操作非常好。
-i主机master_playbook.yml -t t1
任何可能的解决方案的建议都是有帮助的。
发布于 2018-03-23 10:55:00
这不是一件容易实现的事情。
简单的方法:您可以重构您的角色,使其具有独立的任务文件,如:
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_context和v2_playbook_on_play_start处理程序的组合,动态修改执行上下文,从变量中获取所需的标记。有一篇关于这个这里的帖子,但它是俄文的。
发布于 2018-07-09 19:03:12
要回答Konstantin关于为什么要这样做的问题,最好的做法是包含不同的任务文件并将它们包含在main.yml中。在任务文件中,您可以有two+任务,尽管可以/应该标记每个任务,但有一种强烈的情况是,您希望运行文件中的所有任务,而不仅仅是该文件中的一个任务。能够标记包含文件的任务提供了能够运行/测试您的剧本的粒度。
$ansible- -u a_user -i inventory/ts_host.yml剧本-test.yml -t test:template_file
playbook-test.yml
test_role
main.yml
测试任务文件
下面是剧本的输出。
$ansible- -u a_user -i inventory/ts_host.yml剧本-test.yml -t test:template_file
播放****************************************************************************************************************** crash_n_burn_poc
任务收集事实******************************************************************************************************************* ok: linuxdev.nut
任务************************************************************************************************************** test_role : template test_role changed: linuxdev.nut
播放重述*********************************************************************************************************************** linuxdev.nut : ok=2 changed=1 unreachable=0 failed=0
https://stackoverflow.com/questions/49432636
复制相似问题