2017-05-23 30 views
0

在我的Ansible遊戲中,我正在重新啓動數據庫,然後嘗試對其執行一些操作。只要重新啓動,重新啓動命令就會返回,而不是在數據庫啓動時。下一個命令嘗試連接到數據庫。當db沒有啓動時,那命令我失敗。如何重試可能失敗的Ansible任務?

我想重試幾次我的第二個命令。如果上次重試失敗,我想失敗。

當我試如下

retries: 3 
    delay: 5 

然後重試不執行可言,因爲第一命令執行失敗,整齣戲。我可以添加ignore_errors: yes,但即使所有重試都失敗,該方式也會通過。有沒有一種簡單的方法可以在我取得成功之前重試失敗,但在上次重試失敗時失敗?

+0

請發佈整個任務。我不明白你的擔心 - 如果你寫得正確,首先執行不應該失敗。 – techraf

回答

2

我不明白你聲稱「第一個命令執行失敗整個遊戲」。如果Ansible以這種方式表現出來,這是沒有道理的。

以下任務:

- command: /usr/bin/false 
    retries: 3 
    delay: 3 
    register: result 
    until: result.rc == 0 

生產:

TASK [command] ****************************************************************************************** 
FAILED - RETRYING: command (3 retries left). 
FAILED - RETRYING: command (2 retries left). 
FAILED - RETRYING: command (1 retries left). 
fatal: [localhost]: FAILED! => {"attempts": 3, "changed": true, "cmd": ["/usr/bin/false"], "delta": "0:00:00.003883", "end": "2017-05-23 21:39:51.669623", "failed": true, "rc": 1, "start": "2017-05-23 21:39:51.665740", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} 

這似乎正是你想要的。

+0

這就是對的。我的任務在'until'部分有錯誤的條件。 –

3

考慮使用wait_for模塊。在繼續之前它會等待一個條件,例如,一個端口打開或關閉,文件存在或不存在,或文件中的某些內容。

沒有看到你的劇本的其餘部分,請看下面的例子:

- name: Wait for db server to restart 
    local_action: 
    wait_for: 
     host=192.168.50.4 
     port=3306 
     delay=1 
     timeout=300 

你也可以修改它的處理程序,並明顯改變這個片段,以滿足您的使用情況。

相關問題