【发布时间】:2021-01-05 16:13:23
【问题描述】:
让我们从头开始:
- 我有一个 bash 脚本,它会根据报告的错误返回不同的退出代码。
- 我使用 ansible 启动该脚本,但是当脚本失败时,我使用“echo $?”检查了 ansible-playbook 退出代码。与远程脚本的退出代码不同。
我知道 Ansible 有以下退出代码:
*0* -- OK or no hosts matched
*1* -- Error
*2* -- One or more hosts failed
*3* -- One or more hosts were unreachable
*4* -- Parser error
*5* -- Bad or incomplete options
*99* -- User interrupted execution
*250* -- Unexpected error
所以问题是是否有任何方法可以将任务的返回码作为 Ansible Playbook 的退出码。
问候,
【问题讨论】:
-
您自己通过列出所有 ansible RC 及其含义来回答了这个问题 => 不。您得到的是 ansible 命令 RC 而不是 what-ever-task-rc-you-ran-in-your-playbook。 (顺便说一句,如果有几个具有错误控制功能,并且这样运行在可变数量的主机上,并且不会全部失败,那么您会选择哪一个?)您可以注册任务的结果(例如
register: my_cmd在您的外壳/命令上任务)并使用{{ my_cmd.rc }}在该变量中获取该命令的rc -
我知道我可以在变量中获取 rc,甚至可以将输出写入日志文件。 Ansible 有自己的退出代码。我要求的是一种解决方法,因为我需要像处理脚本一样评估剧本的退出。
-
哪个脚本(在您可以在不同任务中运行的几个脚本的潜在列表中)在哪个主机上运行(在您库存中可能随机通过/失败的所有主机的潜在列表中)? IMO您在这里使用了错误的工具。如果您只需要在远程主机上运行 bash 脚本并获取 RC,只需直接通过 ssh 运行脚本即可。
-
好吧,如果我只是想在远程主机上运行一个 bash 脚本,我会在不问任何问题的情况下完成它。不要想当然,我可以在这里解释这个问题的更多背景。但就我而言,Ansible 是实现自动化的方式,考虑到它通过插件与其他工具的所有集成(通知 Grafana、logstash 等等)
标签: bash automation scripting ansible