如何触发Ansible任务输出`failed: [server]`?为何测试仅得`fatal:`?
Ansible中
failed:与fatal:日志的区别及触发原因 先明确这两种日志的核心差异:
failed::任务成功调用并执行了目标模块,但模块自身返回了失败状态(比如命令执行返回非零码、文件操作权限不足),属于任务级别的失败,Ansible默认会继续执行后续任务(除非配置了终止规则)。fatal::Ansible在执行任务过程中遇到了无法完成模块执行的严重问题,直接中断当前任务/play的执行,属于流程级别的致命错误。
你测试时只看到fatal:的原因,对应不同场景分析:
- 使用
ansible.builtin.fail模块:这个模块的设计目的就是主动触发致命错误,强制终止执行,所以必然输出fatal:,这是预期行为。 - 调用
/bin/false或exit 1却输出fatal::大概率是你的测试场景存在其他问题,比如:- 目标主机连接失败:SSH连不上时,还没执行命令就会先抛出
fatal: [server] => {"msg": "Failed to connect to the host via ssh: ..."} - 任务配置错误:比如模块名拼写错误(把
command写成commmand),导致Ansible找不到模块,直接输出fatal: - 全局配置影响:如果在playbook或
ansible.cfg中设置了any_errors_fatal: yes,所有failed:的任务都会被升级为fatal:,直接终止后续执行 - 错误的任务写法:比如把命令写到了错误的字段里,导致任务解析失败
- 目标主机连接失败:SSH连不上时,还没执行命令就会先抛出
正常情况下,用command或shell模块执行/bin/false或exit 1,应该输出failed:,比如这个测试playbook:
- name: Test failed task hosts: server tasks: - name: Execute /bin/false ansible.builtin.command: /bin/false
执行后会得到类似这样的日志:
failed: [server] => {"changed": false, "cmd": ["/bin/false"], "rc": 1, "msg": "non-zero return code"}
内容的提问来源于stack exchange,提问作者Wang
相关产品推荐
相关产品推荐

