2017-10-17 142 views
0

我使用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任务也正在运行。

这些任务都有效,我只是不知道如何限制哪些任务正在运行。有没有人有任何建议如何让它工作(能够通过标签指定任务)?

回答

1

条件包括应该使用static: no被定义为静态的。

编辑

从您的意见假设你在你的剧本误解tags声明。这不是要将角色包含在已定义的标签中,而是要包含基于命令行给出的标签的角色。

哪些标签在您的播放中处于活动状态仅由命令行定义(据我所知,我仍然在学习)。

如果你想为你的剧本中的角色定义一个条件,你应该使用变量/事实。

使用ansible-playbook --tags ami,launch_config,asg调用您的手册​​可以跳过清理过程。在Playbook中定义标签时,如果在命令行中将ami_lc_cleanup定义为标签而没有其他任何三个标签,则会阻止该角色执行。

+0

这并没有多大帮助,你能否详细说明一下? – tman

+0

您将包含的内容定义为'static:yes',但在使用'when''或''''标记''时使用条件时,它应该是'static:no'。 – clemens321

+0

我试过切换到静态:没有,也没有区别。使用--list-tags和--list-tasks选项,我可以看到前3个任务正在使用TAGS运行:[ami,asg和launch_config],然后当它到达最后一个任务时,它正在运行即使它在通话剧本中没有标记。所以它必须继承角色的标记... – tman

相关问题