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)

5 Answers

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: (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.

3

For oh-my-zsh, the easiest way to enable kubectl auto-completion is to add kubectl plugin in ~/.zshrc:

# somewhere in your .zshrc # kubectl: The kubectl completion script for Zsh can be generated with the command kubectl completion zsh. Sourcing the completion script in your shell enables kubectl autocompletion. # kube-ps1: A script that lets you add the current Kubernetes context and namespace configured on kubectl to your Bash/Zsh prompt strings plugins=(git kubectl Kube-ps1) 
2

I add this function to my $HOME/.zshrc.

It will lazy load complete function of kubectl

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

The oneline version:

(( ${+commands[kubectl]} )) && alias kubectl='test -z $C_KUBE && C_KUBE=1 && source <(command kubectl completion zsh); command kubectl' 
3

Try to add one line at the begining of you .zshrc file

autoload -U +X compinit && compinit 

then add another line below

source <(kubectl completion zsh) 
1

I want to suggest more clean setup, for all of you that are using Oh My Zsh. The current accepted answer uses the command kubectl completion zsh and sources them to the environment. Instead of doing that we would place them in the plugins folder, using the same command but modifying it to:

kubectl completion zsh > ~/.oh-my-zsh/custom/plugins/kubectl.plugin.zsh

Now we have to define the plugins we want to load on ZSH start inside of our ~/.zshrc config

... plugins=( git ... kubectl ) ... 

This solution has the benefit of keeping your config clean. (Yes I know it is one line, but if you have to do this for 10 plugins it adds up! :) )

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.