#!/bin/sh set -eu usage() { echo "Usage:" echo "scope launch [ ...]" echo "scope stop" echo echo "scope is of the form [:]" exit 1 } SCRIPT_VERSION="(unreleased version)" if [ "$SCRIPT_VERSION" = "(unreleased version)" ] ; then IMAGE_VERSION=latest else IMAGE_VERSION=$SCRIPT_VERSION fi IMAGE_VERSION=${VERSION:-$IMAGE_VERSION} SCOPE_IMAGE=weaveworks/scope:$IMAGE_VERSION SCOPE_CONTAINER_NAME=weavescope IP_REGEXP="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" IP_ADDR_CMD="find /sys/class/net -type l | xargs -n1 basename | grep -vE 'docker|veth|lo' | \ xargs -n1 ip addr show | grep inet | awk '{ print \$2 }' | grep -oE '$IP_REGEXP'" WEAVESCOPE_DOCKER_ARGS=${WEAVESCOPE_DOCKER_ARGS:-} [ $# -gt 0 ] || usage COMMAND=$1 shift 1 # Check that a container named $1 with image $2 is not running check_not_running() { case $(docker inspect --format='{{.State.Running}} {{.Config.Image}}' $1 2>/dev/null) in "true $2") echo "$1 is already running." >&2 exit 1 ;; "true $2:"*) echo "$1 is already running." >&2 exit 1 ;; "false $2") docker rm $1 >/dev/null ;; "false $2:"*) docker rm $1 >/dev/null ;; true*) echo "Found another running container named '$1'. Aborting." >&2 exit 1 ;; false*) echo "Found another container named '$1'. Aborting." >&2 exit 1 ;; esac } case "$COMMAND" in launch) check_not_running $SCOPE_CONTAINER_NAME $SCOPE_IMAGE docker rm -f $SCOPE_CONTAINER_NAME >/dev/null 2>&1 || true CONTAINER=$(docker run --privileged -d --name=$SCOPE_CONTAINER_NAME --net=host --pid=host \ -v /var/run/docker.sock:/var/run/docker.sock \ $WEAVESCOPE_DOCKER_ARGS $SCOPE_IMAGE --probe.docker true "$@") echo $CONTAINER if ! echo "$@" | grep -E "\-\-no\-app|\-\-service\-token" 1>/dev/null; then IP_ADDRS=$(docker run --rm --net=host --entrypoint /bin/sh $SCOPE_IMAGE -c "$IP_ADDR_CMD") echo "Weave Scope is reachable at the following URL(s):" >&2 for ip in $IP_ADDRS; do echo " * http://$ip:4040/" >&2 done fi ;; stop) [ $# -eq 0 ] || usage if ! docker stop $SCOPE_CONTAINER_NAME >/dev/null 2>&1 ; then echo "Weave Scope is not running." >&2 fi ;; *) echo "Unknown scope command '$COMMAND'" >&2 usage ;; esac