我有一个可执行文件,让我们说 / 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
但不幸的是,Ansible块不支持重试 - 直到。
我怎样才能做到这一点?
答案 0 :(得分:4)
我用单一命令拍摄:
- shell: /tmp/foo; sleep 30; grep 'started successfully' /tmp/start.log
register: cmd_result
retries: 5
until: cmd_result | success
答案 1 :(得分:3)
对于这种情况,使用普通shell脚本应该是最简单的方法。
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
Ansible任务:
- script: start_foo.sh
register: grep
retry: 5
until: grep.stdout