2016-05-23 32 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將不會執行該任務。