Ansible,通过标记调用特定角色任务不起作用,所有任务正在运行
问题描述:
我使用Ansible 2.3.2.0,并且正在调用运行4个不同任务的角色。Ansible,通过标记调用特定角色任务不起作用,所有任务正在运行
当我通过剧本呼叫角色并指定特定标签时,整个角色和所有任务都正在运行。在ansible 2.0之后,我看到这是一个已知问题,并且建议的解决方法是在include语句下添加静态指令。我尝试过,但仍然运行了所有任务。 这里是在剧本的角色声明...
roles:
- {role: ansible-role-auto-deploy, tags: [ 'ami', 'launch_config', 'asg']}
这里是角色main.yml
---
- include: ami.yml
static: yes
tags:
- ami
- include: launch_config.yml
static: yes
tags:
- launch_config
- include: asg.yml
static: yes
tags:
- asg
- include: ami_lc_cleanup.yml
static: yes
tags:
- ami_lc_cleanup
当我跑这与上面的角色声明,我所期望的AMI, launch_config和asg任务运行,但此外ami_lc_cleanup任务也正在运行。
这些任务都有效,我只是不知道如何限制哪些任务正在运行。有没有人有任何建议如何让它工作(能够通过标签指定任务)?
答
条件包括应该不使用static: no
被定义为静态的。
编辑
从您的意见假设你在你的剧本误解tags
声明。这不是要将角色包含在已定义的标签中,而是要包含基于命令行给出的标签的角色。
哪些标签在您的播放中处于活动状态仅由命令行定义(据我所知,我仍然在学习)。
如果你想为你的剧本中的角色定义一个条件,你应该使用变量/事实。
使用ansible-playbook --tags ami,launch_config,asg
调用您的手册可以跳过清理过程。在Playbook中定义标签时,如果在命令行中将ami_lc_cleanup
定义为标签而没有其他任何三个标签,则会阻止该角色执行。
这并没有多大帮助,你能否详细说明一下? – tman
您将包含的内容定义为'static:yes',但在使用'when''或''''标记''时使用条件时,它应该是'static:no'。 – clemens321
我试过切换到静态:没有,也没有区别。使用--list-tags和--list-tasks选项,我可以看到前3个任务正在使用TAGS运行:[ami,asg和launch_config],然后当它到达最后一个任务时,它正在运行即使它在通话剧本中没有标记。所以它必须继承角色的标记... – tman