Skip to content

Instantly share code, notes, and snippets.

@fields
Created May 20, 2013 15:48
Show Gist options
  • Save fields/5613110 to your computer and use it in GitHub Desktop.
Save fields/5613110 to your computer and use it in GitHub Desktop.
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# override these variables in ~/.vagrant.d/Vagrantfile for your local changes
$local_username ||= `whoami`.strip
$local_projects_directory ||= "~/projects/vagrant/"
$vm_memory ||= "4096"
$vm_cpus ||= "4"
$server_root_password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
### Global vagrant config below this line
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
# rails
config.vm.network :forwarded_port, guest: 3000, host: 8000
# sinatra
config.vm.network :forwarded_port, guest: 4567, host: 8001
# mysql
config.vm.network :forwarded_port, guest: 3306, host: 8010
# mongo
config.vm.network :forwarded_port, guest: 27017, host: 8011
config.ssh.forward_agent = true
config.vm.synced_folder $local_projects_directory, "/home/vagrant/projects/"
config.vm.provider :virtualbox do |vb|
# # Don't boot with headless mode
vb.gui = true
vb.customize ["modifyvm", :id, "--memory", $vm_memory]
vb.customize ["modifyvm", :id, "--cpus", $vm_cpus]
end
# install some base packages
config.vm.provision :shell, :inline => "sudo aptitude -y install build-essential"
config.vm.provision :shell, :inline => "sudo aptitude -y install screen"
config.vm.provision :shell, :inline => "sudo aptitude -y install links"
config.vm.provision :shell, :inline => "sudo aptitude -y install xvfb"
config.vm.provision :shell, :inline => "sudo aptitude -y install firefox"
# upgrade the chef install that comes on the base box
config.vm.provision :shell, :inline => "gem install chef --version 11.4.2 --no-rdoc --no-ri --conservative"
# copy the custom hosts file to the vm
config.vm.provision :shell, :inline => "cp /vagrant/vm_files/vm_hosts /etc/hosts"
# configure ruby versions and gemsets
$ruby_19_version = "ruby-1.9.3"
$ruby_ree_version = "ree-1.8.7"
$sinatra_gemset = "sinatra"
$rails_gemset = "rails"
config.vm.provision :chef_solo do |chef|
chef.json = {
"mysql" => {
:server_root_password => $server_root_password,
:server_repl_password => $server_root_password,
:server_debian_password => $server_root_password
},
"rvm" => {'version' => "1.20.5",
'default_ruby' => $ruby_19_version,
'rubies' => [$ruby_19_version, $ruby_ree_version],
'gems' => {
$ruby_19_version + '@' + $sinatra_gemset => [
{ 'name' => 'bundler' }
],
$ruby_ree_version + '@' + $rails_gemset => [
{ 'name' => 'bundler' }
]
}
},
"authorization" => {
'sudo' => {
'agent_forwarding' => true,
'groups' => ["admin", "wheel", "sysadmin"],
'users' => ["vagrant"],
'passwordless' => true
}
}
}
chef.add_recipe "apt"
chef.add_recipe "sudo"
chef.add_recipe "openssl"
chef.add_recipe "emacs"
chef.add_recipe "curl"
chef.add_recipe "git"
chef.add_recipe "subversion"
chef.add_recipe "mongodb::10gen_repo"
chef.add_recipe "mongodb::default"
chef.add_recipe "mysql::client"
chef.add_recipe "mysql::server"
chef.add_recipe "rvm::vagrant"
chef.add_recipe "rvm::system"
end
# configure default users on mysql
config.vm.provision :shell, :inline => "mysql -u root -p#{$server_root_password} -e \"create database if not exists dev_db\""
config.vm.provision :shell, :inline => "mysql -u root -p#{$server_root_password} -e \"GRANT ALL ON dev_db.* TO 'dev_user'@'localhost' IDENTIFIED BY 'YYYYYYYYYYYYYYYYYYYY'; FLUSH PRIVILEGES;\""
# run the custom config and checkout script as the vagrant user, passing in some arguments it needs to set versions
$script = <<SCRIPT
chmod u+x /vagrant/config_and_checkout.sh
sudo -u vagrant /vagrant/config_and_checkout.sh #{$local_username} "#{$ruby_19_version + "@" + $sinatra_gemset}" "#{$ruby_ree_version + "@" + $rails_gemset}"
SCRIPT
# puts "Running #{$script}"
config.vm.provision :shell, :inline => $script
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment