【问题标题】:Capture Return Code of task as exit code for Ansible Playbook捕获任务的返回代码作为 Ansible Playbook 的退出代码
【发布时间】: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


【解决方案1】:

问:“有什么办法可以让任务的返回码作为 AnsiblePlaybook 的退出码?”

A:没有这样的选择。可以使用 ansible-runner 代替。见Artifacts

【讨论】:

    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多