Skip to content

Instantly share code, notes, and snippets.

@brettkrueger
Last active January 12, 2020 21:04
Show Gist options
  • Save brettkrueger/f9e976c869c079229572a8a09fd5082d to your computer and use it in GitHub Desktop.
Save brettkrueger/f9e976c869c079229572a8a09fd5082d to your computer and use it in GitHub Desktop.
function create-swarm() {
alias dm="docker-machine"
alias dms="docker-machine ssh"
NODE_PREFIX=${1:0:1}
NODE_COUNT=${1:1:1}
MANAGER_PREFIX=${2:0:1}
MANAGER_COUNT=${2:1:1}
if [ -z ${NODE_PREFIX} ]; then NODE_PREFIX="n"; fi
if [ -z ${MANAGER_PREFIX} ]; then MANAGER_PREFIX="m"; fi
if [ -z ${NODE_COUNT} ]; then NODE_COUNT=3; fi
if [ -z ${MANAGER_COUNT} ]; then MANAGER_COUNT=1; fi
echo "[+] Creating ${NODE_COUNT} nodes with prefix ${NODE_PREFIX} and ${MANAGER_COUNT} managers with prefix ${MANAGER_PREFIX}"
echo "[+] Creating Managers"
for MANAGER in $(seq 1 ${MANAGER_COUNT}); do
MANAGER_NAME="${MANAGER_PREFIX}${MANAGER}"
echo "--> Creating MANAGER ${MANAGER_NAME}"
dm rm --force ${MANAGER_NAME} &>/dev/null
dm create --driver virtualbox ${MANAGER_NAME} &>/dev/null
dms ${MANAGER_NAME} tce-load -iw jq &>/dev/null
done;
echo "[+] Creating Nodes"
for NODE in $(seq 1 ${NODE_COUNT}); do
NODE_NAME="${NODE_PREFIX}${NODE}"
echo "--> Creating NODE ${NODE_NAME}"
dm rm --force ${NODE_NAME} &>/dev/null
dm create --driver virtualbox ${NODE_NAME} &>/dev/null
#dms ${NODE_NAME} tce-load -iw jq &>/dev/null
done;
echo "[+] Configuring Swarm"
export IP=$(docker-machine ip ${MANAGER_PREFIX}1)
dms ${MANAGER_PREFIX}1 docker swarm init --advertise-addr $IP &>/dev/null
export JOIN_TOKEN=$(dms ${MANAGER_PREFIX}1 docker swarm join-token worker -q)
if [[ ${MANAGER_COUNT} -gt 1 ]]; then
echo "[+] Adding and Configuring ${MANAGER_COUNT} Managers"
for MANAGER in $(seq 2 ${MANAGER_COUNT}); do
MANAGER_NAME="${MANAGER_PREFIX}${MANAGER}"
dms ${MANAGER_NAME} docker swarm join --token ${JOIN_TOKEN} $IP:2377 &>/dev/null
dms ${MANAGER_PREFIX}1 docker node promote ${MANAGER_NAME} &>/dev/null
done;
fi;
echo "[+] Adding ${NODE_COUNT} nodes to Swarm"
for NODE in $(seq 1 ${NODE_COUNT}); do
NODE_NAME="${NODE_PREFIX}${NODE}"
dms ${NODE_NAME} docker swarm join --token ${JOIN_TOKEN} $IP:2377 &>/dev/null
done;
echo "[+] Done"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment