Настройка среды разработки под OpenStack

от автора

О системе OpenStack была масса статей на Хабре, однако ни одна не затрагивала вопросы разработки и тестирования составных сервисов. Скажу сразу, настраивать среду голыми руками дело не из легких и не совсем уж благодарное. К счастью, существует официальная программа под названием Devstack, которая представляет собой набор скриптов для автоматической установки OpenStack на локальную виртуальную машину. Ну вот, хотелось бы тут и закончить статью, однако не все так складно с этим Devstack. А именно, установить его — это целый процесс танца с бубнами и выбора правильных конфигурационных параметров. К тому же проект движется своим шагом, и то, что работало сегодня может вылететь при любом новом комите.

Задача

Необходимо построить среду разработки под OpenStack для тестирования, багфиксинга и добавления фич в сервисы системы (nova, keystone, swift, heat, etc.). Среда должна собираться почти автоматически, чтобы было возможно в любой момент стереть созданную виртуальную машину, создать новую, запустить скрипты и получить готовую среду через несколько минут. Причем среда должна быть такая же, как на прежней VM. Так как интересующий меня сервис на момент написания статьи является heat, то конфигурация будет ориентирована под него, однако путем замены пары строчек можно адаптировать всю конфигурацию под любой другой сервис.

Собираем

Для сборки в арсенале должны быть следующие орудия труда: VirtualBox, Vagrant. Все остальное должно поставиться само. Я собирал на OSX 10.9.2, но думаю проблем с другими *nix ОС быть не должно.

VirtualBox

Тут все просто, идем на www.virtualbox.org, качаем релиз под вашу операционную систему и ставим. Я ставил 4.3.8 ибо Vagrant иногда плюется на 4.2.*, грозя неправильно проставить nfs.

Vagrant

Ставим Vagrant версии 1.3.5 (внимание, при установке любой другой версии работа nfs не гарантированна) и создаем директорию, где будем хранить нашу среду, скажем /home/user/devstack. Кладем в папку файл Vagrantfile со следующим содержанием:

-- mode: ruby -- vi: set ft=ruby : Vagrant config  VAGRANTFILE_API_VERSION = "2"  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "heat" config.vm.box_url = "http://files.vagrantup.com/precise32.box" # Увеличиваем память нашей VM до 2048MB config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] end  # Прописываем перенаправление портов для Horizon config.vm.network :forwarded_port, guest: 80, host: 8080  # Частный IP адрес, для NFS config.vm.network :private_network, ip: "192.168.11.10"  # синхронизируем /opt/stack c директорией /home/user/devstack.  # обратите внимание, на проставленные mode и ownership config.vm.synced_folder "/home/user/devstack", "/opt/stack",  nfs:true end 

Сохраняем файл, переходим в /home/user/devstack и строим VM

vagrant up

Получаем доступ к VM

vagrant ssh

Можем теперь перейти непосредственно к установке пакетов и самого devstack. Так как полученная машина у нас совершенно пустая, надо ставить все самим.

sudo apt-get update && sudo apt-get -y install git vim-gtk libxml2-dev libxslt1-dev libpq-dev python-pip libsqlite3-dev && sudo apt-get -y build-dep python-mysqldb && sudo pip install git-review tox && git clone git://git.openstack.org/openstack-dev/devstack -b stable/havana && chown -R vagrant:vagrant devstack && cd devstack 

Поздравляю, теперь у вас есть ненастроенный, но стабильный devstack release havana.

Devstack

Devstack можно настроить как угодно. Конфигурация довольно гибкая, и местами запутанная. Я собрал для себя конфигурацию, которая ставит все стабильные (havana) сервисы OpenStack, кроме heat. Убедитесь что вы находитесь в папке devstack и создайте файл local.conf (можно и localrc, devstack работаем с обоими)

 #Пароли, пароли... ADMIN_PASSWORD=devstack MYSQL_PASSWORD=devstack RABBIT_PASSWORD=devstack SERVICE_PASSWORD=devstack SERVICE_TOKEN=devstack   # Клонировать заново #RECLONE=yes #OFFLINE=True   #Параметры Swift #SWIFT_REPLICAS=1 #SWIFT_HASH=011688b44136573e209e   # Настройки сети  HOST_IP=192.168.55.10 HOST_IP_IFACE=eth1 FLAT_INTERFACE=br100 PUBLIC_INTERFACE=eth1 FLOATING_RANGE=192.168.55.224/27   #Куда писать логи LOGFILE=/opt/stack/logs/stack.sh.log VERBOSE=True LOG_COLOR=True SCREEN_LOGDIR=/opt/stack/logs    #Клонировать только стабильные ветки каждого сервиса NOVA_BRANCH=stable/havana CINDER_BRANCH=stable/havana GLANCE_BRANCH=stable/havana HORIZON_BRANCH=stable/havana KEYSTONE_BRANCH=stable/havana NEUTRON_BRANCH=stable/havana SWIFT_BRANCH=stable/havana HEAT_BRANCH=stable/havana CEILOMETER_BRANCH=stable/havana   # Horizon ENABLED_SERVICES+=,horizon   # Клонируем Heat (master branch) HEAT_REPO=https://github.com/openstack/heat.git HEAT_BRANCH=master   # Включенные сервисы ## будем использовать Neutron disable_service n-net enable_service q-svc enable_service q-agt enable_service q-dhcp enable_service q-l3 enable_service q-meta enable_service neutron   # Вырубаем Cinder disable_service cinder disable_service c-api disable_service c-sch disable_service c-vol  ## Не включаем Swift, просто потому что мы можем :) #enable_service s-proxy s-object s-container s-account  ## настраиваем Heat ENABLED_SERVICES+=,heat,h-api,h-api-cfn,h-api-cw,h-eng IMAGE_URLS+=",http://fedorapeople.org/groups/heat/prebuilt-jeos-images/F17-x86_64-cfntools.qcow2" IMAGE_URLS+=",https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img"   ## настраиваем Ceilometer # на момент написания, с монго подружиться не удалось, поэтому оставил базу данных по умолчанию - postgres #CEILOMETER_BACKEND=mongo ENABLED_SERVICES+=,ceilometer-acompute,ceilometer-acentral,ceilometer-collector,ceilometer-api ENABLED_SERVICES+=,ceilometer-alarm-notify,ceilometer-alarm-eva 

Убедитесь, что ваш HOST_IP совпадает по значению с private_network ip в Vagrantfile.
Напоминаю рабочии версии софта для данной конфигурации: VirtualBox 1.3.8, Vagrant 1.3.5

Вроде все. Сохраняем файл и запускаем ./stack.sh. Собирается все довольно долго, учитывая, что Heat качает два образа дисков для тестирования. Но это можно легко убрать, если фокус не на heat, а на другой сервис.
Данные конфиги на GitHub: github.com/sorantis/stackenv
Вопросы, пожелания, комментарии, оставляйте в комментариях, буду рад довести весь процесс до one-click кнопки!

P.S. Если статья оказалась кому-нибудь полезной, то могу продолжить делиться тут своим опытом.

ссылка на оригинал статьи http://habrahabr.ru/post/216849/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *