如何使用jq解析ansible -m setup输出并去除非JSON前缀内容
Ansible setup输出去除非JSON前缀的解决方案
要解析ansible -m setup的输出,可选择以下任意一种方法去除前缀内容:
方案1:使用Ansible原生JSON输出回调(推荐)
运行命令时指定标准输出回调插件为json,Ansible会直接输出完整纯JSON结构,没有任何主机状态前缀,可直接对接jq处理:
ANSIBLE_STDOUT_CALLBACK=json ansible 目标主机组/IP -m setup | jq '.'
如果需要提取特定字段,比如获取所有主机的操作系统版本,可调整jq过滤规则:
ANSIBLE_STDOUT_CALLBACK=json ansible all -m setup | jq '.plays[].tasks[].hosts[].ansible_facts.ansible_distribution_version'
方案2:用sed预处理删除前缀
适合旧版本Ansible,无需调整输出配置,直接用sed删除=>符号之前的所有内容,剩余部分就是纯JSON:
ansible all -m setup | sed 's/^.*=> //' | jq '.'
方案3:用jq原生能力跳过非JSON内容
无需额外工具,利用jq的原始输入模式和容错解析能力,自动跳过无法解析为JSON的前缀内容,直接提取有效JSON:
ansible all -m setup | jq -R 'fromjson?'
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

