zaki work log

作業ログやら生活ログやらなんやら

[kubectl / oc] custom-columnsを指定して欲しい情報だけリストアップする

custom-columnsの簡単な使い方について。

お題

例えばcluster-admin権限でログインしてる状態でoc get sccすると、、、

OCP v4の場合

$ oc get scc
NAME               AGE
anyuid             54d
hostaccess         54d
hostmount-anyuid   54d
hostnetwork        54d
node-exporter      54d
nonroot            54d
privileged         54d
restricted         54d

OCP v3の場合

$ oc get scc
NAME                 PRIV      CAPS      SELINUX     RUNASUSER          FSGROUP     SUPGROUP    PRIORITY   READONLYROOTFS   VOLUMES
anyuid               false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    10         false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]
hostaccess           false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath persistentVolumeClaim projected secret]hostmount-anyuid     false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath nfs persistentVolumeClaim projected secret]
hostnetwork          false     []        MustRunAs   MustRunAsRange     MustRunAs   MustRunAs   <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]
kube-state-metrics   false     []        RunAsAny    RunAsAny           RunAsAny    RunAsAny    <none>     false            [*]
node-exporter        false     []        RunAsAny    RunAsAny           RunAsAny    RunAsAny    <none>     false            [*]
nonroot              false     []        MustRunAs   MustRunAsNonRoot   RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]
privileged           true      [*]       RunAsAny    RunAsAny           RunAsAny    RunAsAny    <none>     false            [*]
restricted           false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]

この情報量の差は一体…

ということで、OCP v4のoc get sccでも、一覧の表示でもう少し欲しい情報を出すにはどうすればいいかについて。

jsonpath(参考)

jsonpathを使った方法はこちら

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com

ただ、jsonpathを使ったやり方は「対象のピックアップ」だけでなく、「出力時の書式」も指定する必要があるのに加え、ネームスペース上の全リソースを出力みたいなことをやろうとすると、rangeとか出てきて正直言って結構複雑。

ということで、もうちょっと簡単に、項目を選択するだけのcustom-columnsについて。

custom-columns

jsonpath同様にパスを指定するところは同じだけど、対象のパスを指定するだけ。出力の書式はocに任せられる。

ヘルプの実行例

  # List resource information in custom columns.
  oc get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image

というわけで、まずオブジェクト名のみ出力。

$ oc get scc -o custom-columns=NAME:.metadata.name
NAME
anyuid
hostaccess
hostmount-anyuid
hostnetwork
node-exporter
nonroot
privileged
restricted

これにrunAsUserを追加してみると、、、

$ oc get scc -o custom-columns=NAME:.metadata.name,RUNASUSER:.runAsUser.type
NAME               RUNASUSER
anyuid             RunAsAny
hostaccess         MustRunAsRange
hostmount-anyuid   RunAsAny
hostnetwork        MustRunAsRange
node-exporter      RunAsAny
nonroot            MustRunAsNonRoot
privileged         RunAsAny
restricted         MustRunAsRange

さらに、priorityを追加。

$ oc get scc -o custom-columns=NAME:.metadata.name,RUNASUSER:.runAsUser.type,PRIORITY:.priority
NAME               RUNASUSER          PRIORITY
anyuid             RunAsAny           10
hostaccess         MustRunAsRange     <nil>
hostmount-anyuid   RunAsAny           <nil>
hostnetwork        MustRunAsRange     <nil>
node-exporter      RunAsAny           <nil>
nonroot            MustRunAsNonRoot   <nil>
privileged         RunAsAny           <nil>
restricted         MustRunAsRange     <nil>

こんな感じで、必要なカラムのみ表示できるようになる。

凡例

動かしてみればすぐわかるけど、以下の通り

-o custom-columns=<HEADER-NAME>:<JSON-PATH>

複数の場合は,区切りで。

-o custom-columns=<HEADER-NAME>:<JSON-PATH>,<HEADER-NAME2>:<JSON-PATH2>