3 quick tips for lxd

containers

Turn on completion in zsh

Include the following lines in your .zshrc

autoload bashcompinit
bashcompinit
export -f _have() { which $@ >/dev/null }
source /usr/share/bash-completion/completions/lxc

This turns on ability to use bash completions within zsh.

Then we need to create our own function for the _have bashism that is typically defined in /etc/bash_completion.

Finally just source the already awesome tab-completion for zsh.

launch tmux in a lxc

A slightly more involved version of this.

function lmux() {
    lxc exec $1 -- sh -ic 'WHO=$(awk  -F":" "\$3>999&&\$1!=\"nobody\" {print \$1; exit 1}" /etc/passwd || getent passwd 0 | sed "s_:.*__"); su -c "cd ~; script -qfc \"tmux attach\" /dev/null" $WHO'
}
function lmux-autocomplete {
    reply=( $(lxc list -c "n" | grep -v '^+' | tr -d '| ' | tail -n +2) )
}
compctl -K lmux-autocomplete lmux

It gets the first user from /etc/passwd or falls back to root, changes to the home directory of that user and runs “tmux attach” via script which creates a tty for us.

Since we obviously want autocomplete, write a small function to do that and enable it.

Use dns names for your lxcs

If you are using NetworkManager on your machine where lxd is running and want dns names for your containers. Simply run the following:

echo server=/lxd/$(lxc network get lxdbr0 ipv4.address | sed 's/\/.*//') | sudo tee /etc/NetworkManager/dnsmasq.d/lxd.conf
sudo service network-manager restart

This assumes that you are using managed networking so that there is a line like server=/lxd/10.232.128.1 (the dnsmasq config line to add a dns server authoritative for the “lxd” TLD from that ip — where the lxd daemon has its own dnsmasq for the managed network).

So now if you can reach your lxcs like so:

$ lxc launch ubuntu cooltest
$ ping cooltest.lxd
PING cooltest.lxd (10.232.128.58) 56(84) bytes of data.
64 bytes from 10.232.128.58 (10.232.128.58): icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from 10.232.128.58 (10.232.128.58): icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from 10.232.128.58 (10.232.128.58): icmp_seq=3 ttl=64 time=0.043 ms

And use that in your browser if you are doing something. Never have to remember ips again!

Advertisements
3 quick tips for lxd

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s