Ansible - 重试任务,直到文件包含日志行

时间:2016-09-05 08:22:36

标签: ansible ansible-playbook ansible-2.x

我有一个可执行文件,让我们说 / 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块不支持重试 - 直到

我怎样才能做到这一点?

2 个答案:

答案 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 -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