2016-11-03 37 views
1

我試圖循環一個命令,並等待標準輸出中的某個短語,但任務將過早失敗,因爲如果無法連接,該命令將返回「1」。我怎樣才能讓它忽略返回碼?Ansible:如何循環命令並忽略返回碼?

- name: Wait for Fabric Creation to complete 
    action: shell /usr/local/jboss/jboss-fuse/bin/client container-list 
    register: result 
    until: result.stdout.find("success") 
    retries: 20 
    delay: 10 
+0

返回代碼會來嗎?當它沒有連接時,你能告訴結果的內容嗎? – Shasha99

+0

@ Shasha99我不確定你在問什麼。 [返回代碼](https://en.wikipedia.org/wiki/Exit_status)與stdout或stderr都無關。 – techraf

+0

哦..所以你說的是result.rc。我有一些不同的想法。 – Shasha99

回答

0

這不是真的用命令失敗的問題(雖然任務結果將基於shell腳本的返回碼 - 這可以用failed_when改變)。

真正的問題是在以下條件本身:

until: result.stdout.find("success") 

find回報-1值,如果沒有找到匹配的,所以當沒有success字符串中的標準輸出的布爾檢查實際上通過。在第一次運行中因此滿足until中的條件。


您需要更改條件:在標準輸出或標準錯誤

- name: Wait for Fabric Creation to complete 
    action: shell /usr/local/jboss/jboss-fuse/bin/client container-list 
    register: result 
    until: result.stdout.find("success") != -1 
    retries: 20 
    delay: 10 
+0

太棒了!謝謝! –