我正在使用gcloud describe命令来获取有关实例的元数据信息。使用jq过滤json响应的最佳方法是获取实例的名称 - 如果它包含“kafka”作为键。
.name +“”+ .metadata.items []?。key |选择(包含( “卡夫卡”))'
基本上,如果项目包含kafka打印名称。这只是json文件的一小段摘录。
"metadata": {
"fingerprint": "xxxxx=",
"items": [
{
"key": "kafka",
"value": "xxx="
},
{
"key": "some_key",
"value": "vars"
}
],
"kind": "compute#metadata"
},
"name": "instance-name",
"networkInterfaces": [
{
"accessConfigs": [
{
"kind": "compute#accessConfig",
"name": "External NAT",
"natIP": "ip",
"type": "ONE_TO_ONE_NAT"
}
],
"kind": "compute#networkInterface",
"name": "",
"network": xxxxx
}
],
答案 0 :(得分:3)
我确信使用jq
可以实现这一点,但通常使用内置格式和过滤会更容易使用gcloud列表:
$ gcloud compute instances list \
--filter 'metadata.items.key:kafka' \
--format 'value(name)'
--filter
会告诉您要选择哪些项目;在这种情况下,它抓取实例元数据,查看项目,并检查包含kafka
的项的键(而不是使用=
来查找完全 {的键{1}})。
kafka
告诉您从每个匹配的项目中只抓取一个--format
(而不是表格,JSON,YAML);该项目将是实例的value()
。
您可以通过name
,gcloud topic filters
和gcloud topic formats
了解详情。
答案 1 :(得分:1)
以下是一个简单的jq解决方案,使用 if 和 any :
if .metadata.items | any(.key == "kafka") then . else empty end
| .name