dssh: add login-by-name
[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
39 which docker &>/dev/null || die "docker must be on the PATH."
40
41 if [ "x${DOCKER_IMAGE_NAME}" == "x" ]; then
42     if [ "x${DOCKER_IMAGE_ID}" == "x" ]; then
43         usage
44         exit 1
45     fi
46 else
47     if [ "x${DOCKER_IMAGE_ID}" == "x" ]; then
48         :
49     else
50         echo "You must not supply both an ID and a name."
51         exit 1
52     fi
53     DOCKER_IMAGE_ID=$(docker ps -f name=${DOCKER_IMAGE_NAME} -q)
54     [ "x${DOCKER_IMAGE_ID}" == "x" ] && \
55         die "failed to find a docker image named ${DOCKER_IMAGE_NAME}"
56 fi
57
58 docker exec -it "${DOCKER_IMAGE_ID}" /bin/bash