2016-05-23 52 views
0

我有一个可以调用我写过的多个角色的剧本。这个剧本的每个角色的标记都比我可以单独调用它们或者从头到尾运行整个过程。在这些角色中,还可以提供额外的标签来分解这些内容。一些角色任务被标记为“always”,因为我希望他们在角色运行时执行,而不管任何角色特定的标记。Ansible:在角色中跳过“始终”标签

我遇到的问题是这些“始终”标签执行是否调用角色特定标签。如果我没有为某个角色调用标签,则我不想根据角色执行任何操作,包括特定于该角色的任何“始终”任务。

实施例:

# 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" 

但是这将导致在作用甲调试发生为好。

一些要求我:

  • 不能跳过“永远”为roleB可能有需要它的一些任务。
  • 不想从始终更改标签并为每个子任务添加标签列表。即[do_task1,do_task2]随着标签的数量变大并且容易忘记添加一个。

基本上我正在寻找一种方法来告诉Ansible,如果我称之为“playbook标签”,只执行标签匹配的playbook中的角色;不要执行任何不匹配的角色中的任何任务,即使它们被标记为“始终”。但是,如果我称之为“角色标签”,则执行该角色中具有“总是”标签或我称之为标签的所有任务。

Ansible有这样的功能吗?如果它有助于我使用Ansible 2.0.1.0

+0

你可以试一试:ansibile-playbook my-playbook.yml -skip-tags“do_roleA” – perbellinio

回答

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将不会执行该任务。