aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/test/bin/onos-group
blob: 150f9470fc3b7c2cb96e3fe3737f06a40507bc22 (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
#!/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