ansible debug模块调试信息需区分msg(输出带变量的自定义文本,变量用{{}})和var(直接查看变量原始结构,不加引号和{{}}),二者互斥;常见错误包括混用参数、变量引用错误及未判空导致失败。

在 Linux 中使用 Ansible 的 debug 模块打印调试信息,核心是掌握两个互斥参数:msg 用于输出带提示的自定义文本(可嵌入变量),var 用于直接查看变量原始结构(不加引号、不加 {{ }})。两者不能同时出现。
用 msg 打印带变量的友好提示
适合验证值、说明执行状态,变量需用 {{ }} 引用:
-
打印静态文本:
debug: msg: "开始重启服务" -
拼接主机名和 IP:
debug: msg: "当前主机 {{ inventory_hostname }} 地址为 {{ ansible_default_ipv4.address }}" -
显示注册结果的关键字段:
debug: msg: "命令返回码:{{ result.rc }}, 输出内容:{{ result.stdout }}"
用 var 查看变量原始结构
适合调试 facts、register 结果或嵌套字典/列表,变量名直接写,不加引号也不加 {{ }}:
-
查看 setup 收集的全部事实:
debug: var: ansible_facts -
检查 shell 命令注册结果:
debug: var: result -
定位子字段(如只看 stdout):
debug: var: result.stdout
配合 register 和条件调试
常与 register 联用,并支持 when 控制是否输出:
- 先执行命令并保存结果:
shell: ls /tmp register: tmp_list - 仅当目录非空时打印:
debug: var: tmp_list when: tmp_list.stdout != "" - 也可用 verbosity 控制输出级别,例如
verbosity: 2表示仅在-vv模式下显示
常见错误避坑
新手容易踩的几个点:
-
错把 var 当成模板语法:写成
var: "{{ ansible_hostname }}"或var: "hostname"—— 全部报错 -
msg 里漏掉
{{ }}:写成msg: "主机 ansible_hostname"→ 输出字面量,不是变量值 - 同时写 msg 和 var:Ansible 直接报参数冲突错误
-
调试未定义变量:建议加
is defined判断,避免任务失败











