如何解决jq:使用上下文对象作为从根查询的键
我有一个 JSON 对象,其中相关部分的形式为
{
"_meta": {
"hostvars": {
"name_1": {
"ansible_host": "10.0.0.1"
},"name_2": {
"ansible_host": "10.0.0.2"
},"name_3": {
"ansible_host": "10.0.0.3"
}
}
},...
"nodes": {
"hosts": [
"name_1","name_2"
]
}
}
(ansible-inventory --list
的输出,供参考)。
我想使用 jq
通过在 nodes
中查找名称来生成 ._meta.hostvars
主机的 IP 列表。在示例中,输出应为:
10.0.0.1
10.0.0.2
请注意,不应包含 10.0.0.3
,因为 name_3
不在 .nodes.hosts
列表中。所以只做 jq -r '._meta.hostvars[].ansible_host'
是行不通的。
我试过 jq '.nodes.hosts[] | ._meta.hostvars[.].ansible_host'
但失败了,因为 ._meta
没有从管道后的根扫描。
解决方法
您可以在更改上下文之前将根存储在变量中:
jq -r '. as $root | .nodes.hosts[] | $root._meta.hostvars[.].ansible_host'
但更好的解决方案是内联“hosts”查询:
jq -r '._meta.hostvars[.nodes.hosts[]].ansible_host'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。