Skip to content

Instantly share code, notes, and snippets.

@wndhydrnt
Created April 26, 2015 10:56
Show Gist options
  • Save wndhydrnt/f0baa3e708cd51c6ac90 to your computer and use it in GitHub Desktop.
Save wndhydrnt/f0baa3e708cd51c6ac90 to your computer and use it in GitHub Desktop.
Mesos/Chronos/Marathon Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
ADDITIONAL_SCRIPTS = ENV.fetch('ADDITIONAL_SCRIPTS', '').split(',')
ENABLE_CHRONOS = ENV.fetch('ENABLE_CHRONOS', 1).to_i
ENABLE_MARATHON = ENV.fetch('ENABLE_MARATHON', 1).to_i
NODES = ENV.fetch('NODES', 1).to_i
VERSION_CHRONOS = ENV.fetch('VERSION_CHRONOS', '2.3.3-1.0.1.ubuntu1404')
VERSION_MARATHON = ENV.fetch('VERSION_MARATHON', '0.8.1-1.0.171.ubuntu1404')
$zookeeper_conf = <<CONF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
#{NODES.times.map { |i| "server.#{i+1}=10.168.1.1#{i}:2888:3888" }.join("\n")}
CONF
def mesos_install(i, attrs)
script = <<SCRIPT
sed -i '/127\\.0\\.1\\.1/d' /etc/hosts
# Setup
apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
CODENAME=$(lsb_release -cs)
# Add the repository
echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | \
tee /etc/apt/sources.list.d/mesosphere.list
echo "deb https://get.docker.com/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
apt-get -y update
apt-get -y install apt-transport-https lxc-docker
apt-get -y install mesos=0.21.1-1.1.ubuntu1404
echo "#{i + 1}" > /etc/zookeeper/conf/myid
echo "#{$zookeeper_conf}" > /etc/zookeeper/conf/zoo.cfg
echo "10.168.1.1#{i}" > /etc/mesos-master/ip
echo "10.168.1.1#{i}" > /etc/mesos-master/hostname
echo "zk://10.168.1.10:2181,10.168.1.11:2181,10.168.1.12:2181/mesos" > /etc/mesos/zk
echo "docker,mesos" > /etc/mesos-slave/containerizers
echo "20mins" > /etc/mesos-slave/executor_registration_timeout
echo "INFO" > /etc/mesos-slave/logging_level
echo "10.168.1.1#{i}" > /etc/mesos-slave/hostname
echo "10.168.1.1#{i}" > /etc/mesos-slave/ip
echo "#{attrs.map { |k, v| k + ":" + v }.join(";")}" > /etc/mesos-slave/attributes
service zookeeper restart
service mesos-master restart
service mesos-slave restart
SCRIPT
script
end
def chronos_install(i)
script = <<SCRIPT
echo "if \\$programname == 'chronos' then /tmp/chronos.log" > /etc/rsyslog.d/40-chronos.conf
service rsyslog restart
apt-get install -y chronos=#{VERSION_CHRONOS}
echo "10.168.1.1#{i}" > /etc/chronos/conf/hostname
if [ -z $(grep "LIBPROCESS_IP" "/etc/init/chronos.conf") ]; then
sed -i '8i\\
env LIBPROCESS_IP=10.168.1.1#{i}
' /etc/init/chronos.conf
fi
service chronos restart
SCRIPT
script
end
def marathon_install(i)
script = <<SCRIPT
echo "if \\$programname == 'marathon' then /tmp/marathon.log" > /etc/rsyslog.d/40-marathon.conf
service rsyslog restart
apt-get -y install marathon=#{VERSION_MARATHON}
mkdir -p /etc/marathon/conf
echo "http_callback" > /etc/marathon/conf/event_subscriber
echo "1200000" > /etc/marathon/conf/task_launch_timeout
echo "10.168.1.1#{i}" > /etc/marathon/conf/hostname
service marathon restart
SCRIPT
script
end
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
NODES.times do |i|
config.vm.define "node#{i}" do |node|
hostname = "node#{i}"
node.vm.hostname = hostname
node.vm.network 'private_network', ip: "10.168.1.1#{i}"
slave_attrs = {'node' => hostname, 'type' => 'slave'}
$mesos = mesos_install(i, slave_attrs)
node.vm.provision 'shell', inline: $mesos
node.vm.provision 'shell', inline: chronos_install(i) if ENABLE_CHRONOS == 1
node.vm.provision 'shell', inline: marathon_install(i) if ENABLE_MARATHON == 1
ADDITIONAL_SCRIPTS.each do |s|
node.vm.provision 'shell', path: s
end
node.vm.provider "virtualbox" do |v|
v.memory = 1536
v.cpus = 2
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment