redstorm/vagrant/Vagrantfile

168 lines
4.5 KiB
Ruby

# -*- mode: ruby -*-
# vi: set ft=ruby :
# @param swap_size_mb [Integer] swap size in megabytes
# @param swap_file [String] full path for swap file, default is /swapfile1
# @return [String] the script text for shell inline provisioning
def create_swap(swap_size_mb, swap_file = "/swapfile1")
<<-EOS
if [ ! -f #{swap_file} ]; then
echo "Creating #{swap_size_mb}mb swap file=#{swap_file}. This could take a while..."
dd if=/dev/zero of=#{swap_file} bs=1024 count=#{swap_size_mb * 1024}
mkswap #{swap_file}
chmod 0600 #{swap_file}
swapon #{swap_file}
if ! grep -Fxq "#{swap_file} swap swap defaults 0 0" /etc/fstab
then
echo "#{swap_file} swap swap defaults 0 0" >> /etc/fstab
fi
fi
EOS
end
# execute chef provisionning with environment specific configs
# this is an attempt to DRY up the dev/prod provisionning
# @param chef [Object] the chef provisionner, see Vagrant doc
# @param env [Symbol] the environment symbol, :dev, :prod, etc
def provision(chef, env)
# provision = lambda do |chef|
# chef.log_level = :debug
chef.cookbooks_path = ["./cookbooks"]
chef.roles_path = ["./roles"]
chef.data_bags_path = ["./databags"]
# setup users (from data_bags/users/*.json)
chef.add_recipe "users::sysadmins" # creates users and sysadmin group
chef.add_recipe "users::sysadmin_sudo" # adds %sysadmin group to sudoers
chef.add_recipe "ohai"
chef.add_recipe "apt"
chef.add_recipe "build-essential"
chef.add_recipe "git"
chef.add_recipe "redisio::install"
chef.add_recipe "redisio::enable"
chef.add_recipe "runit"
chef.add_recipe "java"
chef.add_recipe "storm::singlenode"
chef.json = {
:java => {
:oracle => {
"accept_oracle_download_terms" => true
},
:install_flavor => "openjdk",
:jdk_version => "7",
},
:storm => {
:version => "0.9.1-incubating",
:deploy => {
:user => "storm",
:group => "storm",
},
},
}
case env
when :dev
chef.json[:storm].merge!({
:nimbus => {
:host => "localhost",
:childopts => "-Xmx128m",
},
:supervisor => {
:hosts => ["localhost"],
:childopts => "-Xmx128m",
},
:worker => {
:childopts => "-Xmx128m",
},
:ui => {
:childopts => "-Xmx128m",
},
})
when :prod
chef.json[:storm].merge!({
:nimbus => {
:host => "localhost",
:childopts => "-Xmx768m",
},
:supervisor => {
:hosts => ["localhost"],
:childopts => "-Xmx256m",
},
:worker => {
:childopts => "-Xmx4096m -Xms4096m",
},
:ui => {
:childopts => "-Xmx768m",
},
})
else
raise("invalid env=#{env.inspect}")
end
end
# use version 2 config object
Vagrant.configure("2") do |config|
config.ssh.forward_agent = true
config.vm.define :prod do |prod|
prod.vm.box = "dummy"
prod.ssh.username = "ubuntu"
prod.vm.provider :aws do |aws, override|
aws.access_key_id = ENV["ACCESS_KEY_ID"]
aws.secret_access_key = ENV["SECRET_ACCESS_KEY"]
aws.keypair_name = ENV["KEYPAIR_NAME"]
override.ssh.private_key_path = ENV["PRIVATE_KEY_PATH"]
aws.ami = "ami-0cdf4965" # Ubuntu 12.10, us-east-1, 64bits, ebs root
aws.instance_type = "m1.large"
aws.region = "us-east-1"
aws.tags = {"Name" => "redstorm_cluster"}
aws.security_groups = ["storm", "ssh"]
end
# TODO on EC2, add swap on ephemeral device not ebs boot
prod.vm.provision :shell, :inline => create_swap(1024, "/mnt/swapfile1")
prod.vm.provision :chef_solo do |chef|
provision(chef, :prod)
end
end
config.vm.define :dev do |dev|
dev.vm.box = "precise-amd64"
dev.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
# storm ui
dev.vm.network :forwarded_port, :guest => 8080, :host => 8080
# storm numbus thrift
dev.vm.network :forwarded_port, :guest => 6627, :host => 6627
# storm drpc
dev.vm.network :forwarded_port, :guest => 3772, :host => 3772
# redis
dev.vm.network :forwarded_port, :guest => 6379, :host => 6379
dev.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 1536]
end
dev.vm.provision :shell, :inline => create_swap(256)
dev.vm.provision :chef_solo do |chef|
provision(chef, :dev)
end
end
# vagrant-omnibus plugin: auto install/upgrate chef
config.omnibus.chef_version = "10.18.2"
end