From 4e1bcdce18677e350ae3efa38b18eca7e46bf2c5 Mon Sep 17 00:00:00 2001 From: Michael Krotscheck Date: Mon, 27 Oct 2014 16:34:04 -0700 Subject: [PATCH] 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 --- .gitignore | 1 + Vagrantfile | 22 +++++++++++ doc/source/install/development.rst | 38 +++++++++++++++++- vagrant/bootstrap.sh | 17 ++++++++ vagrant/puppet/manifests/site.pp | 63 ++++++++++++++++++++++++++++++ 5 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 Vagrantfile create mode 100644 vagrant/bootstrap.sh create mode 100644 vagrant/puppet/manifests/site.pp diff --git a/.gitignore b/.gitignore index 53f02213..39964f90 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ ChangeLog # Local settings etc/storyboard.conf +.vagrant # IDE settings .idea diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000..f8b68d0a --- /dev/null +++ b/Vagrantfile @@ -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 diff --git a/doc/source/install/development.rst b/doc/source/install/development.rst index 494a7cd7..143a2560 100644 --- a/doc/source/install/development.rst +++ b/doc/source/install/development.rst @@ -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;' diff --git a/vagrant/bootstrap.sh b/vagrant/bootstrap.sh new file mode 100644 index 00000000..4382eb57 --- /dev/null +++ b/vagrant/bootstrap.sh @@ -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 + diff --git a/vagrant/puppet/manifests/site.pp b/vagrant/puppet/manifests/site.pp new file mode 100644 index 00000000..ad651a6e --- /dev/null +++ b/vagrant/puppet/manifests/site.pp @@ -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@%'] + } +}