99 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								#!/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 "$@"
							 |