diff options
Diffstat (limited to 'bin/opscp')
| -rwxr-xr-x | bin/opscp | 151 | 
1 files changed, 81 insertions, 70 deletions
| @@ -1,8 +1,9 @@  #!/bin/bash +# vim: expandtab:tabstop=4:shiftwidth=4  function usage() { -  cat << EOF +    cat << EOF  Usage: opscp [OPTIONS] local remote  Options: @@ -10,12 +11,13 @@ Options:    --help                show this help message and exit    -l USER, --user=USER  username (OPTIONAL)    -p PAR, --par=PAR     max number of parallel threads (OPTIONAL) -  --errdir=ERRDIR       output directory for stderr files (OPTIONAL)    --outdir=OUTDIR       output directory for stdout files (OPTIONAL) -  -e ENV, --env ENV     Which environment to use +  --errdir=ERRDIR       output directory for stderr files (OPTIONAL) +  -e ENV, --env ENV     which environment to use    -t HOST_TYPE, --host-type HOST_TYPE -                        Which host type to use -  --list-host-types     List all of the host types +                        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) @@ -34,89 +36,98 @@ EOF  if [ $# -eq 0 ] || [ "$1" == "--help" ]  then -  usage -  exit 1 +    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 -PSCP_PAR=200 +PAR=200  USER=root -PSCP_OPTIONS="" +TIMEOUT=0  ENV=""  HOST_TYPE="" +  while [ $# -gt 0 ] ; do -  if [ "$1" == "-t" -o "$1" == "--host-type" ] ; then -    shift # get past the option -    HOST_TYPE=$1 -    shift # get past the value of the option - -  elif [ "$1" == "-e" ] ; then -    shift # get past the option -    ENV=$1 -    shift # get past the value of the option - -  elif [ "$1" == "-p" -o "$1" == "--par" ] ; then -    shift # get past the option -    PSCP_PAR=$1 -    shift # get past the value of the option - -  elif [ "$1" == "-l" -o "$1" == "--user" ] ; then -    shift # get past the option -    USER=$1 -    shift # get past the value of the option - -  elif [ "$1" == "--list-host-types" ] ; then -    ohi --list-host-types -    exit 0 - -  elif [ "$1" == "-h" -o "$1" == "--hosts" -o "$1" == "-H" -o "$1" == "--host" ] || -       [ "$1" == "-o" ] ; then -    echo "ERROR: unknown option $1" -    exit 20 - -  else -    if [ "${1:0:1}" == "-" ] ; then -      # It's an option, don't quote -      PSCP_OPTIONS="$PSCP_OPTIONS $1" -    else -      PSCP_OPTIONS="$PSCP_OPTIONS '$1'" -    fi -    shift # Get past this option -  fi +    case $1 in +        -t|--host-type) +            shift # get past the option +            HOST_TYPE=$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 +            ;; + +        --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  if [ -z "$ENV" ]  then -  echo -  echo "-e is a required paramemeter" -  echo -  exit 10 +    echo +    echo "-e is a required paramemeter" +    echo +    exit 10  fi  if [ -z "$HOST_TYPE" ]  then -  echo -  echo "-t is a required paramemeter" -  echo -  exit 15 +    echo +    echo "-t is a required paramemeter" +    echo +    exit 15  fi -PSCP_OPTIONS="-t 0 -p $PSCP_PAR -l $USER -h <(ohi -t $HOST_TYPE -e $ENV 2>/dev/null) $PSCP_OPTIONS" - -  # See if the ohi options are valid -ohi -t $HOST_TYPE -e $ENV &> /dev/null +HOSTS="$(ohi -t "$HOST_TYPE" -e "$ENV" 2>/dev/null)"  ECODE=$?  if [ $ECODE -ne 0 ] ; then -  echo -  echo "ERROR: ohi failed with exit code $ECODE" -  echo -  echo "This is usually caused by a bad value passed for host-type or environment." -  echo -  exit 25 +    echo +    echo "ERROR: ohi failed with exit code $ECODE" +    echo +    echo "This is usually caused by a bad value passed for host-type or environment." +    echo +    exit 25  fi -echo -echo "Running: pscp.pssh $PSCP_OPTIONS" -echo - -eval pscp.pssh $PSCP_OPTIONS +exec pscp.pssh -t $TIMEOUT -p $PAR -l $USER -h <(echo "$HOSTS") "${args[@]}" | 
