diff options
Diffstat (limited to 'framework/src/onos/tools/test/bin/onos-group')
-rwxr-xr-x | framework/src/onos/tools/test/bin/onos-group | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/framework/src/onos/tools/test/bin/onos-group b/framework/src/onos/tools/test/bin/onos-group new file mode 100755 index 00000000..150f9470 --- /dev/null +++ b/framework/src/onos/tools/test/bin/onos-group @@ -0,0 +1,90 @@ +#!/bin/bash +# ----------------------------------------------------------------------------- +# Allows a select group of commands to be sent to all ONOS instances in a cell. +# ----------------------------------------------------------------------------- + +set -o pipefail +IFS=$'\n' + +source ogroup-opts + +function err() { + printf '%s: %s: %s\n' "$(basename $0)" "$1" "$2" >&2 + usage >&2 + exit 1 +} + +function usage() { +cat << EOF + +usage: $(basename $0) <help|[command]> + +Sends a command to all ONOS instances in the current cell. Currently supported +commands are: $GOPTS + +options: + [command] : A command to send to the instances. + help : Displays this message and exits. + +notes: + Hitting <TAB> will display the options for $(basename $0). + +EOF +} + +# gets the utility name +function getcmd() { + # check that utility can be run in "batch-mode" + local isgopt=false + for c in $(printf '%s' "$GOPTS" | tr ' ' $'\n'); do + [ "$c" = "$1" ] && isgopt=true && break + done + if $isgopt ; then + printf 'onos-%s' "$1" + else + err 'unsupported command' "$1" + fi +} + +# early sanity check for instances/arguments +[ -z "$1" ] && usage && exit 0 + +OCIS=( $(env | sed -ne 's:OC[0-9]\{1,\}=\(.*\):\1 :g p' | sort -k1) ) +if [ -z "$OCIS" ]; then + printf "no controller instances, quitting early" >&2 && exit 0 +fi + +CMD_HELP=false +while [ $# -gt 0 ]; do + case "$1" in + 'help') + usage && exit 0 + ;; + '-'?) + err 'invalid flag' "$1" && exit 1 + ;; + *) + cmd=$(getcmd $1) || exit 1 + shift + # grab flags aimed at the utility being called. + argv=( $@ ) + args=() + for i in "${!argv[@]}"; do + # 'help' is a parameter for us; '-h' is for the command + [ "${argv[$i]}" = 'help' ] && break + [ "${argv[$i]}" = '-h' ] && CMD_HELP=true + args[$i]="${argv[$i]}" + shift + done + continue + ;; + esac + shift +done + +( $CMD_HELP ) && $cmd '-h' && exit 0 + +# TODO: verbose-mode and cleanup +for i in ${OCIS[@]}; do + ${cmd} $(echo ${args[@]}) "$i" 2>/dev/null & +done |