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

в 9:27, , рубрики: openstack, vagrant, системное программирование, метки: ,

О системе 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. 
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.11.10
HOST_IP_IFACE=eth1
FLAT_INTERFACE=br100
PUBLIC_INTERFACE=eth1
FLOATING_RANGE=192.168.11.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. Если статья оказалась кому-нибудь полезной, то могу продолжить делиться тут своим опытом.

Автор: sorantis

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js