Запуск тестов OpenStack Keystone в Docker контейнере на Mac
Ниже описано как запускать Keystone тесты в Docker контейнере на OS X и зачем это мне понадобилось.
Я иногда пишу небольшие патчи в 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 нашей компании появится и в следующих постах.