Skip to content

Commit

Permalink
Added dedicated Vagrant setup (closes #35)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexanderdean committed Apr 8, 2015
1 parent 902b6d6 commit 2fd4e0c
Show file tree
Hide file tree
Showing 9 changed files with 180 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ spec/reports
test/tmp
test/version_tmp
tmp

# Vagrant
.vagrant
23 changes: 23 additions & 0 deletions Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Vagrant.configure("2") do |config|

config.vm.box = "ubuntu/trusty64"
config.vm.hostname = "sluice"
config.ssh.forward_agent = true

config.vm.provider :virtualbox do |vb|
vb.name = Dir.pwd().split("/")[-1] + "-" + Time.now.to_f.to_i.to_s
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize [ "guestproperty", "set", :id, "--timesync-threshold", 10000 ]
vb.memory = 2048
end

config.vm.provision :shell do |sh|
sh.path = "vagrant/up.bash"
end

# Requires Vagrant 1.7.0+
config.push.define "gem", strategy: "local-exec" do |push|
push.script = "vagrant/push.bash"
end

end
3 changes: 3 additions & 0 deletions vagrant/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
oss-playbooks
ansible
.peru
2 changes: 2 additions & 0 deletions vagrant/ansible.hosts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[vagrant]
127.0.0.1:2222
14 changes: 14 additions & 0 deletions vagrant/peru.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
imports:
ansible: ansible
ansible_playbooks: oss-playbooks

curl module ansible:
# Equivalent of git cloning tags/v1.6.6 but much, much faster
url: https://codeload.github.com/ansible/ansible/zip/69d85c22c7475ccf8169b6ec9dee3ee28c92a314
unpack: zip
export: ansible-69d85c22c7475ccf8169b6ec9dee3ee28c92a314

git module ansible_playbooks:
url: https://github.com/snowplow/ansible-playbooks.git
# Comment out to fetch a specific rev instead of master:
# rev: xxx
79 changes: 79 additions & 0 deletions vagrant/push.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash
set -e

# Constants
rubygems_user=snowplow
rubygems_gem=snowplow-tracker

# Check if our Vagrant box is running. Expects `vagrant status` to look like:
#
# > Current machine states:
# >
# > default poweroff (virtualbox)
# >
# > The VM is powered off. To restart the VM, simply run `vagrant up`
function running {
set +e
vagrant status | sed -n 3p | grep -q "^default\s*running (virtualbox)$"
local is_running=$?
set -e
echo $is_running
}

# Reads the version out of lib/snowplow-tracker/version.rb
function parse_version {
cat lib/snowplow-tracker/version.rb | awk '/ VERSION =/ {v=$3; gsub(/\047/, "", v)} END {print v}'
}

# Installs RubyGems.org credentials in our guest
#
# Parameters:
# 1. rubygems_password
function install_creds {
vagrant ssh -c "curl -u ${rubygems_user}:${1} https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials"
vagrant ssh -c "chmod 0600 ~/.gem/credentials"
}

# Builds our gem
function build_gem {
vagrant ssh -c "cd /vagrant && gem build ${rubygems_gem}.gemspec"
}

# Installs our gem
#
# Parameters:
# 1. rubygems_version
function install_gem {
vagrant ssh -c "cd /vagrant && sudo gem install ./${rubygems_gem}-${1}.gem"
}

# Pushes our gem to RubyGems.org
#
# Parameters:
# 1. rubygems_version
function push_gem {
vagrant ssh -c "cd /vagrant && gem push ./${rubygems_gem}-${1}.gem"
}


# Move to the parent directory of this script
source="${BASH_SOURCE[0]}"
while [ -h "${source}" ] ; do source="$(readlink "${source}")"; done
dir="$( cd -P "$( dirname "${source}" )/.." && pwd )"
cd ${dir}

# Precondition for running
if [ $(running) != "0" ]; then
echo "Vagrant guest must be running to push"
exit 1
fi

# Can't pass args thru vagrant push so have to prompt
read -e -p "Please enter password for RubyGems.org user ${rubygems_user}: " rubygems_password

# Build, install & push
build_gem
rubygems_version=$(parse_version)
install_gem ${rubygems_version}
install_creds ${rubygems_password}
push_gem ${rubygems_version}
50 changes: 50 additions & 0 deletions vagrant/up.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash
set -e

vagrant_dir=/vagrant/vagrant
bashrc=/home/vagrant/.bashrc

echo "========================================"
echo "INSTALLING PERU AND ANSIBLE DEPENDENCIES"
echo "----------------------------------------"
apt-get update
apt-get install -y language-pack-en git unzip libyaml-dev python3-pip python-yaml python-paramiko python-jinja2

echo "==============="
echo "INSTALLING PERU"
echo "---------------"
sudo pip3 install peru

echo "======================================="
echo "CLONING ANSIBLE AND PLAYBOOKS WITH PERU"
echo "---------------------------------------"
cd ${vagrant_dir} && peru sync -v
echo "... done"

env_setup=${vagrant_dir}/ansible/hacking/env-setup
hosts=${vagrant_dir}/ansible.hosts

echo "==================="
echo "CONFIGURING ANSIBLE"
echo "-------------------"
touch ${bashrc}
echo "source ${env_setup}" >> ${bashrc}
echo "export ANSIBLE_HOSTS=${hosts}" >> ${bashrc}
echo "... done"

echo "=========================================="
echo "RUNNING PLAYBOOKS WITH ANSIBLE*"
echo "* no output while each playbook is running"
echo "------------------------------------------"
while read pb; do
su - -c "source ${env_setup} && ${vagrant_dir}/ansible/bin/ansible-playbook ${vagrant_dir}/${pb} --connection=local --inventory-file=${hosts}" vagrant
done <${vagrant_dir}/up.playbooks

guidance=${vagrant_dir}/up.guidance

if [ -f ${guidance} ]; then
echo "==========="
echo "PLEASE READ"
echo "-----------"
cat $guidance
fi
5 changes: 5 additions & 0 deletions vagrant/up.guidance
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
To get started:
vagrant ssh
cd /vagrant
bundle install
rspec
1 change: 1 addition & 0 deletions vagrant/up.playbooks
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
oss-playbooks/ruby-rvm.yml

0 comments on commit 2fd4e0c

Please sign in to comment.