gron は json を行指向 にしてくれるやつ。 https://github.com/tomnomnom/gron
https://chalow.net/2022-06-13-1.html でに噂になってて知った。たしかに便利。
例えば kuberetes の deploymnet から使ってる port を出すのに jq の式書いたりするのが面倒だったりするとき、以下みたいにしてぱっと出せる:
% kubectl -nkube-system get deploy coredns -ojson | gron | grep -ie port
json.spec.template.spec.containers[0].livenessProbe.httpGet.port = 8080;
json.spec.template.spec.containers[0].ports = [];
json.spec.template.spec.containers[0].ports[0] = {};
json.spec.template.spec.containers[0].ports[0].containerPort = 53;
json.spec.template.spec.containers[0].ports[0].name = "dns";
json.spec.template.spec.containers[0].ports[0].protocol = "UDP";
json.spec.template.spec.containers[0].ports[1] = {};
json.spec.template.spec.containers[0].ports[1].containerPort = 53;
json.spec.template.spec.containers[0].ports[1].name = "dns-tcp";
json.spec.template.spec.containers[0].ports[1].protocol = "TCP";
json.spec.template.spec.containers[0].ports[2] = {};
json.spec.template.spec.containers[0].ports[2].containerPort = 9153;
json.spec.template.spec.containers[0].ports[2].name = "metrics";
json.spec.template.spec.containers[0].ports[2].protocol = "TCP";
json.spec.template.spec.containers[0].readinessProbe.httpGet.port = 8181;
出力が一行じゃ見辛かったら gron -u
で ungron すると:
% kubectl -nkube-system get deploy coredns -ojson | gron | grep -ie port | gron -u
{
"spec": {
"template": {
"spec": {
"containers": [
{
"livenessProbe": {
"httpGet": {
"port": 8080
}
},
"ports": [
{
"containerPort": 53,
"name": "dns",
"protocol": "UDP"
},
{
"containerPort": 53,
"name": "dns-tcp",
"protocol": "TCP"
},
{
"containerPort": 9153,
"name": "metrics",
"protocol": "TCP"
}
],
"readinessProbe": {
"httpGet": {
"port": 8181
}
}
}
]
}
}
}
}
yaml の出力が好きなら yq を使って yq -P
すると:
% kubectl -nkube-system get deploy coredns -ojson | gron | grep -ie port | gron -u | yq -P
spec:
template:
spec:
containers:
- livenessProbe:
httpGet:
port: 8080
ports:
- containerPort: 53
name: dns
protocol: UDP
- containerPort: 53
name: dns-tcp
protocol: TCP
- containerPort: 9153
name: metrics
protocol: TCP
readinessProbe:
httpGet:
port: 8181
べんり。