必要な形式でいくつかのデータを取得するためにjqを使用しています。フォードの完全なjsonデータがここに貼り付けられています。https://pastebin.com/UMJA7xd5。データはjson形式のPodの1つです。次の情報を一覧表示できるように、すべてのPodでこれを実行します。
podname、最初のコンテナ名、CPU制限、メモリ制限、2番目のコンテナ名、CPU制限、メモリ制限 - コンテナ数
Podのコンテナ数に基づいています。ポッドのコンテナ数はランダムで、一部のポッドには1つ、一部のポッドには最大5つのコンテナがあります。
これを作ることができました。
oc get po -o json | jq -j '.items[] | "\(.metadata.name), \(.spec.containers[] | .name +" , "+ .resources.limits.cpu +" , "+ .resources.limits.memory)\n" '
これは私に次のような結果を与えます: -
kafka-0, kafka , 16 , 16Gi
kafka-0, filebeat , 2 , 256Mi
上記のサンプルデータでは、2つのコンテナのデータが単一のPod kafka-0に対して印刷されます。 kafka ポッドには 2 つのコンテナがあるため、2 つの行を生成します。
予想される結果:
kafka-0, kafka , 16 , 16Gi, filebeat , 2 , 256Mi
私は最初にjqに触れ、多くのオプションを試しましたが、成功しませんでした。おそらく私が何か間違っているようです。この値はコンテナごとに異なるため、行を結合できません。
ベストアンサー1
$ cat test.jq
# Iterate over "items"
.items[] |
# Place each extracted element into an array
[
# Select elements
.metadata.name,
# Use parentheses to group
( .spec.containers[] | .name, .resources.limits["cpu","memory"] )
]
# Join the array together
| join(", ")
$ <input jq -r -f test.jq
kafka-0, kafka, 16, 16Gi, filebeat, 2, 256Mi