Can I use autocompletion for kubectl in zsh?

Plato picture Plato · Feb 21, 2017 · Viewed 15.6k times · Source

I daily find myself doing...

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

I would like to cycle through matching resources with

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

but this doesn't seem to do anything with my stock setup. Any ideas?

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

Answer

mkokho picture mkokho · Feb 21, 2017

Both bash and zsh supports scripts that completes printed command when you press <TAB>. The feature is called Programmable completion, and you can find more details about that here: zsh completion.

Fortunately, you don't need to write your own script - kubectl provides it for zsh > 5.2. Try running this command: source <(kubectl completion zsh).

Another option is to use this tool: https://github.com/mkokho/kubemrr (disclaimer: I'm the author). The reason it exists is because standard completion script is too slow - it might take seconds before Kubernetes cluster replies will all pod names. But kubemrr keeps the names locally, so the response comes back almost immediately.