168 lines
4.5 KiB
Ruby
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
|