Composing Kubectl Commands in Style with Kubed
Tight integration with the command line in my new Emacs package for Kubernetes
Last week I announced my new Emacs interface for Kubernetes, Kubed, on the Emacs development mailing list. So far working on Kubed has been a lot of fun, and in this post I want to highlight a feature that I find especially delightful.
First I should mention that Kubed uses kubectl to interact with
Kubernetes. This is similar to how Magit uses the git program to
interact with, well, Git. One of the design goals for Kubed is to
provide the full power of kubectl: if you can do it with kubectl
you can do it with Kubed, too. For many common operations, Kubed
provides a much nicer experience than what you would get by running
kubectl in a terminal, but kubectl is abundant with subcommands
and flags and options, and for some use cases the versatility of the
command line is irreplaceable.
So rather than hiding the kubectl command line deep under the hood,
Kubed embraces and enhances it.
The command kubed-kubectl-command lets you invoke a quick kubectl
command line whenever you need it. Emacs minibuffer completion is
hooked directly to the hidden kubectl subcommand __complete which
gives you the same completions you get in the shell. In fact, this
__complete subcommand is not unique to kubectl, it’s an artifact
of the Golang CLI framework that kubectl uses, Cobra. This
framework is very widespread in the Go ecosystem, and since Kubed’s
command line completion uses Cobra’s shell-agnostic completion
interface, it Just Works with any Cobra program!
Note: these screenshots show my custom minibuffer completions interface, with vanilla Emacs things look slightly different.
You can summon kubed-kubectl-command from the menu-bar “Kubernetes”
menu (enable kubed-menu-bar-mode to see that menu first), and if you
have the prefix keymap kubed-prefix-map bound to e.g. C-c k, then
you can also invoke kubed-kubectl-command by typing C-c k !.
But the real magic happens when you call this command from one of the
Kubed transient menus. These keyboard-driven menus let you compose
complex Kubernetes operations with an intuitive interface, and all
Kubed transient menus bind the ! key to kubed-kubectl-command.
When you invoke kubed-kubectl-command from a transient menu, it
automatically populates your initial command line according to the
transient menu you came from and the options you’ve set there.
That’s pretty cool, I think. In particular it means that you can
always start by exploring the Kubed transient menus, and if the exact
operation you want to carry out doesn’t have a dedicated Kubed
command, then you can hit ! to seamlessly drop to the right
kubectl command line.
That’s it for now! If you feel like giving Kubed go, you can grab it from here, or clone it one of the following mirrors:
- https://github.com/eshelyaron/kubed.git
- git://git.eshelyaron.com/kubed.git