+if [ $? != 0 ] ; then echo "Use -h for help"; exit 1 ; fi
+
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
+
+# For optional argument, as we are in quoted mode,
+# an empty parameter will be generated if its optional
+# argument is not found.
+while true; do
+ case "$1" in
+ -k | --keep ) start_keep=true; shift ;;
+ -h | --help ) usage; exit ;;
+ -d | --doc)
+ case "$2" in
+ "") start_doc=9898; shift 2 ;;
+ *) start_doc=$2; shift 2 ;;
+ esac ;;
+ -s | --sso)
+ case "$2" in
+ "") start_sso=9901; shift 2 ;;
+ *) start_sso=$2; shift 2 ;;
+ esac ;;
+ -a | --api)
+ case "$2" in
+ "") start_api=9900; shift 2 ;;
+ *) start_api=$2; shift 2 ;;
+ esac ;;
+ -a | --workbench)
+ case "$2" in
+ "") start_workbench=9899; shift 2 ;;
+ *) start_workbench=$2; shift 2 ;;
+ esac ;;
+ -- ) shift; break ;;
+ * ) usage; exit ;;
+ esac
+done
+
+# If no options were selected, then start all servers.
+if [[ $start_doc != false || $start_sso != false || $start_api != false || $start_workbench != false || $start_keep != false ]]; then
+ :
+else
+ start_doc=9898
+ start_sso=9901
+ start_api=9900
+ start_workbench=9899
+ start_keep=true
+fi
+
+function ip_address {
+ local container=$1
+ echo `docker inspect $container |grep IPAddress |cut -f4 -d\"`
+}
+
+function start_container {
+ local port="-p $1"
+ if [[ "$2" != '' ]]; then
+ local name="-name $2"
+ fi
+ if [[ "$3" != '' ]]; then
+ local volume="-v $3"
+ fi
+ if [[ "$4" != '' ]]; then
+ local link="-link $4"
+ fi
+ local image=$5
+
+ `docker ps |grep -P "$2[^/]" -q`
+ if [[ "$?" == "0" ]]; then
+ echo "You have a running container with name $2 -- skipping."
+ return
+ fi
+
+ echo "Starting container:"
+ echo " docker run -d -i -t$EXTRA $port $name $volume $link $image"
+ container=`docker run -d -i -t$EXTRA $port $name $volume $link $image`
+ if [[ "$?" != "0" ]]; then
+ echo "Unable to start container"
+ exit 1
+ fi
+ if [[ $EXTRA ]]; then
+ ip=$(ip_address $container )
+ echo
+ echo "You can ssh into the container with:"
+ echo
+ echo " ssh root@$ip"
+ echo
+ fi
+}
+
+function make_keep_volume {
+ # Mount a keep volume if we don't already have one
+ local keepvolume=""
+ for mountpoint in $(cut -d ' ' -f 2 /proc/mounts); do
+ if [[ -d "$mountpoint/keep" && "$mountpoint" != "/" ]]; then
+ keepvolume=$mountpoint
+ fi
+ done
+
+ if [[ "$keepvolume" == '' ]]; then
+ keepvolume=$(mktemp -d)
+ echo "mounting 512M tmpfs keep volume in $keepvolume"
+ sudo mount -t tmpfs -o size=512M tmpfs $keepvolume
+ mkdir $keepvolume/keep
+ fi
+ echo "$keepvolume"
+}
+
+if [[ $start_doc != false ]]; then
+ start_container "$start_doc:80" "doc_server" '' '' "arvados/doc"
+fi
+if [[ $start_sso != false ]]; then
+ start_container "$start_sso:443" "sso_server" '' '' "arvados/sso"
+fi
+if [[ $start_api != false ]]; then
+ start_container "$start_api:443" "api_server" '' "sso_server:sso" "arvados/api"
+fi
+if [[ $start_workbench != false ]]; then
+ start_container "$start_workbench:80" "workbench_server" '' "api_server:api" "arvados/workbench"
+fi
+
+if [[ $start_keep == true ]]; then
+ keepvolume=$(make_keep_volume)
+ start_container "25107:25107" "keep_server_0" "$keepvolume:/dev/keep-0" '' "arvados/warehouse"
+ start_container "25108:25107" "keep_server_1" "$keepvolume:/dev/keep-0" '' "arvados/warehouse"
+fi