我有一个调用我写过的多个角色的剧本。这个剧本标记了每个角色,因此我可以单独调用它们,也可以从头到尾运行整个过程。在角色内,可以提供附加标签以在这些中分解作品。一些角色任务用"始终"标记。因为我希望它们在角色运行时执行,而不管任何角色特定的标记。
我遇到的问题是这些"总是"标签执行是否调用特定于角色的标记。如果我没有为某个角色调用该标记,我根本不想让角色执行,包括任何"始终"特定于该角色的任务。
示例:
# 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中的调试也发生。
我有一些要求:
基本上我正在寻找一种方法来告诉Ansible,如果我打电话给#34;剧本标签"仅执行标记匹配的playbook中的角色;不执行不匹配的角色中的任何任务,即使它们被标记为"始终"。但是如果我打电话给#34;角色标签"执行该角色中的所有任务,这些任务的标记为"始终"或者我打电话的标签。
Ansible有这样的功能吗?如果它有助于我使用Ansible 2.0.1.0
答案 0 :(得分:1)
请注意,将标记do_roleA
应用于角色会将 do_roleA
标记添加到该角色的每个任务中。
所以你的示例角色实际上变成了:
# Role A:
- name: Always do this when doing role A
debug: msg="test"
tags:
- always
- do_roleA
- name: Task1
debug: msg="task1"
tags:
- do_task1
- do_roleA
- name: Task2
debug: msg="task2"
tags:
- do_task2
- do_roleA
您可以从该任务中删除always
代码,因此在使用do_roleA
标记角色后,它将是该任务的唯一标记。
因此,使用-t do_roleB
调用playbook将不会执行该任务。