Ansible Role for OpenStack Development

As mentioned previously, I have been using ansible for managing my development configuration for a few months now, and I’m finally getting around to releasing some of the roles I’ve created in a form (possibly) useful to other folks. This one configures some of the packages needed to run unit tests for OpenStack projects.

Features

There’s nothing quite as annoying as having tox fail to build a test environment because some system package is missing. The openstack-dev role installs many of the commonly needed system dependencies, such as libxml2 and libffi-dev. It isn’t an exhaustive list, and it isn’t sufficient to run OpenStack properly, but it does allow most of the unit tests to run, including some that are optional when driver libraries are not present. For a complete list of packages installed, refer to the source.

The role also sets up a working directory (openstack_dev_repos_dir) where the git repositories containing OpenStack source can be checked out. The role clones the openstack/oslo-incubator and creates an update.sh script in the openstack_dev_repos_dir to call the tool from the oslo-incubator for cloning copies of all of the OpenStack source trees.

The role also clones openstack/requirements, which contains tools/build_wheels.sh, a script for building wheels of all of the OpenStack project Python requirements. Since the role depends on dhellmann.devpi, a devpi server is set up running on the development server. Running build_wheels.sh will populate the cache for the devpi server and the wheelhouse so that tox environment builds for the unit tests for projects with a lot of dependencies will go more quickly.

Installing the Role

Clone the role from github or use ansible-galaxy to install dhellmann.openstack-dev. If you use ansible-galaxy, the dependencies will also be installed automatically.

$ ansible-galaxy install dhellmann.openstack-dev
- downloading role 'openstack-dev', owned by dhellmann
- downloading role from https://github.com/dhellmann/ansible-openstack-dev/archive/1.0.0.tar.gz
- extracting dhellmann.openstack-dev to roles/dhellmann.openstack-dev
- dhellmann.openstack-dev was installed successfully
- adding dependency: dhellmann.devpi
- adding dependency: dhellmann.python-dev
- downloading role 'devpi', owned by dhellmann
- downloading role from https://github.com/dhellmann/ansible-devpi/archive/1.0.0.tar.gz
- extracting dhellmann.devpi to roles/dhellmann.devpi
- dhellmann.devpi was installed successfully
- downloading role 'python-dev', owned by dhellmann
- downloading role from https://github.com/dhellmann/ansible-python-dev/archive/1.0.0.tar.gz
- extracting dhellmann.python-dev to roles/dhellmann.python-dev
- dhellmann.python-dev was installed successfully

Add the role to your playbook for your development server, and optionally set openstack_dev_repos_dir.

Cloning the Source

After running the playbook, login to the server and:

$ cd ~/repos
$ ./update.sh

If you changed openstack_dev_repos_dir, replace the cd command with the appropriate value.

Building Wheel Cache

$ cd ~/repos/openstack/requirements
$ ./tools/build_wheels.sh 2.7 3.4

The command will take some time, so you may want to get lunch while you wait.