格式 json 输出 jq
format json output jq
我正在 Kubernetes 中部署 redis-commander。我正在为 Redis-Commander 创建一个配置连接文件。我的 bash 脚本中有一个命令,用于根据 link 获取连接文件所需的参数。设法通过哨兵在 redis-commander 和 1 个 redis 服务器之间进行本地连接,但在非产品中还有更多,所以我需要配置下面的命令以获得所需的 json 输出。
这个命令
kubectl get svc --selector='app.kubernetes.io/component=sentinel' --all-namespaces -o json |
jq -r '
.items[]
| {label:"my-label",
sentinels: [{host: (.metadata.name + "."
+ .metadata.namespace + "."
+ "svc" + "."
+ "cluster" + "."
+ "local"),port: .spec.ports[0].port}],
sentinelName:"mymaster",
dbIndex: 0
}
| {connections: [.]}'
有类似的输出(我已经更改了名称部分):
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name1.development.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name2.development.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name3.staging.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
我要实现的输出是这样的:
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name1.development.svc.cluster.local",
"port": 26379
},
{
"host": "name2.development.svc.cluster.local",
"port": 26379
},
{
"host": "name3.staging.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
没有多次使用 jq,因此不胜感激。
将 map
与 .items 一起使用可能是更好的方法,方法如下:
.items
| {
label: "my-label",
sentinels: map(
{ host: (.metadata.name + "."
+ .metadata.namespace + "."
+ "svc" + "."
+ "cluster" + "."
+ "local"),
port: .spec.ports[0].port
} ),
sentinelName: "mymaster",
dbIndex: 0
}
| {connections: [.] }
我正在 Kubernetes 中部署 redis-commander。我正在为 Redis-Commander 创建一个配置连接文件。我的 bash 脚本中有一个命令,用于根据 link 获取连接文件所需的参数。设法通过哨兵在 redis-commander 和 1 个 redis 服务器之间进行本地连接,但在非产品中还有更多,所以我需要配置下面的命令以获得所需的 json 输出。
这个命令
kubectl get svc --selector='app.kubernetes.io/component=sentinel' --all-namespaces -o json |
jq -r '
.items[]
| {label:"my-label",
sentinels: [{host: (.metadata.name + "."
+ .metadata.namespace + "."
+ "svc" + "."
+ "cluster" + "."
+ "local"),port: .spec.ports[0].port}],
sentinelName:"mymaster",
dbIndex: 0
}
| {connections: [.]}'
有类似的输出(我已经更改了名称部分):
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name1.development.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name2.development.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name3.staging.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
我要实现的输出是这样的:
{
"connections": [
{
"label": "my-label",
"sentinels": [
{
"host": "name1.development.svc.cluster.local",
"port": 26379
},
{
"host": "name2.development.svc.cluster.local",
"port": 26379
},
{
"host": "name3.staging.svc.cluster.local",
"port": 26379
}
],
"sentinelName": "mymaster",
"dbIndex": 0
}
]
}
没有多次使用 jq,因此不胜感激。
将 map
与 .items 一起使用可能是更好的方法,方法如下:
.items
| {
label: "my-label",
sentinels: map(
{ host: (.metadata.name + "."
+ .metadata.namespace + "."
+ "svc" + "."
+ "cluster" + "."
+ "local"),
port: .spec.ports[0].port
} ),
sentinelName: "mymaster",
dbIndex: 0
}
| {connections: [.] }