
私はjqを使用して必要な形式でデータを取得しています。ポッドの完全なjsonデータがここに貼り付けられています。https://pastebin.com/UMJA7xd5このデータはJSON形式のポッドの1つです。これをすべてのポッドで実行して、次のような情報を一覧表示できるようにします。
podname、1 番目のコンテナ名、CPU 制限、メモリ制限、2 番目のコンテナ名、CPU 制限、メモリ制限 (コンテナの数に基づく)
ポッド内のコンテナの数に基づきます。ポッド内のコンテナの数はランダムで、ポッドによってはコンテナが 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
上記のデータ例では、単一のポッド kafka-0 の 2 つのコンテナのデータを出力しています。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