Ayaka Koshibe
Committed by Yuta Higuchi

Initial cut of `onos-group` script for running a subset of commands

against multiple ONOS instances:

  - onos-install
  - onos-push-keys
  - onos-kill
  - onos-patch-vm
  - onos-uninstall

onos-group is simply a wrapper that does minimal sanity checks. New
commands are added by adding them to the GOPTS list in ogroup-opts.

Reference: ONOS-536

Change-Id: Ib3055491fec80e8759e87594e81a88285546deaf
...@@ -146,11 +146,13 @@ function vicell() { ...@@ -146,11 +146,13 @@ function vicell() {
146 printf "${cdf} : no such cell\n" && return 1 146 printf "${cdf} : no such cell\n" && return 1
147 fi 147 fi
148 148
149 - if [ -z "$EDITOR" ]; then 149 + if [ -z "${EDITOR}" ] || [ -x "$(which ${EDITOR})" ]; then
150 - vi ${cpath}${cdf} 150 + unset EDITOR && vi ${cpath}${cdf}
151 else 151 else
152 $EDITOR ${cpath}${cdf} 152 $EDITOR ${cpath}${cdf}
153 fi 153 fi
154 ($apply) && cell ${cdf} 154 ($apply) && cell ${cdf}
155 -
156 } 155 }
156 +
157 +# autocomplete for certain utilities
158 +. ${ONOS_ROOT}/tools/test/bin/ogroup-opts
......
1 +# tab completion settings for onos-group.
2 +
3 +# options available to onos-group
4 +GOPTS='install kill patch-vm push-keys uninstall'
5 +
6 +function _ogroup-opts () {
7 + local cur=${COMP_WORDS[COMP_CWORD]}
8 +
9 + if [ $COMP_CWORD -eq 1 ]; then
10 + COMPREPLY=( $( compgen -W "$GOPTS help" -- $cur ) )
11 + fi
12 +}
13 +
14 +complete -F _ogroup-opts onos-group
1 +#!/bin/bash
2 +# -----------------------------------------------------------------------------
3 +# Allows a select group of commands to be sent to all ONOS instances in a cell.
4 +# -----------------------------------------------------------------------------
5 +
6 +set -o pipefail
7 +IFS=$'\n'
8 +
9 +source ogroup-opts
10 +
11 +function err() {
12 + printf '%s: %s: %s\n' "$(basename $0)" "$1" "$2" >&2
13 + usage >&2
14 + exit 1
15 +}
16 +
17 +function usage() {
18 +cat << EOF
19 +
20 +usage: $(basename $0) <help|[command]>
21 +
22 +Sends a command to all ONOS instances in the current cell. Currently supported
23 +commands are: $GOPTS
24 +
25 +options:
26 + [command] : A command to send to the instances.
27 + help : Displays this message and exits.
28 +
29 +notes:
30 + Hitting <TAB> will display the options for $(basename $0).
31 +
32 +EOF
33 +}
34 +
35 +# gets the utility name
36 +function getcmd() {
37 + # check that utility can be run in "batch-mode"
38 + local isgopt=false
39 + for c in $(printf '%s' "$GOPTS" | tr ' ' $'\n'); do
40 + [ "$c" = "$1" ] && isgopt=true && break
41 + done
42 + if $isgopt ; then
43 + printf 'onos-%s' "$1"
44 + else
45 + err 'unsupported command' "$1"
46 + fi
47 +}
48 +
49 +# early sanity check for instances/arguments
50 +[ -z "$1" ] && usage && exit 0
51 +
52 +OCIS=( $(env | sed -ne 's:OC[0-9]=\(.*\):\1 :g p' | sort -k1) )
53 +if [ -z "$OCIS" ]; then
54 + printf "no controller instances, quitting early" >&2 && exit 0
55 +fi
56 +
57 +CMD_HELP=false
58 +while [ $# -gt 0 ]; do
59 + case "$1" in
60 + 'help')
61 + usage && exit 0
62 + ;;
63 + '-'?)
64 + err 'invalid flag' "$1" && exit 1
65 + ;;
66 + *)
67 + cmd=$(getcmd $1) || exit 1
68 + shift
69 + # grab flags aimed at the utility being called.
70 + argv=( $@ )
71 + args=()
72 + for i in "${!argv[@]}"; do
73 + # 'help' is a parameter for us; '-h' is for the command
74 + [ "${argv[$i]}" = 'help' ] && break
75 + [ "${argv[$i]}" = '-h' ] && CMD_HELP=true
76 + args[$i]="${argv[$i]}"
77 + shift
78 + done
79 + continue
80 + ;;
81 + esac
82 + shift
83 +done
84 +
85 +( $CMD_HELP ) && $cmd '-h' && exit 0
86 +
87 +# TODO: verbose-mode and cleanup
88 +for i in ${OCIS[@]}; do
89 + ${cmd} $(echo ${args[@]}) "$i" 2>/dev/null &
90 +done