mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 02:00:43 +00:00
94 lines
2.6 KiB
Bash
Executable File
94 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -eu
|
|
|
|
usage() {
|
|
echo "Usage:"
|
|
echo "scope launch [<peer> ...]"
|
|
echo "scope stop"
|
|
echo
|
|
echo "scope <peer> is of the form <ip_address_or_fqdn>[:<port>]"
|
|
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
|
|
DOCKER_BRIDGE=${DOCKER_BRIDGE:-docker0}
|
|
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
|