【发布时间】:2016-05-23 18:16:04
【问题描述】:
我有一本剧本,其中调用了我编写的多个角色。这本剧本对每个角色都进行了标记,因此我可以单独调用它们或从头到尾运行整个过程。在角色中,还可以提供额外的标签来分解这些角色中的作品。一些角色任务被标记为“总是”,因为我希望它们在角色运行时执行,而不管任何角色特定的标签。
我遇到的问题是,无论是否调用角色特定的标签,这些“总是”标签都会执行。如果我不调用角色的标签,我根本不想执行角色,包括特定于该角色的任何“始终”任务。
例子:
# Playbook
- hosts: localhost
roles:
- role: roleA
tags: do_roleA
- role: roleB
tags: do_roleB
# Role A:
- name: Always do this when doing role A
debug: msg="test"
tags: always
- name: Task1
debug: msg="task1"
tags: do_task1
- name: Task2
debug: msg="task2"
tags: do_task2
调用示例:
ansibile-playbook my-playbook.yml --tags "do_roleB"
但这也会导致角色 A 中的调试发生。
我有一些要求:
- 不能跳过“总是”,因为角色 B 可能有一些需要它的任务。
- 不想从总是更改标签并为每个子任务添加标签列表。即 [do_task1,do_task2] 因为标签的数量会变得很大并且容易忘记添加一个。
基本上我正在寻找一种方法来告诉 Ansible,如果我调用“剧本标签”,则只执行标签匹配的剧本中的角色;不要以不匹配的角色执行任何任务,即使它们被标记为“总是”。但是,如果我调用“角色标签”,则执行该角色中具有“始终”标签或我调用的标签的所有任务。
Ansible 有这样的功能吗?如果有帮助,我正在使用 Ansible 2.0.1.0
【问题讨论】:
-
你可以试试:ansibile-playbook my-playbook.yml –skip-tags "do_roleA"