Standing on the shoulders of Giants
hadoop distcp使用filters参数排除指定文件
ansible学习之十:Error Handling In Playbooks
Jul 22, 2014 • ansible
ansible默认会检查命令和模块的返回状态,并进行相应的错误处理,通常遇到错误就中断playbook的执行,这些默认行为都是可以改变的。
- name: this will not be counted as a failure
command: /bin/false
ignore_errors: yes
command
和shell
模块执行的命令如果返回非零状态码则ansible判定这两个模块执行失败,可以通过ignore_errors: yes
忽略返回状态码。
- name: this command prints FAILED when it fails
command: /usr/bin/example-command -x -y -z
register: command_result
failed_when: "'FAILED' in command_result.stderr"
这个例子中,命令不依赖返回状态码来判定是否执行失败,而是要查看命令返回内容是否有FAILED
字符串,如果包含此字符串则判定命令执行失败。
实际中的应用:
---
- hosts: 192.168.0.105
gather_facts: no
sudo: yes
sudo_user: coc
tasks:
- shell: ps -U coc|grep _coc_game|wc -l #计算指定进程数,如果有三个进程则为启动成功
register: cmd_result
failed_when: "'3' not in cmd_result.stdout" #如果进程数量不为3,则表示启动失败
#failed_when: cmd_result.stdout != 3 #经过测试,用jinja2语法写也是可以的
changed
状态,不过可以自己决定达到changed
状态的条件tasks:
- shell: /usr/bin/billybass --mode="take me to the river"
register: bass_result
changed_when: "bass_result.rc != 2" #命令返回状态码不为2,则为changed状态
# this will never report 'changed' status
- shell: wall 'beep'
changed_when: False #永远也不会达到changed状态
上一篇:ansible学习之九:Tags