2016-09-05 40 views
2

我有一個可執行重試任務,可以說的/ tmp/foo的Ansible - 直到一個文件包含日誌行

我想嘗試(最多5次)運行這個二進制文件,直到我看到了線在日誌文件:讓我們說/tmp/start.log

我需要這樣類型的遊戲:

- block: 
    - shell: /tmp/foo 

    - pause: seconds=30 

    - name: Check if started successfully 
     shell: grep 'started successfully' /tmp/start.log 
     register: grep 
    retry: 5 
    until: grep.stdout 

但不幸的是Ansible塊不支持重試,直到

我該如何做到這一點?

+1

爲什麼不結合三個命令在一個shell腳本中? – techraf

回答

3

我會打出單命令:

- shell: /tmp/foo; sleep 30; grep 'started successfully' /tmp/start.log 
    register: cmd_result 
    retries: 5 
    until: cmd_result | success 
2

對於這種情況,使用純shell腳本應該是最簡單的方法。

shell腳本start_foo.sh(取決於/tmp/foo退出代碼,如果和其中的腳本應該以set -eset +e失敗,你可能會控制):

#!/bin/sh 
set -e # fail the script if the command fails 
/tmp/foo 
sleep 30 
set +e # do not fail the script when string is not found 
grep 'started successfully' /tmp/start.log 
exit 0 

Ansible任務:

- script: start_foo.sh 
    register: grep 
    retry: 5 
    until: grep.stdout 
相關問題