diff options
Diffstat (limited to 'swarm/dev/scripts/stop-cluster.sh')
-rwxr-xr-x | swarm/dev/scripts/stop-cluster.sh | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/swarm/dev/scripts/stop-cluster.sh b/swarm/dev/scripts/stop-cluster.sh new file mode 100755 index 000000000..89cb7b0c9 --- /dev/null +++ b/swarm/dev/scripts/stop-cluster.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# +# A script to shutdown a dev swarm cluster. + +set -e + +ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" +source "${ROOT}/swarm/dev/scripts/util.sh" + +DEFAULT_BASE_DIR="${ROOT}/swarm/dev/cluster" + +usage() { + cat >&2 <<USAGE +usage: $0 [options] + +Shutdown a dev swarm cluster. + +OPTIONS: + -d, --dir DIR Base directory [default: ${DEFAULT_BASE_DIR}] + -h, --help Show this message +USAGE +} + +main() { + local base_dir="${DEFAULT_BASE_DIR}" + + parse_args "$@" + + local pid_dir="${base_dir}/pids" + + stop_swarm_nodes + stop_node "geth" + stop_node "bootnode" + delete_network +} + +parse_args() { + while true; do + case "$1" in + -h | --help) + usage + exit 0 + ;; + -d | --dir) + if [[ -z "$2" ]]; then + fail "--dir flag requires an argument" + fi + base_dir="$2" + shift 2 + ;; + *) + break + ;; + esac + done + + if [[ $# -ne 0 ]]; then + usage + fail "ERROR: invalid arguments: $@" + fi +} + +stop_swarm_nodes() { + for name in $(ls "${pid_dir}" | grep -oP 'swarm\d+'); do + stop_node "${name}" + done +} + +stop_node() { + local name=$1 + local pid_file="${pid_dir}/${name}.pid" + + if [[ -e "${pid_file}" ]]; then + info "stopping ${name}" + start-stop-daemon \ + --stop \ + --pidfile "${pid_file}" \ + --remove-pidfile \ + --oknodo \ + --retry 15 + fi + + if ip netns list | grep -qF "${name}"; then + ip netns delete "${name}" + fi + + if ip link show "veth${name}0" &>/dev/null; then + ip link delete dev "veth${name}0" + fi +} + +delete_network() { + if ip link show "swarmbr0" &>/dev/null; then + ip link delete dev "swarmbr0" + fi +} + +main "$@" |