Запуск тестов OpenStack Keystone в Docker контейнере на Mac

Ниже описано как запускать Keystone тесты в Docker контейнере на OS X и зачем это мне понадобилось.

9c420995345340e696254065cd74e347.jpg

Я иногда пишу небольшие патчи в Openstack, в основном в Keystone. Делаю это на моем лаптопе с OS X. В 2009 я перешел с Linux на Mac, т.к. на последнем разрабатывать было не менее удобно, а заниматься всем остальным — гораздо удобнее. К сожалению, последнее время первое утверждение часто оказывается ложным. Например, Apple начала очень медленно обновлять системные open source библиотеки, от чего пострадали тесты Keystone — сначала из-за старого OpenSSL, а потом и python-ldap. Об этом, например, пишет Keystone PTL Morgan Fainberg. Начинает он оптимистичным

NOTICE: OS X based testing/running of Keystone will likely be deprecated

Можно с этим бороться, но удовольствие уже не то.
Сначала я перешел в VM с Ubuntu, что сняло все проблемы с запуском тестов, но настраивать и поддерживать еще одну среду разработки — задача, которой хотелось бы избежать. Запускать же VM только из-за тестов — расточительство. Кроме того, мелкие различия между Mac и Lunux (shell, MacVim) немного раздражали. Потому я решил продолжать разработку на Mac, запуская тесты в docker контейнере в том же iTerm2. Дальше пошаговая инструкция.

Сначала создадим проект

$ mkdir  ../docker
$ cd ../docker
$ vim Dockerfile

Пишем Dockerfile

FROM ubuntu:14.04
MAINTAINER XXX "xxx@gmail.com"
RUN apt-get update
RUN apt-get install -y python
RUN apt-get install -y git
RUN apt-get install -y python-setuptools
RUN apt-get install -y python-pip
RUN pip install virtualenv
RUN apt-get install -y gettext
RUN apt-get install -y python-dev python3-dev libxml2-dev libxslt1-dev
RUN apt-get install -y libsasl2-dev libsqlite3-dev libssl-dev libldap2-dev libffi-dev
RUN pip install tox
RUN apt-get install -y python-tox

Создаем контейнер:

$ docker build -t="hashmap/keystone-dev" .

Получаем:

Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04
 ---> 63e3c10217b8
...
Unpacking python-tox (1.6.0-1ubuntu1) ...
Setting up libjs-jquery (1.7.2+dfsg-2ubuntu1) ...
Setting up libjs-underscore (1.4.4-2ubuntu1) ...
Setting up libjs-sphinxdoc (1.2.2+dfsg-1ubuntu1.1) ...
Setting up python-py (1.4.20-1) ...
Setting up python-virtualenv (1.11.4-1) ...
Setting up python-tox (1.6.0-1ubuntu1) ...
 ---> 41f003afb987
Removing intermediate container 52fa1fca6272
Successfully built 41f003afb987

Теперь получаем исходники keystone

$ mkdir -p ~/projects/openstack/
$ cd  ~/projects/openstack/
$ git clone https://github.com/openstack/keystone.git

Запускаем контейнер

$ docker run -it -v ~/projects/openstack/keystone/:/keystone hashmap/keystone-dev

Получаем сессию внутри контейнера:

root@ecc4228056af:/# cd /keystone

Один раз нам надо настроить venv

$ python tools/install_venv.py
$ source .venv/bin/activate
$ python -c "import keystone"

Если ошибок не возникло — все настроено. Можно еще обновить БД:

$ root@e29e21a501f0:/keystone# ./.venv/bin/keystone-manage db_sync

Теперь запускаем тест

$ tox -e py27
...
 - Passed: 4254
 - Skipped: 1234
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 0
...
 py27: commands succeeded
 congratulations :)


Теперь можно время от времени запускать контейнер с тестами. Не замерял, но на глаз заметно, что тесты выполняются медленнее, с другой стороны, я им дал ровно половину ресурсов лаптопа.

В итоге мы имеем среду разработки на Mac с работающими тестами, роскошь в текущей ситуации!

P.S. Если понравилась КДПВ — дайте мне знать, docker-girl нашей компании появится и в следующих постах.

© Habrahabr.ru