Задача
Необходимо построить среду разработки под 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/
Добавить комментарий