710fdacdbc2ee78819ebfc0560cfe5b0ee2413ff
[cmccabe-bin] / dssh
1 #!/usr/bin/env bash
2
3 #
4 # Get a login for a docker container.
5 #
6
7 die() {
8     echo $@
9     exit 1
10 }
11
12 usage() {
13     cat <<EOF
14 dssh: log in to a docker node
15
16 usage: dssh: [options]
17
18 options:
19 -h:           show this help message.
20 -i [ID]:      ssh into a docker node with this container ID
21 -n [name]:    ssh into a docker node with this name
22 EOF
23 }
24
25 DOCKER_IMAGE_ID=""
26 DOCKER_IMAGE_NAME=""
27 while getopts  "hi:n:" flag; do
28     case $flag in
29     h) usage; exit 0;;
30     i) DOCKER_IMAGE_ID=${OPTARG};;
31     n) DOCKER_IMAGE_NAME=${OPTARG};;
32     *) echo "getopts error"
33         echo
34         usage
35         exit 1;;
36     esac
37 done
38 shift $(expr $OPTIND - 1)
39 if [ $# -eq 0 ]; then
40     RUN_COMMAND="/bin/bash"
41 else
42     RUN_COMMAND="${@}"
43 fi
44
45 which docker &>/dev/null || die "docker must be on the PATH."
46
47 if [ "x${DOCKER_IMAGE_NAME}" == "x" ]; then
48     if [ "x${DOCKER_IMAGE_ID}" == "x" ]; then
49         usage
50         exit 1
51     fi
52 else
53     if [ "x${DOCKER_IMAGE_ID}" == "x" ]; then
54         :
55     else
56         echo "You must not supply both an ID and a name."
57         exit 1
58     fi
59     DOCKER_IMAGE_ID=$(docker ps -f name=${DOCKER_IMAGE_NAME} -q)
60     [ "x${DOCKER_IMAGE_ID}" == "x" ] && \
61         die "failed to find a docker image named ${DOCKER_IMAGE_NAME}"
62 fi
63
64 docker exec -it "${DOCKER_IMAGE_ID}" ${RUN_COMMAND}