#!/bin/bash
# -----------------------------------------------------------------------------
# Remotely pushes bits to a remote node and installs ONOS on it.
# -----------------------------------------------------------------------------

function _usage () {
cat << _EOF_
usage:
 $(basename $0) [-fn] [-m] <settings> [node]

flags:
- -f            : forces uninstall of currently installed ONOS
- -u            : don't install onos.conf upstart configuration file
- -i            : don't install /etc/init.d/onos script (also used by onos.conf)
- -n            : don't try to start ONOS
- -m <settings> : pass <settings> XML file to remote maven installation

options:
- [node] : remote node to install ONOS on.

summary:
 Remotely pushes bits to a remote node and installs ONOS on it.

 The -u should be used on upstart-based systems.

 If [node] is not specified the default target is \$OCI.

_EOF_
}

[ "$1" = "-h" ] && _usage && exit 0

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

while getopts fnm: o; do
    case "$o" in
        f) uninstall=true;;
        u) noupstart=true; noinitd=true;;
        i) noinitd=true;;
        n) nostart=true;;
        m) mvn_settings=$OPTARG;;
    esac
done
let OPC=$OPTIND-1
shift $OPC

# If the -f was given, attempt uninstall first.
[ -n "$uninstall" ] && onos-uninstall ${1:-$OCI}

node=${1:-$OCI}
remote=$ONOS_USER@$node

$(dirname $0)/onos-push-bits $node

[ ! -z "$mvn_settings" ] && scp -q $mvn_settings $remote:/tmp/settings.xml

ssh $remote "
    [ -d $ONOS_INSTALL_DIR/bin ] && echo \"ONOS is already installed\" && exit 1

    # Prepare a landing zone and unroll the bits
    sudo mkdir -p $ONOS_INSTALL_DIR && sudo chown ${ONOS_USER}:${ONOS_GROUP} $ONOS_INSTALL_DIR
    tar zxmf /tmp/$ONOS_BITS.tar.gz -C $ONOS_INSTALL_DIR --strip-components=1

    # Make a link to the log file directory and make a home for auxiliaries
    ln -s $ONOS_INSTALL_DIR/$KARAF_DIST/data/log /opt/onos/log
    ln -s $ONOS_INSTALL_DIR/$KARAF_DIST /opt/onos/karaf
    mkdir $ONOS_INSTALL_DIR/var
    mkdir $ONOS_INSTALL_DIR/config

    # Install the configuration file(s) and set up options for debugging
    [ -n $noupstart ] && sudo cp $ONOS_INSTALL_DIR/init/onos.conf /etc/init/onos.conf
    [ -n $noinitd ] && sudo cp $ONOS_INSTALL_DIR/init/onos.initd /etc/init.d/onos
    echo 'export ONOS_OPTS=debug' > $ONOS_INSTALL_DIR/options

    # Set up correct user to run onos-service
    echo 'export ONOS_USER=$ONOS_USER' >> $ONOS_INSTALL_DIR/options

    # Remove any previous ON.Lab bits from ~/.m2 repo.
    rm -fr ~/.m2/repository/org/onosproject

    [ ! -z $mvn_settings ] && cp /tmp/settings.xml ~/.m2/settings.xml

    # Drop log level for the console
    echo 'log4j.logger.org.apache.sshd = WARN' \
        >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/org.ops4j.pax.logging.cfg

"

# Configure the ONOS installation
onos-config $node

# Unless -n option was given, attempt to ignite the ONOS service.
[ -z "$nostart" ] && onos-service $node start
