
Ich verwende jq, um einige Daten im gewünschten Format zu erhalten. Die vollständigen JSON-Daten eines Pods werden hier eingefügt.https://pastebin.com/UMJA7xd5. Diese Daten sind eines der Pods im JSON-Format. Ich werde es auf allen Pods ausführen, damit ich die Informationen wie folgt auflisten kann:
Podname, 1. Containername, CPU-Limit, Speicherlimit, 2. Containername, CPU-Limit, Speicherlimit usw. basierend auf der Anzahl der Container
Basierend auf der Anzahl der Container in einem Pod. Die Anzahl der Container in Pods ist zufällig, einige Pods haben 1 oder einige haben bis zu 5 Container.
Ich kann bis hierher erstellen.
oc get po -o json | jq -j '.items[] | "\(.metadata.name), \(.spec.containers[] | .name +" , "+ .resources.limits.cpu +" , "+ .resources.limits.memory)\n" '
was mir eine Ausgabe wie unten gibt: -
kafka-0, kafka , 16 , 16Gi
kafka-0, filebeat , 2 , 256Mi
In den obigen Beispieldaten werden Daten von zwei Containern für ein einzelnes Pod Kafka-0 gedruckt. Das Kafka-Pod hat zwei Container, daher werden zwei Zeilen erzeugt.
Erwartetes Ergebnis:
kafka-0, kafka , 16 , 16Gi, filebeat , 2 , 256Mi
Ich bin neu bei jq und habe viele Optionen ausprobiert, bin aber nicht weitergekommen. Vielleicht mache ich etwas falsch. In diesem Container variieren die Werte, daher konnten diese Zeilen nicht verbunden werden.
Antwort1
$ 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