#!/bin/bash
# -----------------------------------------------------------------------------
# Remotely administers the ONOS service on the specified node.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults
. $ONOS_ROOT/tools/test/bin/find-node.sh

function print_usage {
    command_name=`basename $0`
    echo "Remotely administer the ONOS service on a single node or the current ONOS cell."
    echo
    echo "Usage:     $command_name <TARGET> [COMMAND]"
    echo "           $command_name [-h | --help]"
    echo "Options:"
    echo "    TARGET          The target of the command"
    echo "    COMMAND         The command to execute. Default value is 'status'"
    echo "    [-h | --help]   Print this help"
    echo ""
    echo "TARGET:  <hostname | --cell>"
    echo "      hostname        Execute on the specified host name"
    echo "        --cell        Execute on the current ONOS cell"
    echo ""
    echo "COMMAND: [start|stop|restart|status]"
    echo ""
}

# Print usage
if [ "${1}" = "-h" -o "${1}" = "--help" ]; then
    print_usage
    exit 0
fi

case $2 in
    start|stop|restart|status)
        # Select the target
        if [ "${1}" = "--cell" ]; then
            nodes=$(env | sort | egrep "^OC[0-9]+" | cut -d= -f2)
        else
            nodes=$(find_node ${1:-$OCI})
        fi

        # Execute the remote commands
        for node in $nodes; do
            ssh -tt $ONOS_USER@${node} "sudo service onos ${2:-status}"
        done
    ;;
    *)
        echo "error: $2 is not a valid command"
        echo ""
        print_usage
    ;;
esac
