2014-03-31 28 views
21

如果某些條件失敗,我想中止執行剩餘任務。 並顯示正確的錯誤消息。如果某些條件失敗,則中止執行剩餘任務

因此,而不是跳過剩餘的任務,我想顯示錯誤消息,並停止執行完整的劇本。

比方說,我正在下面命令

$ ansible-playbook playbook.yml -e "param1=value1 param2=value" 

我的劇本是這樣的: -

playbook.yml: -

--- 
    - hosts: local 
     user: roop 
     gather_facts: no 

     vars: {param1: "", param2: ""} 

     tasks: 

     #check whether param1 defined 
     - name: 'Check for valid param1' 
      shell: echo {{ param1 }} 
      register: isValidParam1 
      when: param1 !="" 

     #check if param1 is null or invalid 
     - name: 'check if param1 is null or invalid' 
      debug: msg="Please enter correct param1" 
      when: param1 == "" 

     #check whether param2 defined 
     - name: 'Check for valid param2' 
      shell: echo {{ param2 }} 
      register: isValidParam2 
      when: param2 != "" 

     #check if param2 is null or invalid 
     - name: 'check if param2 is null or invalid' 
      debug: msg="Please enter correct param2" 
      when: param2 == "" 


     #check params is valid and defined 
     - name: 'Check for valid params' 
      shell: echo "param1={{ param1 }} param2={{ param2 }} 
      register: validParams 
      when: isValidParam1 is defined and isValidParam2 is defined 

     #check if params are invalid then abort below all tasks. 
     - name: 'check if validParams is null or invalid' 
      debug: msg="Please enter correct Params" 
      when: validParams is not defined  


     # based on validParams, and different value of param1 more than 
      10 task executing. 

正如我在最後提到的任務評論。我正在執行基於validParamsparam1不同值的超過10個任務。我需要這裏 如果validParams未定義,則中止所有執行並顯示錯誤消息。

有沒有任何有效的方法來做到這一點。請建議我。

回答

38

您可以使用斷言http://docs.ansible.com/assert_module.html或失敗http://docs.ansible.com/fail_module.html

它會隨着事情是這樣的

 #check if params are invalid then abort below all tasks. 
     - name: 'check parm is null or invalid' 
      fail: msg="Please enter correct Params" 
      when: "param1 is not defined or param2 is not defined " ## whatever condition you want 
+0

是的。我發現這個解決方案。非常感謝 – Roopendra

+0

我不認爲這可能是一個解決方案,因爲它將任務標記爲失敗,而我們真正想要的只是跳過。 –

+1

@EddieC。這個問題特別提到:「...我想顯示錯誤信息並停止執行完整的劇本。」 – raarts

1

Ansible> = 2.0具有block feature,使您可以邏輯分組任務。這允許您在時將應用於一組任務。

這和失敗斷言模塊是該任務不標記爲失敗之間的主要區別;它只是跳過了。這是否更好取決於您的使用情況。例如,我有一些寫入日誌的任務,這些日誌後來被解析爲失敗;如果只記錄「真實」故障條件,則更容易做到這一點。

示例代碼:

- block: 

    # task 1 

    # task 2 

    # task 3 

    when: "param1 is defined or param2 is defined" 

# otherwise output a message 
- block: 

    debug: msg="Missing params" 

    when: "param1 is not defined or param2 is not defined" 
相關問題