Last active
September 2, 2016 22:33
-
-
Save matt-deboer/3b81462f795166d736d91ca5be0a4e65 to your computer and use it in GitHub Desktop.
Bakefile to create a docker 1.12 swarm on OSX with docker-machine-driver-xhyve support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -u | |
#. creates a new swarm. params name, [driver], [workers], [managers] | |
create-swarm() { | |
bake_params name | |
local driver=${driver:=virtualbox} | |
local workers=${workers:=2} | |
local managers=${managers:=1} | |
primary_master="${name}-manager-1" | |
create_machine ${primary_master} ${driver} | |
primary_master_ip=$(docker-machine ip ${primary_master}) | |
eval $(docker-machine env ${primary_master}) | |
docker swarm init --advertise-addr ${primary_master_ip} | |
local worker_token=$(docker swarm join-token -q worker) | |
local master_token=$(docker swarm join-token -q manager) | |
if [[ ${managers} -gt 1 ]]; then | |
for i in $(seq 2 ${managers}); do | |
node_name="${name}-manager-${i}" | |
create_machine "${node_name}" "${driver}" | |
eval $(docker-machine env ${node_name}) | |
echo "Executing: docker swarm join --token ${master_token} ${primary_master_ip}:2377" | |
docker swarm join --token "${master_token}" ${primary_master_ip}:2377 | |
done | |
fi | |
for i in $(seq 1 ${workers}); do | |
node_name="${name}-worker-${i}" | |
create_machine "${node_name}" "${driver}" | |
eval $(docker-machine env ${node_name}) | |
echo "Executing: docker swarm join --token ${worker_token} ${primary_master_ip}:2377" | |
docker swarm join --token "${worker_token}" ${primary_master_ip}:2377 | |
done | |
eval $(docker-machine env ${primary_master}) | |
docker network create --driver overlay ${name}-overlay | |
} | |
#. removes a swarm. params name [keep_keystore] | |
rm-swarm() { | |
bake_params name | |
for machine in $(docker-machine ls | grep -E "${name}-(master|node|manager|worker)" | awk '{print $1}'); do | |
docker-machine rm -f ${machine} | |
done | |
} | |
function create_machine() { | |
local node_name=$1 | |
local driver=$2 | |
if [[ ! "$(which docker-machine-driver-xhyve)" ]]; then | |
install_xhyve | |
fi | |
docker-machine create -d ${driver} ${node_name} | |
if [[ "${driver}" == "xhyve" ]]; then | |
docker-machine ssh ${node_name} \ | |
"sudo sh -c 'echo \"hostname ${node_name}\" >> /var/lib/boot2docker/profile'" | |
docker-machine ssh ${node_name} "sudo hostname ${node_name}" | |
fi | |
} | |
function install_xhyve() { | |
echo "Looks like you don't have the xhyve provider installed; | |
I'll attempt to install it for you...'" | |
if [[ "$(which go)" ]]; then | |
export GO15VENDOREXPERIMENT=1 | |
go get -u github.com/zchee/docker-machine-driver-xhyve | |
sudo chown root:wheel $GOPATH/bin/docker-machine-driver-xhyve | |
sudo chmod u+s $GOPATH/bin/docker-machine-driver-xhyve | |
elif [[ "$(which brew)" ]]; then | |
brew install docker-machine-driver-xhyve | |
sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve | |
sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve | |
else | |
echo "Looks like you don't have go or homebrew installed; | |
I need one of those in order to install the xhyve driver. | |
See docs here: https://github.com/zchee/docker-machine-driver-xhyve" | |
exit 1 | |
fi | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is a Bakefile, which uses kyleburton/bake; once you've installed bake, just create the cluster by running the following from the directory where you've placed the Bakefile:
which builds a cluster of 1 manager and 2 workers.
Create a larger cluster like so: