Skip to content

Instantly share code, notes, and snippets.

@rlespinasse
Created May 29, 2016 18:46
Show Gist options
  • Save rlespinasse/77a5e2b79eca2f790e3b0bf594cd4096 to your computer and use it in GitHub Desktop.
Save rlespinasse/77a5e2b79eca2f790e3b0bf594cd4096 to your computer and use it in GitHub Desktop.
swarm
#!/usr/bin/env bash
set -e
listSwarms() {
ls ~/.horde
}
initSwarm() {
mkdir -p ~/.horde/$1
docker run --rm swarm create > ~/.horde/$1/token.log
}
createSwarmMaster() {
TOKEN=$(head -n 1 ~/.horde/$1/token.log)
docker-machine create -d virtualbox --swarm-master --swarm-discovery token://$TOKEN $1-master
}
createSwarmAgents() {
AGENTS=$2
TOKEN=$(head -n 1 ~/.horde/$1/token.log)
for ((i=1; i<=AGENTS; i++)); do
docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN $1-agent-$i
pids[${i}]=$!
done;
for pid in ${pids[*]}; do
wait $pid;
done;
}
infoSwarm() {
docker-machine ls --filter swarm=$1-master
}
envSwarm() {
eval $(docker-machine env --swarm $1-master)
docker info
infoSwarm $1
}
startSwarm() {
docker-machine start $(docker-machine ls -q --filter swarm=$1-master)
}
stopSwarm() {
docker-machine stop $(docker-machine ls -q --filter swarm=$1-master)
}
rmSwarm() {
docker-machine rm -f -y $(docker-machine ls -q --filter swarm=$1-master)
rm -rf ~/.horde/$1
}
case "$1" in
create)
initSwarm $2
createSwarmMaster $2
createSwarmAgents $2 $3
envSwarm $2
;;
start)
startSwarm $2
;;
stop)
stopSwarm $2
;;
rm|destroy)
stopSwarm $2
rmSwarm $2
;;
swarm|env|load)
envSwarm $2
;;
info)
infoSwarm $2
;;
ls)
listSwarms
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment