This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
reddit/Vagrantfile
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
186 lines (165 sloc)
6.62 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
# This assumes that the host machine has r2 and all the reddit plugins checked | |
# out and in the correct directories--pay attention to both name and position | |
# relative to the r2 code: | |
# | |
# r2: {ROOTDIR}/reddit | |
# | |
# plugins: | |
# about: {ROOTDIR}/about | |
# gold: {ROOTDIR}/gold | |
# | |
# All plugins are optional. A plugin will only be installed if it is listed | |
# in `plugins` AND it is located in a directory that both follows the plugin | |
# naming convention and is correctly located on the host machine. The general | |
# rule for naming each plugin directory is that "reddit-plugin-NAME" should be | |
# in the directory {ROOTDIR}/NAME. | |
# | |
# This VagrantFile allows for the creation of two VMs: | |
# * default: the primary VM, with all services necessary to run reddit | |
# locally against the local codebase. | |
# * travis: Testing-only VM suitable for running `nosetests` and debugging | |
# issues encountered without having to wait for travis-ci to pick | |
# up the build. This will *not* be the same environment as | |
# travis, but it should be useful for repairing broken tests. | |
# | |
# To start your vagrant box simply enter `vagrant up` from {ROOTDIR}/reddit. | |
# You can then ssh into it with `vagrant ssh`. | |
# | |
# avahi-daemon is installed on the guest VM so you can access your local install | |
# at https://reddit.local. If that fails you'll need to update your host | |
# machine's hosts file (/etc/hosts) to include the line: | |
# 192.168.56.111 reddit.local | |
# | |
# If you want to create additional vagrant boxes you can copy this file | |
# elsewhere, but be sure to update `code_share_host_path` to be the absolute | |
# path to {ROOTDIR}. | |
vagrant_user = "vagrant" | |
# code directories | |
this_path = File.absolute_path(__FILE__) | |
reddit_dir = File.expand_path("..", this_path) | |
code_share_host_path = File.expand_path("..", reddit_dir) | |
code_share_guest_path = "/media/reddit_code" | |
plugins = [ | |
"about", | |
"gold", | |
] | |
# overlayfs directories | |
overlay_mount = "/home/#{vagrant_user}/src" | |
overlay_lower = code_share_guest_path | |
overlay_upper = "/home/#{vagrant_user}/.overlay" | |
# "default" vm config | |
guest_ip = "192.168.56.111" | |
guest_mem = "4096" | |
guest_swap = "4096" | |
hostname = "reddit.local" | |
Vagrant.configure(2) do |config| | |
config.vm.box = "trusty-cloud-image" | |
config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box" | |
# mount the host shared folder | |
config.vm.synced_folder code_share_host_path, code_share_guest_path, mount_options: ["ro"] | |
config.vm.provider "virtualbox" do |vb| | |
vb.memory = guest_mem | |
end | |
# ubuntu cloud image has no swapfile by default, set one up | |
config.vm.provision "shell", inline: <<-SCRIPT | |
if ! grep -q swapfile /etc/fstab; then | |
echo 'swapfile not found. Adding swapfile.' | |
fallocate -l #{guest_swap}M /swapfile | |
chmod 600 /swapfile | |
mkswap /swapfile | |
swapon /swapfile | |
echo '/swapfile none swap defaults 0 0' >> /etc/fstab | |
else | |
echo 'swapfile found. No changes made.' | |
fi | |
SCRIPT | |
# set up the overlay filesystem | |
config.vm.provision "shell", inline: <<-SCRIPT | |
if [ ! -d #{overlay_mount} ]; then | |
echo "creating overlay mount directory #{overlay_mount}" | |
sudo -u #{vagrant_user} mkdir #{overlay_mount} | |
fi | |
if [ ! -d #{overlay_upper} ]; then | |
echo "creating overlay upper directory #{overlay_upper}" | |
sudo -u #{vagrant_user} mkdir #{overlay_upper} | |
fi | |
echo "mounting overlayfs (lower: #{overlay_lower}, upper: #{overlay_upper}, mount: #{overlay_mount})" | |
mount -t overlayfs overlayfs -o lowerdir=#{overlay_lower},upperdir=#{overlay_upper} #{overlay_mount} | |
SCRIPT | |
# NOTE: This VM exists solely to assist in writing tests. It does not actually | |
# install travis but rather builds a minimal vm with only the services | |
# available under a travis build to aid in test debugging (via `nosetests`) | |
# To use: | |
# $ vagrant up travis | |
# $ vagrant ssh travis | |
# vagrant@travis$ cd src/reddit/r2 && nosetests | |
config.vm.define "travis", autostart: false do |travis| | |
travis.vm.hostname = "travis" | |
# run install script | |
travis.vm.provision "shell", inline: <<-SCRIPT | |
if [ ! -f /var/local/reddit_installed ]; then | |
echo "running install script" | |
cd /home/#{vagrant_user}/src/reddit | |
./install/travis.sh vagrant | |
touch /var/local/reddit_installed | |
else | |
echo "install script already run" | |
fi | |
SCRIPT | |
end | |
# NB: this is the primary VM. To build run | |
# $ vagrant up | |
# [though 'vagrant up default' will also work, the 'default' is redudnant] | |
# Once built, avahi-daemon should guarantee the instance will be accessible | |
# from https://reddit.local/ | |
config.vm.define "default", primary: true do |redditlocal| | |
redditlocal.vm.hostname = hostname | |
# host-only network interface | |
redditlocal.vm.network "private_network", ip: guest_ip | |
# rabbitmq web interface | |
config.vm.network "forwarded_port", guest: 15672, host: 15672 | |
# run install script | |
plugin_string = plugins.join(" ") | |
redditlocal.vm.provision "shell", inline: <<-SCRIPT | |
if [ ! -f /var/local/reddit_installed ]; then | |
echo "running install script" | |
cd /home/#{vagrant_user}/src/reddit | |
REDDIT_PLUGINS="#{plugin_string}" REDDIT_DOMAIN="#{hostname}" ./install/reddit.sh | |
touch /var/local/reddit_installed | |
else | |
echo "install script already run" | |
fi | |
SCRIPT | |
# inject test data | |
redditlocal.vm.provision "shell", inline: <<-SCRIPT | |
if [ ! -f /var/local/test_data_injected ]; then | |
cd /home/#{vagrant_user}/src/reddit | |
sudo -u #{vagrant_user} reddit-run scripts/inject_test_data.py -c 'inject_test_data()' | |
touch /var/local/test_data_injected | |
else | |
echo "inject test data already run" | |
fi | |
# HACK: stop and start everything (otherwise sometimes there's an issue with | |
# ports being in use?) | |
reddit-stop | |
reddit-start | |
SCRIPT | |
# additional setup | |
redditlocal.vm.provision "shell", inline: <<-SCRIPT | |
if [ ! -f /var/local/additional_setup ]; then | |
apt-get install -y ipython avahi-daemon | |
touch /var/local/additional_setup | |
else | |
echo "additional setup already run" | |
fi | |
SCRIPT | |
# DONE: let this run whenever provision is run so that the user can see | |
# how to proceed. | |
redditlocal.vm.provision "shell", inline: <<-SCRIPT | |
cd /home/#{vagrant_user}/src/reddit | |
REDDIT_DOMAIN="#{hostname}" ./install/done.sh | |
SCRIPT | |
end | |
end |