Skip to main content

Debugging Murano with Kolla

The kolla-ansible project recently gained support for hacking on the OpenStack services it deploys, much the same as devstack.

Services are being added as we go, so it’s unlikely all will be supported for the Pike release. That said it’s quite easy to add support for new projects, so if the one you’re interested in isn’t there yet have a go!

I’ve been using this for the past month or so to submit patches into the Murano project, and wanted to give a short overview of how Kolla can be used to do this.

Enabling

Start by enabling dev mode for the project(s) you’re interested in within /etc/kolla/globals.yml:

murano_dev_mode: true

Then either deploy the project:

kolla-ansible deploy --tags murano

or reconfigure it if it’s already been deployed:

kolla-ansible reconfigure --tags murano

Kolla will clone the source code for the project under ’/opt/stack’, and bind mount it into the container. The benefit of this is that you can use local development tools, your favorite editor, etc. right from the node instead of having to install them all into the container. Also if the container happens to go into an error state or gets destroyed you don’t lose your changes.

Debugging

Working on the code is as easy as making some changes to the local code, and restarting the container. Logs are available under ’/var/lib/docker/volumes/kolla_logs/_data/murano’, and can be tailed/grepped from a separate terminal.

To actually debug the code, I’ve found remote_pdb to be very effective. We currently don’t include this in the Docker images but it can be installed easily:

docker exec -it -u root murano_api pip install remote_pdb

Set a break point as follows:

from remote_pdb import RemotePdb
RemotePdb('127.0.0.1', 4444).set_trace()

Restart the container, and attach to pdb using:

socat readline tcp:127.0.0.1:4444

Summary

One of the best things about using Kolla is it’s “don’t touch the host where at all possible” mantra. This is one area where I find it really surpasses devstack, as deploys can quickly be torn down with confidence that nothing will be left behind. This leads to more repeatable patches, testing, and less “works on my machine” code.

Give it a try, and feel free to ask questions in #openstack-kolla on freenode.