2016-09-05 4 views
2

У меня есть исполняемый файл, позволяет сказать, /TMP/Fooанзибль - Повторить задание, пока файл не содержит лог строку

Я хочу, чтобы попытаться запустить (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 

Но, к сожалению, анзибль блок не поддерживает повторных попыток, пока.

Как я могу это достичь?

+1

Почему бы не совместить три команды в одном сценарии оболочки? – techraf

ответ

3

бы я снимал с одной командой:

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

В этом случае с помощью простой скрипт должен быть самым простым способом.

Shell скрипт start_foo.sh (в зависимости от кода /tmp/foo выхода вы можете контролировать, если и когда сценарий должен завершаться set -e и set +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 

анзибль задачи:

- script: start_foo.sh 
    register: grep 
    retry: 5 
    until: grep.stdout 
Смежные вопросы