summaryrefslogtreecommitdiffstats
path: root/bin/opscp
blob: 4bfe166f67815c78d207529684ff7443edd9ac13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash
# vim: expandtab:tabstop=4:shiftwidth=4


function usage() {
    cat << EOF
Usage: opscp [OPTIONS] local remote

Options:
  --version             show program's version number and exit
  --help                show this help message and exit
  -l USER, --user=USER  username (OPTIONAL)
  -p PAR, --par=PAR     max number of parallel threads (OPTIONAL)
  --outdir=OUTDIR       output directory for stdout files (OPTIONAL)
  --errdir=ERRDIR       output directory for stderr files (OPTIONAL)
  -c CLUSTER, --cluster CLUSTER
                        which cluster to use
  -e ENV, --env ENV     which environment to use
  --v3                  When working with v3 environments.  v2 by default
  -t HOST_TYPE, --host-type HOST_TYPE
                        which host type to use
  --list-host-types     list all of the host types
  --timeout=TIMEOUT     timeout (secs) (0 = no timeout) per host (OPTIONAL)
  -O OPTION, --option=OPTION
                        SSH option (OPTIONAL)
  -v, --verbose         turn on warning and diagnostic messages (OPTIONAL)
  -A, --askpass         Ask for a password (OPTIONAL)
  -x ARGS, --extra-args=ARGS
                        Extra command-line arguments, with processing for
                        spaces, quotes, and backslashes
  -X ARG, --extra-arg=ARG
                        Extra command-line argument
  -r, --recursive       recusively copy directories (OPTIONAL)

Example: opscp -t ex-srv -e stg -l irb2 foo.txt /home/irb2/foo.txt

EOF
}

if [ $# -eq 0 ] || [ "$1" == "--help" ]
then
    usage
    exit 1
fi

# See if ohi is installed
if ! which ohi &>/dev/null ; then
    echo "ERROR: can't find ohi (OpenShift Host Inventory) on your system, please either install the openshift-ansible-bin package, or add openshift-ansible/bin to your path."

    exit 10
fi

PAR=200
USER=root
TIMEOUT=0
ENV=""
HOST_TYPE=""

while [ $# -gt 0 ] ; do
    case $1 in
        -t|--host-type)
            shift # get past the option
            HOST_TYPE=$1
            shift # get past the value of the option
            ;;

        -c)
            shift # get past the option
            CLUSTER=$1
            shift # get past the value of the option
            ;;

        -e)
            shift # get past the option
            ENV=$1
            shift # get past the value of the option
            ;;

        --v3)
            OPENSHIFT_VERSION="--v3 --ip"
            shift # get past the value of the option
            ;;

        --timeout)
            shift # get past the option
            TIMEOUT=$1
            shift # get past the value of the option
            ;;

        -p|--par)
            shift # get past the option
            PAR=$1
            shift # get past the value of the option
            ;;

        -l|--user)
            shift # get past the option
            USER=$1
            shift # get past the value of the option
            ;;

        --list-host-types)
            ohi --list-host-types
            exit 0
            ;;

        -h|--hosts|-H|--host|-o)
            echo "ERROR: unknown option $1"
            exit 20
            ;;

        *)
            args+=("$1")
            shift
            ;;
    esac
done

# Get host list from ohi
CMD=""
if [ -n "$CLUSTER" ] ; then
  CMD="$CMD -c $CLUSTER"
fi

if [ -n "$ENV" ] ; then
  CMD="$CMD -e $ENV"
fi

if [ -n "$HOST_TYPE" ] ; then
  CMD="$CMD -t $HOST_TYPE"
fi

if [ -n "$OPENSHIFT_VERSION" ] ; then
  CMD="$CMD $OPENSHIFT_VERSION"
fi

if [ -n "$CMD" ] ; then
    HOSTS="$(ohi $CMD 2>/dev/null)"
    OHI_ECODE=$?
fi

if [ $OHI_ECODE -ne 0 ] ; then
    echo
    echo "ERROR: ohi failed with exit code $OHI_ECODE"
    echo
    echo "This is usually caused by a bad value passed for host-type or environment."
    echo
    exit 25
fi

exec pscp.pssh -t $TIMEOUT -p $PAR -l $USER -h <(echo "$HOSTS") "${args[@]}"