如何让Ansible Playbook仅返回debug模块的msg内容?
Ansible Playbook仅输出msg内容的解决方案
为什么no_log: True无效
no_log的作用是屏蔽敏感任务的日志记录,和控制Playbook的终端输出格式无关,所以之前的设置无法解决冗余输出问题。
可行解决方法
方法1:命令行解析JSON输出
通过环境变量让Ansible输出JSON格式,再用jq工具精准提取msg内容:
ANSIBLE_STDOUT_CALLBACK=json ansible-playbook your_playbook.yml | jq -r '.plays[].tasks[].hosts[] | .msg'
如果没有jq,也可以用grep做简单匹配(适用于输出格式稳定的场景):
ansible-playbook your_playbook.yml | grep -oP '(?<="msg": ").*(?=")'
方法2:修改Playbook直接输出结果
替换debug模块为shell的echo命令,直接输出目标内容:
--- - name: version find hosts: all become: yes tasks: - name: query package version shell: *shell command* register: info no_log: true - name: output result shell: echo "{{ inventory_hostname }} blah {{ info.stdout }} blah"
执行时添加-q参数屏蔽冗余提示:
ansible-playbook your_playbook.yml -q
方法3:使用极简回调插件
指定Ansible使用minimal回调插件,大幅简化输出内容:
ANSIBLE_STDOUT_CALLBACK=minimal ansible-playbook your_playbook.yml
这种方法会只保留任务结果的核心信息,格式更紧凑,适合不需要纯文本输出的场景。
内容的提问来源于stack exchange,提问作者The Mob
相关产品推荐
相关产品推荐

