2020-05-14

5/14

kubectlのctx/nsをプロンプトに表示できるようにした

とりあえず個人用のmacOSだけ。下のコミットで実現:

どうせみんなやってるだろうと思ってググったら、案の定いっぱい出てきた。
スパブラさんがzshのプラグイン的なものを作っていて、使いやすそうだったのでこれを使うことにした。

vcs_info と合わせるとごちゃごちゃしそうだったので、 precmd() の中で RPROMPT を料理するようにリファクタした。

(追記) Ubuntuでも設定した。

GKEのcontextとか長すぎてつらいなって思ったら、 kubectl config rename-context ってコマンドがあることを知った。

bash対応

https://github.com/jonmosco/kube-ps1 を見つけた。zshにも対応してるので、最初からこっちでもよかったかも。
某現場では、一旦submoduleで組み込んだ。 .bashrc に下のように追記した:

# kube-ps1
toggle_kubectl_prompt() {
  if [[ -n "${__KUBECTL_PROMPT__:-}" ]]; then
    __KUBECTL_PROMPT__=
    PS1=$__base_ps1
  else
    __KUBECTL_PROMPT__=1
    PS1="\$(kube_ps1)\n${__base_ps1}"
  fi
}

if [[ ! -v __no_kubectl_configured ]]; then
  if ! command -v kubectl &>/dev/null; then
    __no_kubectl_configured=1
  elif ! kubectl config current-context &>/dev/null; then
    __no_kubectl_configured=1
  fi
fi
if [[ ! -v __no_kubectl_configured ]]; then
  source $MYENV_ROOT/submodule/kube-ps1/kube-ps1.sh
  KUBE_PS1_PREFIX='<'
  KUBE_PS1_SUFFIX='>'
  __base_ps1=$PS1

  if [[ ! -v __KUBECTL_PROMPT__ ]]; then
    echo "Show Kubernetes context/namespace on prompt."
    echo "Exec \"toggle_kubectl_prompt\" to hide/unhide."
    __KUBECTL_PROMPT__=1
    PS1="\$(kube_ps1)\n${__base_ps1}"
  fi
fi

メモ:

  • toggle_kubectl_prompt はzsh同様、ifの中でもいいかも
  • KUBE_PS1_(PREFIX|SUFFIX) は色変えられなかった

pecoでkubectx/ns相当の操作