我正在使用Ansible 2.3.2.0,并且正在调用一个运行4个不同任务的角色。
当我通过剧本调用角色并指定特定标签时,整个角色和所有任务都在运行。我在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
当我使用上面的roles语句运行它时,我希望运行ami,launch_config和asg任务,但此外还运行ami_lc_cleanup任务。
这些任务都有效,我只是不知道如何限制正在运行的任务。有没有人对如何使其工作有任何建议(能够通过标签指定任务)?
答案 0 :(得分:1)
条件包含应使用static: no
not 定义为静态。
修改强>
根据您的评论,您误解了剧本中的tags
声明。这不是包含已定义标记的角色,而是包含基于命令行中给出的标记的角色。
你的游戏中哪些标签是活动的,仅由命令行定义(据我所知,我还在学习ansible)。
如果你想为你的剧本中的角色定义一个条件,你应该使用变量/事实。
使用ansible-playbook --tags ami,launch_config,asg
调用您的剧本以跳过清理过程。在剧本中定义标签时,如果ami_lc_cleanup
被定义为命令行上的标签而没有任何其他三个标签,则可以防止该角色被执行。