Skip to content
This repository has been archived by the owner on Aug 1, 2019. It is now read-only.

Commit

Permalink
Added Vagrant VM for development purposes.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
krotscheck committed Oct 29, 2014
1 parent 0fb9502 commit 4e1bcdc
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ ChangeLog

# Local settings
etc/storyboard.conf
.vagrant

# IDE settings
.idea
Expand Down
22 changes: 22 additions & 0 deletions Vagrantfile
Original file line number Diff line number Diff line change
@@ -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
38 changes: 37 additions & 1 deletion doc/source/install/development.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
=========================
Expand All @@ -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;'
Expand Down
17 changes: 17 additions & 0 deletions vagrant/bootstrap.sh
Original file line number Diff line number Diff line change
@@ -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

63 changes: 63 additions & 0 deletions vagrant/puppet/manifests/site.pp
Original file line number Diff line number Diff line change
@@ -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@%']
}
}

0 comments on commit 4e1bcdc

Please sign in to comment.