我在bash脚本中运行了一个ansible命令ansible-playbook
,但是当ansible因为任何原因而失败时,我需要脚本来检测它并处理错误(例如输出定义的消息和exit 1
)
我似乎还没有显示仍然显示ansible-playbook
命令输出的最佳方法,但是捕获输出以查找是否有错误然后退出bash脚本?
这是基于ansible-playbook
的输出检测到故障/错误的方式。完整输出可能是~100行。
[0;32m openstack: PLAY RECAP ***********************************
[0;32m openstack: ok=92 changed=73 unreachable=0 failed=1
从上面可以看出,failed=1
表示失败,因此如果failed=[1-9]+
存在,则应退出bash脚本。
我尝试使用像tee
这样的cmds,但没有太多运气。
答案 0 :(得分:1)
我无法回答如何最好地捕获命令输出并在执行bash脚本时仍然显示它的问题。
但这是一个非常简单的选择。 ansbile.cfg
中的Activate logging:
log_path=/var/log/ansible.log
在开始Ansible运行之前,请撕碎该文件。运行Ansible。然后检查日志文件中是否存在模式。
答案 1 :(得分:0)
这是我最终做的事情(类似于@thatotherguy建议)
我的代码与此类似,但并不那么粗糙。
log=logs/$(date +"%s")
ansible-playbook ... | tee $log
# Do some clean up tasks
if grep -q failed=[^0] "$log"; then
exit 1
rm $log
fi