2017-07-18 95 views
0

我ansible角色有這個main.yml檢查多個條件包括:

more tasks/main.yml 
--- 

- include: ssl_pull.yml 
    when: ACTION == 'renewal' 
- include: ssl_gen.yml 
    when: ACTION == 'generate' 
- include: ssl_push.yml 
    when: ACTION == 'install' 
- include: ssl_install.yml 
    when: ACTION == 'install' 

我想給用戶傳遞像更新多個活動&安裝所以它的能力包括

- include: ssl_pull.yml 
- include: ssl_push.yml 
- include: ssl_install.yml 

我知道如何通過ACTION變量的單個值,如下所示

ansible-playbook -v -i /web/hosts.txt site.yml -e "ACTION=renewal" 

,我可以傳遞一個或多個值幷包含基於傳遞的值的文件嗎?

你能提出建議我需要對我的命令/ yml進行哪些更改嗎?

+3

」不是個噸,哪些標籤實施了? – techraf

回答

1

Tags你在找什麼?

你喜歡標記的任務:

ansible-playbook -v -i /web/hosts.txt site.yml -t "renewal,generate" 

如果您不能使用標籤出於某些原因,我們還可以:

- include: ssl_pull.yml 
    tags: renewal 

- include: ssl_push.yml 
    tags: install 

- include: ssl_install.yml 
    tags: install 

然後使用-t參數中指定的標籤與瓦爾斯做類似的事情。

指定VAR爲逗號分隔值:

ansible-playbook -v -i /web/hosts.txt site.yml -e "ACTIONS=renewal,generate" 

並更新狀態以逗號分割的VAR:

- include: ssl_pull.yml 
    when: "'renewal' in ACTIONS.split(',')" 
+0

我的site.yml沒有include。它有三個角色,每個角色main.yml都有include語句。 – shifahim

+0

沒關係。 –

+0

你真了不起。謝謝你的提示 – shifahim

1

Ansible tags設計做這種任務選擇的。


如果你真的想不使用標籤,你可以在加時賽瓦爾傳遞一個JSON對象:

ansible-playbook --inventory-file /web/hosts.txt site.yml \ 
       --extra-vars '{"ACTIONS": ["renewal", "install"]}' 

然後針對陣列測試:

- include: ssl_pull.yml 
    when: "'renewal' in ACTIONS"