1. ホーム
  2. json

[解決済み] kubectl get pods の json フォーマットの出力を jsonpath でパースする方法

2022-03-15 06:10:54

質問

の出力からフィールドを取得するためにjsonをパースする方法。

kubectl get pods -o json

コマンドラインから、google cloud clusterからシステムで生成されたコンテナ名を取得する必要があります ... 以下は、上記のコマンドから出力されたjsonの主要な部分です。

ここをクリックするとjson出力全体が表示されます

つまり、一番上のjsonキーは配列:items[]、それに続くmetadata.labels.nameで、その複合キーの検索基準値は"web"(上の画像の緑のマーク参照)であるということです。 一致した場合、私は次にフィールドを取得する必要があります。

.items[].metadata.name  

という、偶然にも値を持つ:

web-controller-5e6ij   // I need to retrieve this value

jsonpathに関する文書はこちらです。

のテキストパース出力を避けたい。

kubectl get pods

というのは

NAME                     READY     STATUS    RESTARTS   AGE
mongo-controller-h714w   1/1       Running   0          12m
web-controller-5e6ij     1/1       Running   0          9m

以下は、これを正しくパースします。 get pods というコマンドがありますが、これはあまりにもろいと思います。

kubectl get pods | tail -1 | cut -d' ' -f1

解決方法は?

多くの戦いの後、このワンライナーはコンテナ名を取得します。

kubectl get pods -o=jsonpath='{.items[?(@.metadata.labels.name=="web")].metadata.name}'

これが既知の検索条件である場合 :

items[].metadata.labels.name  == "web"

そして、これは取得したいフィールドです。

items[].metadata.name  :  "web-controller-5e6ij"