aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/test/bin/onos-group
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/tools/test/bin/onos-group')
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-group90
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