在我的Ansible游戏中,我正在重新启动数据库,然后尝试对其进行一些操作.重启启动后,重启命令会立即返回,而不是在db启动时.下一个命令尝试连接到数据库.当db没有启动时,该命令失败了.
我想重试几次我的第二个命令.如果上次重试失败,我想失败.
当我重试如下
retries: 3
delay: 5
Run Code Online (Sandbox Code Playgroud)
然后根本不执行重试,因为第一个命令执行整个播放失败.我可以添加, ignore_errors: yes但即使所有重试都失败,这种方式也会通过.有没有一种简单的方法可以在我成功之前重试失败,但是在上次重试没有成功的情况下会失败?
tec*_*raf 48
我不明白你的说法是" 第一次命令执行失败 ".如果Ansible表现得这样,那就没有意义了.
以下任务:
- command: /usr/bin/false
retries: 3
delay: 3
register: result
until: result.rc == 0
Run Code Online (Sandbox Code Playgroud)
生产:
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": []}
Run Code Online (Sandbox Code Playgroud)
这似乎正是你想要的.
Mxx*_*Mxx 15
考虑使用wait_for模块.它在继续之前等待条件,例如,端口变为打开或关闭,文件是否存在,或者文件中的某些内容.
如果没有看到剧本的其余部分,请考虑以下示例:
- name: Wait for db server to restart
local_action:
wait_for:
host=192.168.50.4
port=3306
delay=1
timeout=300
Run Code Online (Sandbox Code Playgroud)
您还可以将其作为处理程序进行调整,并明显更改此代码段以适合您的用例.
小智 6
不知道这是否特定于Ansible塔,但我正在使用:
- command: /usr/bin/false
register: result
retries: 3
delay: 10
until: result is not failed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41475 次 |
| 最近记录: |