blob: 9f675d5ca7c36a29c3c8c675d09813f0ec5499bf [file] [log] [blame]
David K. Bainbridge7ae4f192016-09-29 09:01:38 -07001#!/bin/bash
2
3PROG=$(basename $0)
4
5usage() {
6 echo "$PROG [-s|--server <head-node-ip>] [-p|--port <head-node-ssh-port>] [-u|--user <head-node-ssh-user>] <command> <options>"
7
8 # Find all files in path that match the pattern "cord-*"
9 ALL_FILES=
10 for DIR in $(echo $PATH | sed -e 's/:/ /g'); do
11 ALL_FILES="$ALL_FILES $(/bin/ls -1 $DIR/cord-* 2> /dev/null)"
12 done
13
14 # Filter that down to only those files that we can "execute"
15 COMMANDS=
16 for CMD in $ALL_FILES; do
17 test -x "$CMD" && COMMANDS="$COMMANDS $CMD"
18 done
David K. Bainbridge6e23ac82016-12-07 12:55:41 -080019
David K. Bainbridge7ae4f192016-09-29 09:01:38 -070020 # Process comands for usage information
21 # Output all commands and their help information to file
22 # so it can be sorted. The format will be:
23 #
24 # command usage_message
25
26 # Find longest command name for table spacing
27 MAX=0
28 for CMD in $COMMANDS; do
29 LEN=$(echo $(basename $CMD | sed -e 's/^[^-]*-//g') | wc -c)
30 test $LEN -gt $MAX && MAX=$LEN
31 done
32
33 FILE=$(mktemp)
34 # Process all the commands into the usage file
35 for CMD in $COMMANDS; do
36 NAME=$(basename $CMD | sed -e 's/^[^-]*-//g')
37 DESC=$(grep "^#D " $CMD | head -1 | sed -e 's/^#D\w*//g' )
38 printf " %-${MAX}s %s\n" $NAME "$DESC" >> $FILE
39 done
40 sort -u $FILE
41
42 # clean up
43 rm -f $FILE
44 COMMANDS=$(echo $COMMANDS | sed -e 's/w+/ /g')
45}
46
47if [ $# -eq 0 ]; then
48 usage
49 exit 1
50fi
51
52SHORT=
53while [ "$SHORT x" == " x" -a $# -gt 0 ]; do
54 case $1 in
55 help|-h|--help)
56 usage
57 exit 0
58 ;;
59 -s|--server)
60 shift
61 if [ $# -eq 0 ]; then
62 >&2 echo "Server parameter must be specified with '--server' option"
63 usage
64 exit 1
65 fi
66 export CORD_HEAD_NODE="$1"
67 ;;
68 -u|--user)
69 shift
70 if [ $# -eq 0 ]; then
71 >&2 echo "User parameter must be specified with '--user' option"
72 usage
73 exit 1
74 fi
75 export CORD_HEAD_NODE_USER="$1"
76 ;;
77 -p|--port)
78 shift
79 if [ $# -eq 0 ]; then
80 >&2 echo "Port parameter must be specified with '--port' option"
81 usage
82 exit 1
83 fi
84 export CORD_HEAD_NODE_PORT="$1"
85 ;;
86 -*)
87 >&2 echo "Unknown command line option '$1'."
88 usage
89 exit 1
90 ;;
91 *)
92 SHORT=$1
93 ;;
94 esac
95 shift
96done
97
98if [ "$SHORT x" == " x" ]; then
99 >&2 echo "CORD command must be specified"
100 usage
101 exit 1
102fi
103
104COMMAND="cord-$SHORT"
105FULL_COMMAND=$(which $COMMAND)
106
107if [ ! -x "$FULL_COMMAND" ]; then
108 >&2 echo "Unknown command specified '$SHORT'."
109 usage
110 exit 1
111fi
112
113test -z $CORD_HEAD_NODE && export CORD_HEAD_NODE="localhost"
114test -z $CORD_HEAD_NODE_USER && export CORD_HEAD_NODE_USER="ubuntu"
115test -z $CORD_HEAD_NODE_PORT && export CORD_HEAD_NODE_PORT="22"
116
117exec "$FULL_COMMAND" $*
118
119