web-dev-qa-db-ja.com

zshでkubectlのオートコンプリートを使用できますか?

私は毎日自分がやっていることを見つけます...

$ kubectl --context=foo get pods
  < copy text manually >
$ kubectl --context=foo logs dep1-12345678-10101

一致するリソースを循環させたい

$ kubectl --context=foo logs dep1<TAB>

しかし、これは私のストック設定では何もしないようです。何か案は?

osx 10.12.3 kubectl v1.4.5 zsh zsh 5.2(x86_64-Apple-darwin16.0)

16
Plato

bashzshは両方とも、_<TAB>_を押したときに印刷コマンドを完了するスクリプトをサポートします。この機能はProgrammable copmletionと呼ばれます。詳細については、 zsh completion を参照してください。

幸いなことに、独自のスクリプトを記述する必要はありません-kubectlはzsh> 5.2でそれを提供します。次のコマンドを実行してみてください:source <(kubectl completion zsh)

別のオプションはこのツールを使用することです: https://github.com/mkokho/kubemrr (discalimer:私は著者です)。存在する理由は、標準の完了スクリプトが遅すぎるためです。kubernetesクラスターの応答がすべてのポッド名に反映されるまでに数秒かかる場合があります。ただし、kubemrrは名前をローカルに保持するため、ほとんどすぐに応答が返されます。

31
mkokho

この関数を$ HOME/.zshrcに追加します。

Kubectlの完全な関数を遅延ロードします

kubectl () { command kubectl $* if [[ -z $KUBECTL_COMPLETE ]] then source <(command kubectl completion zsh) KUBECTL_COMPLETE=1 fi }

8
wweir