Skip to content

Instantly share code, notes, and snippets.

@codenrhoden
Last active March 2, 2016 23:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codenrhoden/df8e26056837c10a75a0 to your computer and use it in GitHub Desktop.
Save codenrhoden/df8e26056837c10a75a0 to your computer and use it in GitHub Desktop.
Vagrant Based CloudFoundry-Mesos deployment
#!/usr/bin/env bash
set -x
set -e
BOSH_STEMCELL_FILE=bosh-lite-stemcell-latest.tgz
GARDEN_LINUX_FILE=garden-linux-release-v0.307.0.tgz
ETCD_FILE=etcd-release-latest.tgz
gem install bosh_cli bundler --no-ri --no-rdoc
if [ ! -d bosh-lite ]
then
git clone https://github.com/cloudfoundry/bosh-lite
fi
if [ ! -d cf-release ]
then
git clone https://github.com/cloudfoundry/cf-release
fi
if [ ! -d diego-release ]
then
git clone https://github.com/cloudfoundry-incubator/diego-release
fi
pushd bosh-lite
vagrant up --provider=virtualbox
bosh target 192.168.50.4 lite
bosh login admin admin
sudo bin/add-route
popd
if [ ! -e $BOSH_STEMCELL_FILE ]
then
curl -L -o $BOSH_STEMCELL_FILE https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent
fi
if [ ! -e $GARDEN_LINUX_FILE ]
then
curl -L -o $GARDEN_LINUX_FILE https://bosh.io/d/github.com/cloudfoundry-incubator/garden-linux-release?v=0.307.0
fi
if [ ! -e $ETCD_FILE ]
then
curl -L -o $ETCD_FILE https://bosh.io/d/github.com/cloudfoundry-incubator/etcd-release
fi
bosh upload stemcell bosh-lite-stemcell-latest.tgz --skip-if-exists
pushd cf-release
git checkout v219
scripts/update
cat > bosh-lite/stubs/cfmesos.yml <<EOF
---
properties:
consul:
require_ssl: false
cc:
default_to_diego_backend: true
EOF
scripts/generate-bosh-lite-dev-manifest bosh-lite/stubs/cfmesos.yml
bosh deployment bosh-lite/deployments/cf.yml
bosh create release --name cf --force
bosh -n upload release
bosh -n deploy
popd
bosh upload release garden-linux-release-v0.307.0.tgz --skip-if-exists
bosh upload release etcd-release-latest.tgz --skip-if-exists
pushd diego-release
git checkout v0.1434.0
scripts/update
scripts/generate-bosh-lite-manifests ./cfmesos.yml
sed -i '' '1796s/true/false/' bosh-lite-manifests/diego.yml
bosh deployment bosh-lite-manifests/diego.yml
bosh create release --name diego --force
bosh -n upload release
bosh -n deploy
cf login -a api.bosh-lite.com -u admin -p admin --skip-ssl-validation
cf enable-feature-flag diego_docker
cf create-org diego
cf target -o diego
cf create-space diego
cf target -s diego
#!/usr/bin/env bash
set -x
set -e
if [ ! -d codenrhoden-vagrant ]
then
git clone https://github.com/codenrhoden/vagrant codenrhoden-vagrant
fi
pushd codenrhoden-vagrant/playa-mesos
git reset --hard
git checkout cfmesos
cat > config.json <<EOF
{
"platform": "virtualbox",
"box_name": "codenrhoden/playa_mesos_0.25",
"hosts": {
"mesos-master": {
"ip": "192.168.50.5"
},
"mesos-slave1": {
"ip": "192.168.50.6"
}
},
"vm_ram": "2560",
"vm_cpus": "2"
}
EOF
vagrant up --provider=virtualbox
popd
pushd diego-release
export GOPATH=$(pwd)
popd
pushd diego-release/src/github.com/cloudfoundry-incubator/auctioneer/cmd/auctioneer/
sed -i '' 's|"github.com/cloudfoundry-incubator/auction/auctionrunner"|"github.com/codenrhoden/cloudfoundry-mesos/scheduler/auctionrunner"|g' main.go
go get ./...
env GOOS=linux go build
bosh scp brain_z1/0 --upload auctioneer /tmp/auctioneer
popd
cat > auctioneer_ctl <<"EOF"
#!/bin/bash -e
RUN_DIR=/var/vcap/sys/run/auctioneer
LOG_DIR=/var/vcap/sys/log/auctioneer
CONF_DIR=/var/vcap/jobs/auctioneer/config
PIDFILE=$RUN_DIR/auctioneer.pid
source /var/vcap/packages/pid_utils/pid_utils.sh
bbs_sec_flags=" \
-bbsClientCert=${CONF_DIR}/certs/bbs/client.crt \
-bbsClientKey=${CONF_DIR}/certs/bbs/client.key \
-bbsCACert=${CONF_DIR}/certs/bbs/ca.crt"
bbs_api_url="https://bbs.service.cf.internal:8889"
case $1 in
start)
pid_guard $PIDFILE "auctioneer"
mkdir -p $RUN_DIR
chown -R vcap:vcap $RUN_DIR
mkdir -p $LOG_DIR
chown -R vcap:vcap $LOG_DIR
echo $$ > $PIDFILE
# Allowed number of open file descriptors
ulimit -n 100000
exec chpst -u vcap:vcap /var/vcap/packages/auctioneer/bin/auctioneer ${bbs_sec_flags} \
-bbsAddress=${bbs_api_url} \
\
-address=10.244.16.134 \
-master=zk://192.168.50.5:2181/mesos \
-auction_strategy=binpack \
-consul_server=10.244.0.54 \
-etcd_url=http://10.244.0.42:4001 \
-consulCluster=http://127.0.0.1:8500 \
-executor_image=codenrhoden/diego-cell \
-debugAddr=0.0.0.0:17001 \
-listenAddr=0.0.0.0:9016 \
-logLevel=info \
2> >(tee -a $LOG_DIR/auctioneer.stderr.log | logger -p user.error -t vcap.auctioneer) \
1> >(tee -a $LOG_DIR/auctioneer.stdout.log | logger -p user.info -t vcap.auctioneer)
;;
stop)
kill_and_wait $PIDFILE
;;
*)
echo "Usage: auctioneer_ctl {start|stop}"
;;
esac
EOF
cat > replace_auctioneer.sh <<EOF
#!/bin/bash
set -x
# Since bosh uses a different user on every SSH attempt,
# we set ogo+w on our files so they can be overwritten later
sudo chmod ugo+w /tmp/auctioneer /tmp/auctioneer_ctl /tmp/replace_auctioneer.sh
sudo /var/vcap/bosh/bin/monit stop auctioneer
# wait for auctioneer to stop
while [ -e /var/vcap/sys/run/auctioneer/auctioneer.pid ]; do
sleep 1
done
if [ ! -f /var/vcap/jobs/auctioneer/bin/auctioneer_ctl_old ]
then
sudo mv /var/vcap/jobs/auctioneer/bin/auctioneer_ctl /var/vcap/jobs/auctioneer/bin/auctioneer_ctl_old
fi
sudo cp /tmp/auctioneer_ctl /var/vcap/jobs/auctioneer/bin/
sudo chown root:root /var/vcap/jobs/auctioneer/bin/auctioneer_ctl
sudo chmod 0755 /var/vcap/jobs/auctioneer/bin/auctioneer_ctl
if [ ! -f /var/vcap/packages/auctioneer/bin/auctioneer_old ]
then
sudo mv /var/vcap/packages/auctioneer/bin/auctioneer /var/vcap/packages/auctioneer/bin/auctioneer_old
fi
sudo cp /tmp/auctioneer /var/vcap/packages/auctioneer/bin/
sudo chown root:root /var/vcap/packages/auctioneer/bin/auctioneer
sudo chmod 0755 /var/vcap/packages/auctioneer/bin/auctioneer
sudo /var/vcap/bosh/bin/monit start auctioneer
EOF
bosh scp brain_z1/0 --upload auctioneer_ctl /tmp/auctioneer_ctl
bosh scp brain_z1/0 --upload replace_auctioneer.sh /tmp/replace_auctioneer.sh
bosh ssh brain_z1/0 bash /tmp/replace_auctioneer.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment