OpenShift 3.11のoc get eventでAbsolute timestampを表示する

Red HatでOpenShiftのサポートをしているid:nekopです。OpenShift 全部俺 Advent Calendar 2018 - Qiitaの13日目のエントリです。

oc get event -wでAbsolute timestampを表示するというのを情報取得のときに利用していたんですが、昨日書いた通り3.11ではoc get event -wはAbsolute timestamp表示ではなくなってしまったので別の手段を用意する必要がでてきました。

rheb.hatenablog.com

custom-columnsオプションを利用することで表示をカスタマイズすることができるので、そちらを利用しましょう。元のカラム表示定義はこのへんを参照します。

https://github.com/openshift/origin/blob/release-3.11/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go#L238

コマンドを組み立てるとこうなりました。

$ oc get event -o custom-columns="LAST SEEN:{lastTimestamp},FIRST SEEN:{firstTimestamp},COUNT:{count},NAME:{metadata.name},KIND:{involvedObject.kind},SUBOBJECT:{involvedObject.fieldPath},TYPE:{type},REASON:{reason},SOURCE:{source.component},MESSAGE:{message}"
LAST SEEN              FIRST SEEN             COUNT     NAME                             KIND                      SUBOBJECT                TYPE      REASON                         SOURCE                      MESSAGE
2018-12-20T06:35:33Z   2018-12-20T06:35:33Z   1         sleep-2-dc4vs.1571f701b183e805   Pod                       spec.containers{sleep}   Normal    Started                        kubelet                     Started container

はい、長いですね。-o custom-columns-fileというオプションがあるので恐らくこちらを使うのが正解でしょう。

$ cat <<EOF> abs-event.txt
"LAST SEEN:{lastTimestamp},FIRST SEEN:{firstTimestamp},COUNT:{count},NAME:{metadata.name},KIND:{involvedObject.kind},SUBOBJECT:{involvedObject.fieldPath},TYPE:{type},REASON:{reason},SOURCE:{source.component},MESSAGE:{message}"
EOF
$ oc get event -o custom-columns-file=abs-event.txt
error: invalid template, missing spec line. Expected format is one line of space separated headers, one line of space separated column specs.

なんでやねん、って感じですね。custom-columnscustom-columns-fileで記述フォーマットが異なるという仕様のようです。

$ cat <<EOF> abs-event2.txt
"LAST SEEN" "FIRST SEEN" "COUNT" "NAME" "KIND" "SUBOBJECT" "TYPE" "REASON" "SOURCE" "MESSAGE"
{lastTimestamp} {firstTimestamp} {count} {metadata.name} {involvedObject.kind} {involvedObject.fieldPath} {type} {reason} {source.component} {message}
EOF
$ oc get event -o custom-columns-file=abs-event2.txt
error: number of headers (12) and field specifications (10) don't match

スペース区切りの仕様がクオートしてもダメっぽいですね。バックスラッシュでエスケープしても同じです。通常のヘッダにスペース入ってるんだけどこっちでの指定が困難というのはどういうことでしょう。

$ cat <<EOF> abs-event3.txt
LAST_SEEN FIRST_SEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
{lastTimestamp} {firstTimestamp} {count} {metadata.name} {involvedObject.kind} {involvedObject.fieldPath} {type} {reason} {source.component} {message}
EOF
$ oc get event -o custom-columns-file=abs-event3.txt
LAST_SEEN              FIRST_SEEN             COUNT     NAME                             KIND                      SUBOBJECT                TYPE      REASON                         SOURCE                      MESSAGE
2018-12-20T06:35:33Z   2018-12-20T06:35:33Z   1         sleep-2-dc4vs.1571f701b183e805   Pod                       spec.containers{sleep}   Normal    Started                        kubelet                     Started container

アンダーバーにすれば受け付けてくれました。

この用途では、custom-columns-fileを使うより、custom-columnsを使ってbashでファイルからオプション渡す、くらいのほうがバランスが良さそうです。

$ cat <<EOF> abs-event.txt
"LAST SEEN:{lastTimestamp},FIRST SEEN:{firstTimestamp},COUNT:{count},NAME:{metadata.name},KIND:{involvedObject.kind},SUBOBJECT:{involvedObject.fieldPath},TYPE:{type},REASON:{reason},SOURCE:{source.component},MESSAGE:{message}"
EOF
$ oc get event -o custom-columns=$(cat abs-event1.txt)

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。