#!/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 $ONOS_USER@${node} "sudo ${2:-status} onos"
        done
    ;;
    *)
        echo "error: $2 is not a valid command"
        echo ""
        print_usage
    ;;
esac
