
Я использую jq для получения некоторых данных в нужном формате, полные данные pod в формате json вставлены сюдаhttps://pastebin.com/UMJA7xd5. Эти данные являются одним из pod в формате json. Я собираюсь запустить его на всех pod, чтобы я мог вывести информацию, например,
имя_пода, имя_1-го_контейнера, ограничение_ЦП, ограничение_памяти, имя_2-го_контейнера, ограничение_ЦП, ограничение_памяти--на-основе-на-количество-контейнеров
На основе количества контейнеров в контейнере. Количество контейнеров в контейнерах случайно, в некоторых контейнерах 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. Модуль kafka имеет два контейнера, поэтому выводится две строки.
Ожидаемый результат:
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