2017-10-17 138 views
0

我使用Ansible 2.3.2.0,並且正在調用運行4個不同任務的角色。Ansible,通過標記調用特定角色任務不起作用,所有任務正在運行

當我通過劇本呼叫角色並指定特定標籤時,整個角色和所有任務都正在運行。在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 

當我跑這與上面的角色聲明,我所期望的AMI, launch_config和asg任務運行,但此外ami_lc_cleanup任務也正在運行。

這些任務都有效,我只是不知道如何限制哪些任務正在運行。有沒有人有任何建議如何讓它工作(能夠通過標籤指定任務)?

回答

1

條件包括應該使用static: no被定義爲靜態的。

編輯

從您的意見假設你在你的劇本誤解tags聲明。這不是要將角色包含在已定義的標籤中,而是要包含基於命令行給出的標籤的角色。

哪些標籤在您的播放中處於活動狀態僅由命令行定義(據我所知,我仍然在學習)。

如果你想爲你的劇本中的角色定義一個條件,你應該使用變量/事實。

使用ansible-playbook --tags ami,launch_config,asg調用您的手冊​​可以跳過清理過程。在Playbook中定義標籤時,如果在命令行中將ami_lc_cleanup定義爲標籤而沒有其他任何三個標籤,則會阻止該角色執行。

+0

這並沒有多大幫助,你能否詳細說明一下? – tman

+0

您將包含的內容定義爲'static:yes',但在使用'when''或''''標記''時使用條件時,它應該是'static:no'。 – clemens321

+0

我試過切換到靜態:沒有,也沒有區別。使用--list-tags和--list-tasks選項,我可以看到前3個任務正在使用TAGS運行:[ami,asg和launch_config],然後當它到達最後一個任務時,它正在運行即使它在通話劇本中沒有標記。所以它必須繼承角色的標記... – tman

相關問題