Developing dep8 tests with LXC

Jean-Baptiste Lallement jean-baptiste.lallement at canonical.com
Wed Jul 3 10:55:52 UTC 2013


On 07/03/2013 11:53 AM, Robie Basak wrote:
> I scratched an itch and implemented an adt-virt-lxc, as I couldn't find
> that anybody else had worked on it.
>
> It's here: https://code.launchpad.net/~racb/ubuntu/saucy/autopkgtest/lxc
> Or just grab the adt-virt-lxc binary from it, and run:
>      autopkgtest (...) --- /path/to/downloaded/adt-virt-lxc saucy -s daily
>
> It uses the ubuntu-cloud LXC template. It assumes that you have
> permission to "sudo lxc-{create,start,attach,stop,destroy}" which works
> fine on cloud images.
>

> So LXC seemed like a good solution. Now I can write tests for daemons
> more easily.
This is a great feature added to autopkgtest. Thanks for this work!

>
>
> A couple of issues with my code, which I'd like to fix with some
> feedback:
>
> 1. I currently hardcode the container name "test". How do I create a
> unique new container name without racing to create it? A question for
> Serge perhaps?
You could use a slightly different approach but which in my opinion fits 
well with autopkgtest.
What if you use an existing container as base and start an ephemeral 
container to run the tests on.

A first step would be to create the container outside of the virt-lxc 
driver with the same command you use in the driver currently:
lxc-create -t ubuntu-cloud -n adt-base -- -i adt ...

Then start an ephemeral container with:
sudo lxc-start-ephemeral -o adt-base -kd

(-k is important for point 2 as it gives you access to the underlying 
filesystem (maybe there is a way I dont know with tmpfs too) and for 
some tests you'll need more than the space available in tmpfs to run 
your tests)

ephemeral containers will save you the time of re-creating the container 
for each test and an easy way to revert to a base image with always the 
same state.

>
> 2. How do I detect when the container is fully booted so that I can use
> it? Using lxc-wait only gave me it from (I presume) the host's
> perspective; the guest kept breaking things until I figured out that it
> was cleaning /tmp after I had already started using it. For now, I've
> got a sleep hack to avoid this. But how do I detect boot completion
> properly? A question for Scott maybe?
On first boot of the container, from the host and if you used an 
ephemeral container, you can monitor when the file 
/var/lib/lxc/<NAME>/delta0/var/lib/cloud/instances/lxc-*/boot-finished 
appears.

-- 
Jean-Baptiste
IRC: jibel



More information about the Ubuntu-quality mailing list