Skip to content

Instantly share code, notes, and snippets.

@bydga
Last active February 3, 2016 09:43
Show Gist options
  • Select an option

  • Save bydga/34df92f67ae03ca2ec4d to your computer and use it in GitHub Desktop.

Select an option

Save bydga/34df92f67ae03ca2ec4d to your computer and use it in GitHub Desktop.
graceful restart docker-marathon-mesos app
# -*- mode: ruby -*-
# vi: set ft=ruby :
#IP addrees this VM will have
IP = "192.168.50.4"
# script that updates the system, downloads all prerequisities, installs docker,
# zookeeper, marathon, clones actual mesos branch and compiles it.
$setup = <<SCRIPT
sudo su
apt-get update
apt-get -y install software-properties-common build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev tar wget git openjdk-7-jdk autoconf libtool python-software-properties
mkdir /tmp/mesos
git clone https://git-wip-us.apache.org/repos/asf/mesos.git /tmp/mesos
cd /tmp/mesos
./bootstrap
mkdir /tmp/mesos/build
cd /tmp/mesos/build
../configure
make
curl https://get.docker.com | sh
cd /tmp
curl -O -s http://downloads.mesosphere.com/marathon/v0.13.0/marathon-0.13.0.tgz
tar xzf marathon-0.13.0.tgz
curl -O -s http://apache.miloslavbrada.cz/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar xzf zookeeper-3.4.6.tar.gz
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install -y openjdk-8-jre
update-java-alternatives --list
update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
cd /tmp/zookeeper-3.4.6
echo "tickTime=2000
dataDir=/var/zookeeper
clientPort=2181" > /tmp/zookeeper-3.4.6/conf/zoo.cfg
/tmp/zookeeper-3.4.6/bin/zkServer.sh start
SCRIPT
# script that runs mesos-master
$master = <<SCRIPT
sudo su
/tmp/mesos/build/bin/mesos-master.sh --work_dir=/tmp --advertise_ip=#{IP} --log_dir=/tmp/mesos-logs &
sleep 10
SCRIPT
# script that runs mesos-slave
$slave = <<SCRIPT
sudo su
/tmp/mesos/build/bin/mesos-slave.sh --master=#{IP}:5050 --containerizers=mesos,docker --advertise_ip=#{IP} --docker_stop_timeout=10secs --isolation=cgroups/cpu,cgroups/mem --log_dir=/tmp/mesos-logs &
sleep 10
SCRIPT
# script that runs marathon framework
$marathon = <<SCRIPT
sudo su
MESOS_NATIVE_JAVA_LIBRARY=/tmp/mesos/build/src/.libs/libmesos.so /tmp/marathon-0.13.0/bin/start --hostname #{IP} --master #{IP}:5050 --zk zk://localhost:2181/marathon &
sleep 10
SCRIPT
#script that creates the python script that will be run in a "standalone" mesos app
$python = <<SCRIPT
sudo su
echo '#!/usr/bin/python
from time import sleep
import signal
import sys
import datetime
def sigterm_handler(_signo, _stack_frame):
print "got %i" % _signo
print datetime.datetime.now().time()
sys.stdout.flush()
sleep(2)
print datetime.datetime.now().time()
print "ending"
sys.stdout.flush()
sys.exit(0)
signal.signal(signal.SIGTERM, sigterm_handler)
signal.signal(signal.SIGINT, sigterm_handler)
try:
print "Hello"
i = 0
while True:
i += 1
print datetime.datetime.now().time()
print "Iteration #%i" % i
sys.stdout.flush()
sleep(1)
finally:
print "Goodbye"' > /tmp/script.py
chmod +x /tmp/script.py
SCRIPT
#creates standalone mesos app
$standalone = <<SCRIPT
sudo su
curl -XPOST -d '{"args": ["/tmp/script.py"], "id": "python-standalone", "instances": 1, "cpus": 0.2}' -H "Content-Type: application/json" http://localhost:8080/v2/apps
SCRIPT
#creates dockerized mesos app
$docker = <<SCRIPT
sudo su
curl -XPOST -d '{"args": ["./script.py"], "container": {"type": "DOCKER", "docker": {"image": "bydga/marathon-test-api"}}, "id": "python-docker", "instances": 1, "cpus": 0.2}' -H "Content-Type: application/json" http://localhost:8080/v2/apps
SCRIPT
# go go power rangers
VAGRANTFILE_API_VERSION = "2"
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.cpus = "2"
end
config.vm.define "mesosdocker" do |mesosdocker|
mesosdocker.vm.hostname = "mesosdocker"
mesosdocker.vm.box = "trusty-server"
mesosdocker.vm.box_url = "https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box"
#mesosdocker.vm.box_url = "./ubuntu-14.04-amd64-vbox.box"
end
config.vm.network "private_network", ip: "#{IP}"
config.vm.provision "shell", inline: $setup
config.vm.provision "shell", inline: $master
config.vm.provision "shell", inline: $slave
config.vm.provision "shell", inline: $marathon
config.vm.provision "shell", inline: $python
config.vm.provision "shell", inline: $standalone
config.vm.provision "shell", inline: $docker
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment