Added Vagrant VM for development purposes.

This patch will make development quite a bit easier, by allowing a
new developer to just "spin up" a vm that contains all of
storyboard's service dependencies.

Change-Id: Iabd2043b21721966cb86d076488317d815315827
This commit is contained in:
Michael Krotscheck 2014-10-27 16:34:04 -07:00
parent 0fb9502678
commit 4e1bcdce18
5 changed files with 140 additions and 1 deletions

1
.gitignore vendored
View File

@ -57,6 +57,7 @@ ChangeLog
# Local settings
etc/storyboard.conf
.vagrant
# IDE settings
.idea

22
Vagrantfile vendored Normal file
View File

@ -0,0 +1,22 @@
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "trusty64"
config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
config.vm.network :forwarded_port, host_ip: '127.0.0.1', guest: 3306, host: 3306
config.vm.network :forwarded_port, host_ip: '127.0.0.1', guest: 15672, host: 15672
config.vm.network :forwarded_port, host_ip: '127.0.0.1', guest: 5672, host: 5672
config.vm.provider "virtualbox" do |v|
v.name = "storyboard_dev"
end
config.vm.provision "shell", path: "vagrant/bootstrap.sh"
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "vagrant/puppet/manifests"
puppet.manifest_file = "site.pp"
puppet.options="--verbose --debug"
end
end

View File

@ -5,6 +5,42 @@
Storyboard has two components: this API server, and the
Javascript-based web client.
Launching the development VM
============================
StoryBoard has certain server dependencies which are often complicated to
install on any development environment. To simplify this,
we've provided a vagrantfile which includes all required services.
1. Install [vagrant](https://www.vagrantup.com/)
2. Install [VirtualBox](https://www.virtualbox.org/)
3. Run `vagrant up` in the storyboard root directory.
If you choose to go this route, the appropriate configuration values in
`storyboard.conf` will be as follows::
...
[notifications]
rabbit_host=127.0.0.1
rabbit_login_method = AMQPLAIN
rabbit_userid = storyboard
rabbit_password = storyboard
rabbit_port = 5672
rabbit_virtual_host = /
...
[database]
connection = mysql://storyboard:storyboard@127.0.0.1:3306/storyboard
...
Note that the VM will attempt to bind to local ports 3306, 5672,
and 15672. If those ports are already in use, you will have to modify the
vagrant file and your configuration to accommodate.
This VM has also been set up for unit tests.
Installing the API server
=========================
@ -22,7 +58,7 @@ Installing the API server
cd storyboard
3. Add MySQL user and create database::
3. Add MySQL user and create database (not necessary if using VM)::
mysql -u $DB_USER -p$DB_PASSWORD -e 'DROP DATABASE IF EXISTS storyboard;'
mysql -u $DB_USER -p$DB_PASSWORD -e 'CREATE DATABASE storyboard;'

17
vagrant/bootstrap.sh Normal file
View File

@ -0,0 +1,17 @@
#!/bin/sh
apt-get update
apt-get install puppet
if [ ! -d "/etc/puppet/modules/mysql" ]; then
puppet module install puppetlabs-mysql --version 0.6.1
fi
if [ ! -d "/etc/puppet/modules/rabbitmq" ]; then
puppet module install puppetlabs-rabbitmq --version 4.1.0
fi
if [ ! -d "/etc/puppet/modules/erlang" ]; then
puppet module install garethr-erlang --version 0.3.0
fi

View File

@ -0,0 +1,63 @@
node default {
$dev_user = 'storyboard'
$dev_password = 'storyboard'
include 'erlang'
package { 'erlang-base':
ensure => 'latest',
before => Class['rabbitmq']
}
##########################################################
##
## RabbitMQ
##
class { 'rabbitmq':
service_manage => true,
manage_repos => false,
delete_guest_user => true,
default_user => $dev_user,
default_pass => $dev_password,
}
rabbitmq_user { $dev_user:
ensure => present,
admin => true,
password => $dev_password,
require => Class['rabbitmq']
}
rabbitmq_user_permissions { "${dev_user}@/":
configure_permission => '.*',
read_permission => '.*',
write_permission => '.*',
require => Rabbitmq_user[$dev_user],
}
##########################################################
##
## MySQL
##
class {'mysql::server':
config_hash => {
bind_address => '0.0.0.0'
}
}
mysql::db { 'storyboard':
user => $dev_user,
password => $dev_password,
host => '%',
}
database_user{ 'openstack_citest@%':
ensure => present,
password_hash => mysql_password('openstack_citest'),
require => Class['mysql::server'],
}
database_grant{ 'openstack_citest@%/storyboard\_test\_db\_%':
privileges => ['ALL'],
require => Database_user['openstack_citest@%']
}
}